Created
December 3, 2025 14:20
-
-
Save CodeFocusChannel/5601485f3756527a59fad4db6b7d023e to your computer and use it in GitHub Desktop.
Turn any YouTuber into an AI agent
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "name": "YT Processing UPDATED", | |
| "nodes": [ | |
| { | |
| "parameters": { | |
| "assignments": { | |
| "assignments": [ | |
| { | |
| "id": "eb0d7330-0198-43fa-9a74-6d69d84635b8", | |
| "name": "channel_handle", | |
| "value": "", | |
| "type": "string" | |
| } | |
| ] | |
| }, | |
| "options": {} | |
| }, | |
| "type": "n8n-nodes-base.set", | |
| "typeVersion": 3.4, | |
| "position": [ | |
| 48, | |
| 80 | |
| ], | |
| "id": "daaac0a4-933a-4a07-bc2c-3586726f5d3c", | |
| "name": "Edit Fields" | |
| }, | |
| { | |
| "parameters": { | |
| "operation": "appendOrUpdate", | |
| "documentId": { | |
| "__rl": true, | |
| "value": "1VXUBavv_9Ba6O3SZbTMdIjjE9xVdRfCcm0thJ-vvHnA", | |
| "mode": "list", | |
| "cachedResultName": "YT Processing", | |
| "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1VXUBavv_9Ba6O3SZbTMdIjjE9xVdRfCcm0thJ-vvHnA/edit?usp=drivesdk" | |
| }, | |
| "sheetName": { | |
| "__rl": true, | |
| "value": 25357018, | |
| "mode": "list", | |
| "cachedResultName": "KyleFrielTech", | |
| "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1VXUBavv_9Ba6O3SZbTMdIjjE9xVdRfCcm0thJ-vvHnA/edit#gid=25357018" | |
| }, | |
| "columns": { | |
| "mappingMode": "defineBelow", | |
| "value": { | |
| "Video ID": "={{ $json.id }}", | |
| "Channel ID": "={{ $json.snippet.channelId }}", | |
| "Title": "={{ $json.snippet.title }}", | |
| "Publish Time": "={{ $json.snippet.publishedAt }}", | |
| "Channel": "={{ $('Edit Fields').item.json.channel_handle }}", | |
| "Thumbnail": "={{ $json.snippet.thumbnails.high.url }}", | |
| "Link": "=https://www.youtube.com/watch?v={{ $json.id }}", | |
| "View Count": "={{ $json.statistics.viewCount }}", | |
| "Like Count": "={{ $json.statistics.likeCount }}", | |
| "Comment Count": "={{ $json.statistics.commentCount }}", | |
| "Type": "={{ $json.isShort ? 'Short' : 'Video' }}", | |
| "Seconds": "={{ $json.totalSeconds }}" | |
| }, | |
| "matchingColumns": [ | |
| "Video ID" | |
| ], | |
| "schema": [ | |
| { | |
| "id": "Video ID", | |
| "displayName": "Video ID", | |
| "required": false, | |
| "defaultMatch": false, | |
| "display": true, | |
| "type": "string", | |
| "canBeUsedToMatch": true, | |
| "removed": false | |
| }, | |
| { | |
| "id": "Channel ID", | |
| "displayName": "Channel ID", | |
| "required": false, | |
| "defaultMatch": false, | |
| "display": true, | |
| "type": "string", | |
| "canBeUsedToMatch": true | |
| }, | |
| { | |
| "id": "Channel", | |
| "displayName": "Channel", | |
| "required": false, | |
| "defaultMatch": false, | |
| "display": true, | |
| "type": "string", | |
| "canBeUsedToMatch": true | |
| }, | |
| { | |
| "id": "Title", | |
| "displayName": "Title", | |
| "required": false, | |
| "defaultMatch": false, | |
| "display": true, | |
| "type": "string", | |
| "canBeUsedToMatch": true | |
| }, | |
| { | |
| "id": "Type", | |
| "displayName": "Type", | |
| "required": false, | |
| "defaultMatch": false, | |
| "display": true, | |
| "type": "string", | |
| "canBeUsedToMatch": true, | |
| "removed": false | |
| }, | |
| { | |
| "id": "Seconds", | |
| "displayName": "Seconds", | |
| "required": false, | |
| "defaultMatch": false, | |
| "display": true, | |
| "type": "string", | |
| "canBeUsedToMatch": true, | |
| "removed": false | |
| }, | |
| { | |
| "id": "Publish Time", | |
| "displayName": "Publish Time", | |
| "required": false, | |
| "defaultMatch": false, | |
| "display": true, | |
| "type": "string", | |
| "canBeUsedToMatch": true, | |
| "removed": false | |
| }, | |
| { | |
| "id": "Link", | |
| "displayName": "Link", | |
| "required": false, | |
| "defaultMatch": false, | |
| "display": true, | |
| "type": "string", | |
| "canBeUsedToMatch": true, | |
| "removed": false | |
| }, | |
| { | |
| "id": "Thumbnail", | |
| "displayName": "Thumbnail", | |
| "required": false, | |
| "defaultMatch": false, | |
| "display": true, | |
| "type": "string", | |
| "canBeUsedToMatch": true, | |
| "removed": false | |
| }, | |
| { | |
| "id": "View Count", | |
| "displayName": "View Count", | |
| "required": false, | |
| "defaultMatch": false, | |
| "display": true, | |
| "type": "string", | |
| "canBeUsedToMatch": true, | |
| "removed": false | |
| }, | |
| { | |
| "id": "Like Count", | |
| "displayName": "Like Count", | |
| "required": false, | |
| "defaultMatch": false, | |
| "display": true, | |
| "type": "string", | |
| "canBeUsedToMatch": true, | |
| "removed": false | |
| }, | |
| { | |
| "id": "Comment Count", | |
| "displayName": "Comment Count", | |
| "required": false, | |
| "defaultMatch": false, | |
| "display": true, | |
| "type": "string", | |
| "canBeUsedToMatch": true, | |
| "removed": false | |
| }, | |
| { | |
| "id": "Transcript File ID", | |
| "displayName": "Transcript File ID", | |
| "required": false, | |
| "defaultMatch": false, | |
| "display": true, | |
| "type": "string", | |
| "canBeUsedToMatch": true, | |
| "removed": false | |
| }, | |
| { | |
| "id": "Transcript Link", | |
| "displayName": "Transcript Link", | |
| "required": false, | |
| "defaultMatch": false, | |
| "display": true, | |
| "type": "string", | |
| "canBeUsedToMatch": true, | |
| "removed": false | |
| }, | |
| { | |
| "id": "Vector Status", | |
| "displayName": "Vector Status", | |
| "required": false, | |
| "defaultMatch": false, | |
| "display": true, | |
| "type": "string", | |
| "canBeUsedToMatch": true, | |
| "removed": false | |
| } | |
| ], | |
| "attemptToConvertTypes": false, | |
| "convertFieldsToString": false | |
| }, | |
| "options": { | |
| "useAppend": true | |
| } | |
| }, | |
| "type": "n8n-nodes-base.googleSheets", | |
| "typeVersion": 4.7, | |
| "position": [ | |
| 1136, | |
| 80 | |
| ], | |
| "id": "f4d1fea1-73db-4a1d-b34b-a34252eb5537", | |
| "name": "Append or update row in sheet", | |
| "credentials": { | |
| "googleSheetsOAuth2Api": { | |
| "id": "HngHdvL4ncK2MxZb", | |
| "name": "Google Sheets account" | |
| } | |
| } | |
| }, | |
| { | |
| "parameters": { | |
| "resource": "video", | |
| "returnAll": true, | |
| "filters": { | |
| "channelId": "={{ $json.channelId }}" | |
| }, | |
| "options": {} | |
| }, | |
| "type": "n8n-nodes-base.youTube", | |
| "typeVersion": 1, | |
| "position": [ | |
| 592, | |
| 80 | |
| ], | |
| "id": "e74077e1-23bf-4933-b5b8-0381862bafdc", | |
| "name": "Get many videos", | |
| "credentials": { | |
| "youTubeOAuth2Api": { | |
| "id": "PastEx3bxO2UAadP", | |
| "name": "YouTube account" | |
| } | |
| } | |
| }, | |
| { | |
| "parameters": { | |
| "resource": "video", | |
| "operation": "get", | |
| "videoId": "={{ $json.id.videoId }}", | |
| "options": {} | |
| }, | |
| "type": "n8n-nodes-base.youTube", | |
| "typeVersion": 1, | |
| "position": [ | |
| 784, | |
| 80 | |
| ], | |
| "id": "68ce5162-b663-4b6e-bb14-1f8f4d190567", | |
| "name": "Get a video", | |
| "credentials": { | |
| "youTubeOAuth2Api": { | |
| "id": "PastEx3bxO2UAadP", | |
| "name": "YouTube account" | |
| } | |
| } | |
| }, | |
| { | |
| "parameters": { | |
| "jsCode": "function parseYouTubeDuration(duration) {\n const match = duration.match(/PT(?:(\\d+)H)?(?:(\\d+)M)?(?:(\\d+)S)?/);\n const hours = parseInt(match[1] || 0);\n const minutes = parseInt(match[2] || 0);\n const seconds = parseInt(match[3] || 0);\n return hours * 3600 + minutes * 60 + seconds; // total seconds\n}\n\n\nfor (const item of $input.all()) {\n const totalSeconds = parseYouTubeDuration(item.json.contentDetails.duration);\n\n item.json.totalSeconds = totalSeconds;\n item.json.isShort = totalSeconds <= 180;\n \n}\n\nreturn $input.all()" | |
| }, | |
| "type": "n8n-nodes-base.code", | |
| "typeVersion": 2, | |
| "position": [ | |
| 960, | |
| 80 | |
| ], | |
| "id": "99fbfdc1-7443-41c3-9b4b-976346236998", | |
| "name": "Code in JavaScript" | |
| }, | |
| { | |
| "parameters": { | |
| "content": "## Add Videos to Sheet", | |
| "height": 240, | |
| "width": 1360, | |
| "color": 5 | |
| }, | |
| "type": "n8n-nodes-base.stickyNote", | |
| "position": [ | |
| 0, | |
| 16 | |
| ], | |
| "typeVersion": 1, | |
| "id": "f3531b3e-9d81-4fa9-98a4-7e7e47467662", | |
| "name": "Sticky Note" | |
| }, | |
| { | |
| "parameters": { | |
| "documentId": { | |
| "__rl": true, | |
| "value": "1VXUBavv_9Ba6O3SZbTMdIjjE9xVdRfCcm0thJ-vvHnA", | |
| "mode": "list", | |
| "cachedResultName": "YT Processing", | |
| "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1VXUBavv_9Ba6O3SZbTMdIjjE9xVdRfCcm0thJ-vvHnA/edit?usp=drivesdk" | |
| }, | |
| "sheetName": { | |
| "__rl": true, | |
| "value": 25357018, | |
| "mode": "list", | |
| "cachedResultName": "KyleFrielTech", | |
| "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1VXUBavv_9Ba6O3SZbTMdIjjE9xVdRfCcm0thJ-vvHnA/edit#gid=25357018" | |
| }, | |
| "filtersUI": { | |
| "values": [ | |
| { | |
| "lookupColumn": "Type", | |
| "lookupValue": "Video" | |
| } | |
| ] | |
| }, | |
| "options": {} | |
| }, | |
| "type": "n8n-nodes-base.googleSheets", | |
| "typeVersion": 4.7, | |
| "position": [ | |
| 48, | |
| 416 | |
| ], | |
| "id": "93d586c1-6895-4983-b593-9fa3fae76a0b", | |
| "name": "Get row(s) in sheet", | |
| "credentials": { | |
| "googleSheetsOAuth2Api": { | |
| "id": "HngHdvL4ncK2MxZb", | |
| "name": "Google Sheets account" | |
| } | |
| } | |
| }, | |
| { | |
| "parameters": { | |
| "url": "=https://8e1278410a9a.ngrok-free.app/transcript/{{ $json[\"Video ID\"] }}", | |
| "options": {} | |
| }, | |
| "type": "n8n-nodes-base.httpRequest", | |
| "typeVersion": 4.2, | |
| "position": [ | |
| 784, | |
| 368 | |
| ], | |
| "id": "c4390800-1313-47b1-972a-8ae8cae698c8", | |
| "name": "Transcribe" | |
| }, | |
| { | |
| "parameters": { | |
| "operation": "update", | |
| "documentId": { | |
| "__rl": true, | |
| "value": "1VXUBavv_9Ba6O3SZbTMdIjjE9xVdRfCcm0thJ-vvHnA", | |
| "mode": "list", | |
| "cachedResultName": "YT Processing", | |
| "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1VXUBavv_9Ba6O3SZbTMdIjjE9xVdRfCcm0thJ-vvHnA/edit?usp=drivesdk" | |
| }, | |
| "sheetName": { | |
| "__rl": true, | |
| "value": 25357018, | |
| "mode": "list", | |
| "cachedResultName": "KyleFrielTech", | |
| "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1VXUBavv_9Ba6O3SZbTMdIjjE9xVdRfCcm0thJ-vvHnA/edit#gid=25357018" | |
| }, | |
| "columns": { | |
| "mappingMode": "defineBelow", | |
| "value": { | |
| "Transcript File ID": "={{ $json.id }}", | |
| "Transcript Link": "=https://drive.google.com/file/d/{{ $json.id }}", | |
| "row_number": "={{ $('Loop Over Items').item.json.row_number }}" | |
| }, | |
| "matchingColumns": [ | |
| "row_number" | |
| ], | |
| "schema": [ | |
| { | |
| "id": "Video ID", | |
| "displayName": "Video ID", | |
| "required": false, | |
| "defaultMatch": false, | |
| "display": true, | |
| "type": "string", | |
| "canBeUsedToMatch": true, | |
| "removed": true | |
| }, | |
| { | |
| "id": "Channel ID", | |
| "displayName": "Channel ID", | |
| "required": false, | |
| "defaultMatch": false, | |
| "display": true, | |
| "type": "string", | |
| "canBeUsedToMatch": true, | |
| "removed": true | |
| }, | |
| { | |
| "id": "Channel", | |
| "displayName": "Channel", | |
| "required": false, | |
| "defaultMatch": false, | |
| "display": true, | |
| "type": "string", | |
| "canBeUsedToMatch": true, | |
| "removed": true | |
| }, | |
| { | |
| "id": "Title", | |
| "displayName": "Title", | |
| "required": false, | |
| "defaultMatch": false, | |
| "display": true, | |
| "type": "string", | |
| "canBeUsedToMatch": true, | |
| "removed": true | |
| }, | |
| { | |
| "id": "Type", | |
| "displayName": "Type", | |
| "required": false, | |
| "defaultMatch": false, | |
| "display": true, | |
| "type": "string", | |
| "canBeUsedToMatch": true, | |
| "removed": true | |
| }, | |
| { | |
| "id": "Seconds", | |
| "displayName": "Seconds", | |
| "required": false, | |
| "defaultMatch": false, | |
| "display": true, | |
| "type": "string", | |
| "canBeUsedToMatch": true, | |
| "removed": true | |
| }, | |
| { | |
| "id": "Publish Time", | |
| "displayName": "Publish Time", | |
| "required": false, | |
| "defaultMatch": false, | |
| "display": true, | |
| "type": "string", | |
| "canBeUsedToMatch": true, | |
| "removed": true | |
| }, | |
| { | |
| "id": "Link", | |
| "displayName": "Link", | |
| "required": false, | |
| "defaultMatch": false, | |
| "display": true, | |
| "type": "string", | |
| "canBeUsedToMatch": true, | |
| "removed": true | |
| }, | |
| { | |
| "id": "Thumbnail", | |
| "displayName": "Thumbnail", | |
| "required": false, | |
| "defaultMatch": false, | |
| "display": true, | |
| "type": "string", | |
| "canBeUsedToMatch": true, | |
| "removed": true | |
| }, | |
| { | |
| "id": "View Count", | |
| "displayName": "View Count", | |
| "required": false, | |
| "defaultMatch": false, | |
| "display": true, | |
| "type": "string", | |
| "canBeUsedToMatch": true, | |
| "removed": true | |
| }, | |
| { | |
| "id": "Like Count", | |
| "displayName": "Like Count", | |
| "required": false, | |
| "defaultMatch": false, | |
| "display": true, | |
| "type": "string", | |
| "canBeUsedToMatch": true, | |
| "removed": true | |
| }, | |
| { | |
| "id": "Comment Count", | |
| "displayName": "Comment Count", | |
| "required": false, | |
| "defaultMatch": false, | |
| "display": true, | |
| "type": "string", | |
| "canBeUsedToMatch": true, | |
| "removed": true | |
| }, | |
| { | |
| "id": "Transcript File ID", | |
| "displayName": "Transcript File ID", | |
| "required": false, | |
| "defaultMatch": false, | |
| "display": true, | |
| "type": "string", | |
| "canBeUsedToMatch": true, | |
| "removed": false | |
| }, | |
| { | |
| "id": "Transcript Link", | |
| "displayName": "Transcript Link", | |
| "required": false, | |
| "defaultMatch": false, | |
| "display": true, | |
| "type": "string", | |
| "canBeUsedToMatch": true, | |
| "removed": false | |
| }, | |
| { | |
| "id": "Vector Status", | |
| "displayName": "Vector Status", | |
| "required": false, | |
| "defaultMatch": false, | |
| "display": true, | |
| "type": "string", | |
| "canBeUsedToMatch": true, | |
| "removed": true | |
| }, | |
| { | |
| "id": "row_number", | |
| "displayName": "row_number", | |
| "required": false, | |
| "defaultMatch": false, | |
| "display": true, | |
| "type": "number", | |
| "canBeUsedToMatch": true, | |
| "readOnly": true, | |
| "removed": false | |
| } | |
| ], | |
| "attemptToConvertTypes": false, | |
| "convertFieldsToString": false | |
| }, | |
| "options": {} | |
| }, | |
| "type": "n8n-nodes-base.googleSheets", | |
| "typeVersion": 4.7, | |
| "position": [ | |
| 1360, | |
| 368 | |
| ], | |
| "id": "aff6906a-94f7-4d06-a53f-28bfb12b780d", | |
| "name": "Update row in sheet", | |
| "credentials": { | |
| "googleSheetsOAuth2Api": { | |
| "id": "HngHdvL4ncK2MxZb", | |
| "name": "Google Sheets account" | |
| } | |
| } | |
| }, | |
| { | |
| "parameters": { | |
| "url": "https://youtube.com/results", | |
| "sendQuery": true, | |
| "queryParameters": { | |
| "parameters": [ | |
| { | |
| "name": "search_query", | |
| "value": "={{ $json.channel_handle }}" | |
| } | |
| ] | |
| }, | |
| "options": {} | |
| }, | |
| "type": "n8n-nodes-base.httpRequest", | |
| "typeVersion": 4.2, | |
| "position": [ | |
| 224, | |
| 80 | |
| ], | |
| "id": "fb854d7c-1405-456c-938e-5f5fb4e1ff56", | |
| "name": "Get Channel Search HTML" | |
| }, | |
| { | |
| "parameters": { | |
| "jsCode": "const html = $input.first().json.data;\n\nconst channelIdRegex = /\"channelId\":\"(UC[\\w-]+)\"/g;\nconst handleRegex = /\"canonicalBaseUrl\":\"(\\/@[\\w\\d._-]+)\"/g;\n\nconst channelIds = [...html.matchAll(channelIdRegex)].map(m => m[1]);\nconst handles = [...html.matchAll(handleRegex)].map(m => m[1]);\n\n// Zip the two arrays together (in case they align by order)\nconst results = [];\nconst length = Math.min(channelIds.length, handles.length);\nfor (let i = 0; i < length; i++) {\n results.push({\n channelId: channelIds[i],\n handle: handles[i].replace(/^\\/?/, ''),\n });\n}\n\nreturn results.map(channel => ({ json: channel }));" | |
| }, | |
| "type": "n8n-nodes-base.code", | |
| "typeVersion": 2, | |
| "position": [ | |
| 400, | |
| 80 | |
| ], | |
| "id": "57068782-052d-42e7-b020-a23a637c636e", | |
| "name": "Extract Channel ID" | |
| }, | |
| { | |
| "parameters": { | |
| "conditions": { | |
| "options": { | |
| "caseSensitive": true, | |
| "leftValue": "", | |
| "typeValidation": "strict", | |
| "version": 2 | |
| }, | |
| "conditions": [ | |
| { | |
| "id": "d7f6fdfc-c523-40d8-9e54-6e2e871649e8", | |
| "leftValue": "={{ $json[\"Transcript File ID\"] }}", | |
| "rightValue": "", | |
| "operator": { | |
| "type": "string", | |
| "operation": "empty", | |
| "singleValue": true | |
| } | |
| } | |
| ], | |
| "combinator": "and" | |
| }, | |
| "options": {} | |
| }, | |
| "type": "n8n-nodes-base.filter", | |
| "typeVersion": 2.2, | |
| "position": [ | |
| 224, | |
| 416 | |
| ], | |
| "id": "72a89928-15a6-4374-a34e-2842f1451f37", | |
| "name": "Filter" | |
| }, | |
| { | |
| "parameters": { | |
| "operation": "toJson", | |
| "mode": "each", | |
| "options": { | |
| "fileName": "={{ $json.videoId }}.json" | |
| } | |
| }, | |
| "type": "n8n-nodes-base.convertToFile", | |
| "typeVersion": 1.1, | |
| "position": [ | |
| 976, | |
| 368 | |
| ], | |
| "id": "036b9577-71f1-4201-995d-3cd586a40d76", | |
| "name": "Convert to File" | |
| }, | |
| { | |
| "parameters": { | |
| "name": "=", | |
| "driveId": { | |
| "__rl": true, | |
| "mode": "list", | |
| "value": "My Drive" | |
| }, | |
| "folderId": { | |
| "__rl": true, | |
| "value": "1WhaQcNAPCZCp-KU8UubHZZ6zqN4VWuIb", | |
| "mode": "list", | |
| "cachedResultName": "my-video-transcripts", | |
| "cachedResultUrl": "https://drive.google.com/drive/folders/1WhaQcNAPCZCp-KU8UubHZZ6zqN4VWuIb" | |
| }, | |
| "options": {} | |
| }, | |
| "type": "n8n-nodes-base.googleDrive", | |
| "typeVersion": 3, | |
| "position": [ | |
| 1168, | |
| 368 | |
| ], | |
| "id": "f80fab64-97d6-4b15-a917-8b712fdefce2", | |
| "name": "Upload file", | |
| "credentials": { | |
| "googleDriveOAuth2Api": { | |
| "id": "kKFjcq5OGFjxf4fD", | |
| "name": "Google Drive account 3" | |
| } | |
| } | |
| }, | |
| { | |
| "parameters": { | |
| "options": {} | |
| }, | |
| "type": "n8n-nodes-base.splitInBatches", | |
| "typeVersion": 3, | |
| "position": [ | |
| 592, | |
| 416 | |
| ], | |
| "id": "818b303e-1b93-482d-952d-e758727a4386", | |
| "name": "Loop Over Items" | |
| }, | |
| { | |
| "parameters": { | |
| "content": "## Get Video Transcripts\nLong form videos only", | |
| "height": 272, | |
| "width": 1584, | |
| "color": 4 | |
| }, | |
| "type": "n8n-nodes-base.stickyNote", | |
| "position": [ | |
| 0, | |
| 320 | |
| ], | |
| "typeVersion": 1, | |
| "id": "20387739-8d5c-49c0-89f9-ef5bcb200ae0", | |
| "name": "Sticky Note1" | |
| }, | |
| { | |
| "parameters": { | |
| "mode": "insert", | |
| "tableName": { | |
| "__rl": true, | |
| "value": "yt_knowledge_v3", | |
| "mode": "list", | |
| "cachedResultName": "yt_knowledge_v3" | |
| }, | |
| "options": { | |
| "queryName": "match_yt_knowledge_v3" | |
| } | |
| }, | |
| "type": "@n8n/n8n-nodes-langchain.vectorStoreSupabase", | |
| "typeVersion": 1.3, | |
| "position": [ | |
| 1232, | |
| 896 | |
| ], | |
| "id": "3a32d28d-0ab2-40af-ba7d-cd6fafc97a96", | |
| "name": "Supabase Vector Store", | |
| "credentials": { | |
| "supabaseApi": { | |
| "id": "SqvlX6Mb6QjnneeU", | |
| "name": "Supabase account 2" | |
| } | |
| } | |
| }, | |
| { | |
| "parameters": { | |
| "options": {} | |
| }, | |
| "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi", | |
| "typeVersion": 1.2, | |
| "position": [ | |
| 1200, | |
| 1088 | |
| ], | |
| "id": "d00939cb-876a-4d1d-9b2a-7fa924de3a73", | |
| "name": "Embeddings OpenAI", | |
| "credentials": { | |
| "openAiApi": { | |
| "id": "4QprS3T7aQ3Te4lg", | |
| "name": "OpenAi account 2" | |
| } | |
| } | |
| }, | |
| { | |
| "parameters": { | |
| "operation": "download", | |
| "fileId": { | |
| "__rl": true, | |
| "value": "={{ $json['Transcript File ID'] }}", | |
| "mode": "id" | |
| }, | |
| "options": {} | |
| }, | |
| "type": "n8n-nodes-base.googleDrive", | |
| "typeVersion": 3, | |
| "position": [ | |
| 736, | |
| 992 | |
| ], | |
| "id": "e567a928-82c0-4489-826b-14270dc2d17e", | |
| "name": "Download file1", | |
| "credentials": { | |
| "googleDriveOAuth2Api": { | |
| "id": "kKFjcq5OGFjxf4fD", | |
| "name": "Google Drive account 3" | |
| } | |
| } | |
| }, | |
| { | |
| "parameters": { | |
| "documentId": { | |
| "__rl": true, | |
| "value": "1VXUBavv_9Ba6O3SZbTMdIjjE9xVdRfCcm0thJ-vvHnA", | |
| "mode": "list", | |
| "cachedResultName": "YT Processing", | |
| "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1VXUBavv_9Ba6O3SZbTMdIjjE9xVdRfCcm0thJ-vvHnA/edit?usp=drivesdk" | |
| }, | |
| "sheetName": { | |
| "__rl": true, | |
| "value": 25357018, | |
| "mode": "list", | |
| "cachedResultName": "KyleFrielTech", | |
| "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1VXUBavv_9Ba6O3SZbTMdIjjE9xVdRfCcm0thJ-vvHnA/edit#gid=25357018" | |
| }, | |
| "filtersUI": { | |
| "values": [ | |
| { | |
| "lookupColumn": "Type", | |
| "lookupValue": "Video" | |
| } | |
| ] | |
| }, | |
| "options": {} | |
| }, | |
| "type": "n8n-nodes-base.googleSheets", | |
| "typeVersion": 4.7, | |
| "position": [ | |
| -96, | |
| 736 | |
| ], | |
| "id": "8d55a254-c7ef-4d59-bce9-4549ecfa091f", | |
| "name": "Get row(s) in sheet2", | |
| "credentials": { | |
| "googleSheetsOAuth2Api": { | |
| "id": "HngHdvL4ncK2MxZb", | |
| "name": "Google Sheets account" | |
| } | |
| } | |
| }, | |
| { | |
| "parameters": { | |
| "conditions": { | |
| "options": { | |
| "caseSensitive": true, | |
| "leftValue": "", | |
| "typeValidation": "strict", | |
| "version": 2 | |
| }, | |
| "conditions": [ | |
| { | |
| "id": "5c44fac9-9ee6-4df3-9b54-5042b935241f", | |
| "leftValue": "={{ $json[\"Transcript File ID\"] }}", | |
| "rightValue": "", | |
| "operator": { | |
| "type": "string", | |
| "operation": "notEmpty", | |
| "singleValue": true | |
| } | |
| } | |
| ], | |
| "combinator": "and" | |
| }, | |
| "options": {} | |
| }, | |
| "type": "n8n-nodes-base.filter", | |
| "typeVersion": 2.2, | |
| "position": [ | |
| 112, | |
| 736 | |
| ], | |
| "id": "e280115c-2616-4e59-b03c-1d6433f36b8c", | |
| "name": "Filter2" | |
| }, | |
| { | |
| "parameters": { | |
| "operation": "fromJson", | |
| "options": {} | |
| }, | |
| "type": "n8n-nodes-base.extractFromFile", | |
| "typeVersion": 1, | |
| "position": [ | |
| 880, | |
| 992 | |
| ], | |
| "id": "79306ee9-f8f9-4a0c-85fd-bbc3101cedd1", | |
| "name": "Extract from File1" | |
| }, | |
| { | |
| "parameters": { | |
| "options": { | |
| "systemMessage": "=# Role\nYou are a specialized YouTube Content Analyst. Your sole purpose is to answer user queries based exclusively on two specific datasets. You do not use outside knowledge or general internet search.\n\n# Data Sources & Capabilities\n1. **Metadata Registry (Google Sheet):** - Contains: Video Titles, URLs, View Counts, Like Counts, Publish Dates.\n - USE WHEN: The user asks about performance metrics, ranking (e.g., \"most popular,\" \"least viewed\"), sorting, dates, or retrieving specific URLs.\n\n2. **Transcript Knowledge Base (Vector Database):**\n - Contains: Semantic chunks of video transcripts.\n - USE WHEN: The user asks about specific topics, advice, \"how-to\" instructions, spoken quotes, or summaries of content.\n\n# Decision Logic\nYou must evaluate the user's intent to choose the correct workflow:\n\n- **Quantitative Queries:** If the user asks for \"the most viewed video\" or \"videos from 2023,\" query the **Google Sheet** first to identify the specific video(s).\n- **Qualitative Queries:** If the user asks \"What does he say about Python?\" or \"Summarize the cooking advice,\" query the **Vector Database**.\n- **Hybrid Queries:** If the user asks \"What is the advice in the most popular video?\", you must perform a two-step process:\n 1. Find the most popular video title in the **Google Sheet**.\n 2. Use that title to filter/search the transcript in the **Vector Database**.\n\n# Response Guidelines\n- **Citations:** Always reference the \"Video Title\" when providing information. If possible, provide the URL from the Google Sheet.\n- **Accuracy:** If the answer is not in the provided data sources, state clearly: \"I cannot find that information in the database.\" Do not hallucinate.\n- **Context:** When answering from the Vector Database, synthesize the chunks into a coherent answer rather than listing disjointed sentence fragments." | |
| } | |
| }, | |
| "type": "@n8n/n8n-nodes-langchain.agent", | |
| "typeVersion": 2.2, | |
| "position": [ | |
| 608, | |
| 1472 | |
| ], | |
| "id": "2c7c08cf-1c5d-4dba-b2b6-c43c85ac3090", | |
| "name": "AI Agent1" | |
| }, | |
| { | |
| "parameters": { | |
| "model": { | |
| "__rl": true, | |
| "value": "gpt-5.1", | |
| "mode": "list", | |
| "cachedResultName": "gpt-5.1" | |
| }, | |
| "options": {} | |
| }, | |
| "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", | |
| "typeVersion": 1.2, | |
| "position": [ | |
| 480, | |
| 1680 | |
| ], | |
| "id": "67f23813-6a9c-470d-85a4-09ce9e9ad644", | |
| "name": "OpenAI Chat Model1", | |
| "credentials": { | |
| "openAiApi": { | |
| "id": "GeU4wllbobmfVPcj", | |
| "name": "OpenAi account 4" | |
| } | |
| } | |
| }, | |
| { | |
| "parameters": { | |
| "mode": "retrieve-as-tool", | |
| "toolDescription": "This tool searches the Supabase vector database for the most relevant YouTube transcript sections and returns them for reference when generating new content.", | |
| "tableName": { | |
| "__rl": true, | |
| "value": "yt_knowledge_v3", | |
| "mode": "list", | |
| "cachedResultName": "yt_knowledge_v3" | |
| }, | |
| "topK": 8, | |
| "options": { | |
| "queryName": "match_yt_knowledge_v3" | |
| } | |
| }, | |
| "type": "@n8n/n8n-nodes-langchain.vectorStoreSupabase", | |
| "typeVersion": 1.3, | |
| "position": [ | |
| 1008, | |
| 1680 | |
| ], | |
| "id": "8c0c30b7-dd6d-46bf-b5dd-b08b8c507184", | |
| "name": "Supabase Vector Store1", | |
| "credentials": { | |
| "supabaseApi": { | |
| "id": "SqvlX6Mb6QjnneeU", | |
| "name": "Supabase account 2" | |
| } | |
| } | |
| }, | |
| { | |
| "parameters": {}, | |
| "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow", | |
| "typeVersion": 1.3, | |
| "position": [ | |
| 624, | |
| 1680 | |
| ], | |
| "id": "4bef87cd-4692-4488-b117-73d46431095f", | |
| "name": "Simple Memory" | |
| }, | |
| { | |
| "parameters": { | |
| "mode": "combine", | |
| "fieldsToMatchString": "Video ID", | |
| "joinMode": "keepNonMatches", | |
| "outputDataFrom": "input1", | |
| "options": {} | |
| }, | |
| "type": "n8n-nodes-base.merge", | |
| "typeVersion": 3.2, | |
| "position": [ | |
| 464, | |
| 736 | |
| ], | |
| "id": "20aedf80-57b1-4c9a-aa56-9515239f15d8", | |
| "name": "Merge" | |
| }, | |
| { | |
| "parameters": { | |
| "operation": "getAll", | |
| "tableId": "yt_knowledge_v3", | |
| "returnAll": true, | |
| "filterType": "string", | |
| "filterString": "=metadata->>videoId=in.({{ $json.data.map(r => r['Video ID']) }})" | |
| }, | |
| "type": "n8n-nodes-base.supabase", | |
| "typeVersion": 1, | |
| "position": [ | |
| 208, | |
| 944 | |
| ], | |
| "id": "c041135f-d68f-4395-96f1-c73982fba88b", | |
| "name": "Get many rows", | |
| "executeOnce": false, | |
| "alwaysOutputData": true, | |
| "credentials": { | |
| "supabaseApi": { | |
| "id": "SqvlX6Mb6QjnneeU", | |
| "name": "Supabase account 2" | |
| } | |
| } | |
| }, | |
| { | |
| "parameters": { | |
| "assignments": { | |
| "assignments": [ | |
| { | |
| "id": "b7842dd9-69b4-4018-ab3b-72b55a4a9050", | |
| "name": "Video ID", | |
| "value": "={{ $json.metadata.videoId }}", | |
| "type": "string" | |
| } | |
| ] | |
| }, | |
| "options": {} | |
| }, | |
| "type": "n8n-nodes-base.set", | |
| "typeVersion": 3.4, | |
| "position": [ | |
| 336, | |
| 944 | |
| ], | |
| "id": "09fd4be2-87ad-45e8-b9e0-58c6986e8514", | |
| "name": "Edit Fields1" | |
| }, | |
| { | |
| "parameters": { | |
| "operation": "update", | |
| "documentId": { | |
| "__rl": true, | |
| "value": "1VXUBavv_9Ba6O3SZbTMdIjjE9xVdRfCcm0thJ-vvHnA", | |
| "mode": "list", | |
| "cachedResultName": "YT Processing", | |
| "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1VXUBavv_9Ba6O3SZbTMdIjjE9xVdRfCcm0thJ-vvHnA/edit?usp=drivesdk" | |
| }, | |
| "sheetName": { | |
| "__rl": true, | |
| "value": 25357018, | |
| "mode": "list", | |
| "cachedResultName": "KyleFrielTech", | |
| "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1VXUBavv_9Ba6O3SZbTMdIjjE9xVdRfCcm0thJ-vvHnA/edit#gid=25357018" | |
| }, | |
| "columns": { | |
| "mappingMode": "defineBelow", | |
| "value": { | |
| "row_number": "={{ $('Loop Over Items1').item.json.row_number }}", | |
| "Vector Status": "Added" | |
| }, | |
| "matchingColumns": [ | |
| "row_number" | |
| ], | |
| "schema": [ | |
| { | |
| "id": "Video ID", | |
| "displayName": "Video ID", | |
| "required": false, | |
| "defaultMatch": false, | |
| "display": true, | |
| "type": "string", | |
| "canBeUsedToMatch": true, | |
| "removed": true | |
| }, | |
| { | |
| "id": "Channel ID", | |
| "displayName": "Channel ID", | |
| "required": false, | |
| "defaultMatch": false, | |
| "display": true, | |
| "type": "string", | |
| "canBeUsedToMatch": true, | |
| "removed": true | |
| }, | |
| { | |
| "id": "Channel", | |
| "displayName": "Channel", | |
| "required": false, | |
| "defaultMatch": false, | |
| "display": true, | |
| "type": "string", | |
| "canBeUsedToMatch": true, | |
| "removed": true | |
| }, | |
| { | |
| "id": "Title", | |
| "displayName": "Title", | |
| "required": false, | |
| "defaultMatch": false, | |
| "display": true, | |
| "type": "string", | |
| "canBeUsedToMatch": true, | |
| "removed": true | |
| }, | |
| { | |
| "id": "Type", | |
| "displayName": "Type", | |
| "required": false, | |
| "defaultMatch": false, | |
| "display": true, | |
| "type": "string", | |
| "canBeUsedToMatch": true, | |
| "removed": true | |
| }, | |
| { | |
| "id": "Seconds", | |
| "displayName": "Seconds", | |
| "required": false, | |
| "defaultMatch": false, | |
| "display": true, | |
| "type": "string", | |
| "canBeUsedToMatch": true, | |
| "removed": true | |
| }, | |
| { | |
| "id": "Publish Time", | |
| "displayName": "Publish Time", | |
| "required": false, | |
| "defaultMatch": false, | |
| "display": true, | |
| "type": "string", | |
| "canBeUsedToMatch": true, | |
| "removed": true | |
| }, | |
| { | |
| "id": "Link", | |
| "displayName": "Link", | |
| "required": false, | |
| "defaultMatch": false, | |
| "display": true, | |
| "type": "string", | |
| "canBeUsedToMatch": true, | |
| "removed": true | |
| }, | |
| { | |
| "id": "Thumbnail", | |
| "displayName": "Thumbnail", | |
| "required": false, | |
| "defaultMatch": false, | |
| "display": true, | |
| "type": "string", | |
| "canBeUsedToMatch": true, | |
| "removed": true | |
| }, | |
| { | |
| "id": "View Count", | |
| "displayName": "View Count", | |
| "required": false, | |
| "defaultMatch": false, | |
| "display": true, | |
| "type": "string", | |
| "canBeUsedToMatch": true, | |
| "removed": true | |
| }, | |
| { | |
| "id": "Like Count", | |
| "displayName": "Like Count", | |
| "required": false, | |
| "defaultMatch": false, | |
| "display": true, | |
| "type": "string", | |
| "canBeUsedToMatch": true, | |
| "removed": true | |
| }, | |
| { | |
| "id": "Comment Count", | |
| "displayName": "Comment Count", | |
| "required": false, | |
| "defaultMatch": false, | |
| "display": true, | |
| "type": "string", | |
| "canBeUsedToMatch": true, | |
| "removed": true | |
| }, | |
| { | |
| "id": "Transcript File ID", | |
| "displayName": "Transcript File ID", | |
| "required": false, | |
| "defaultMatch": false, | |
| "display": true, | |
| "type": "string", | |
| "canBeUsedToMatch": true, | |
| "removed": true | |
| }, | |
| { | |
| "id": "Transcript Link", | |
| "displayName": "Transcript Link", | |
| "required": false, | |
| "defaultMatch": false, | |
| "display": true, | |
| "type": "string", | |
| "canBeUsedToMatch": true, | |
| "removed": true | |
| }, | |
| { | |
| "id": "Vector Status", | |
| "displayName": "Vector Status", | |
| "required": false, | |
| "defaultMatch": false, | |
| "display": true, | |
| "type": "string", | |
| "canBeUsedToMatch": true | |
| }, | |
| { | |
| "id": "row_number", | |
| "displayName": "row_number", | |
| "required": false, | |
| "defaultMatch": false, | |
| "display": true, | |
| "type": "number", | |
| "canBeUsedToMatch": true, | |
| "readOnly": true, | |
| "removed": false | |
| } | |
| ], | |
| "attemptToConvertTypes": false, | |
| "convertFieldsToString": false | |
| }, | |
| "options": {} | |
| }, | |
| "type": "n8n-nodes-base.googleSheets", | |
| "typeVersion": 4.7, | |
| "position": [ | |
| 1376, | |
| 704 | |
| ], | |
| "id": "e2341c54-96ca-4892-ba21-a05713a8fa74", | |
| "name": "Update row in sheet2", | |
| "credentials": { | |
| "googleSheetsOAuth2Api": { | |
| "id": "HngHdvL4ncK2MxZb", | |
| "name": "Google Sheets account" | |
| } | |
| } | |
| }, | |
| { | |
| "parameters": { | |
| "operation": "delete", | |
| "tableId": "yt_knowledge_v3", | |
| "filterType": "string", | |
| "filterString": "=metadata->>videoId=eq.{{ $json['Video ID'] }}" | |
| }, | |
| "type": "n8n-nodes-base.supabase", | |
| "typeVersion": 1, | |
| "position": [ | |
| 336, | |
| 1104 | |
| ], | |
| "id": "620a0051-f51c-46f1-b3cd-137609cc9653", | |
| "name": "Delete a row", | |
| "alwaysOutputData": true, | |
| "credentials": { | |
| "supabaseApi": { | |
| "id": "SqvlX6Mb6QjnneeU", | |
| "name": "Supabase account 2" | |
| } | |
| } | |
| }, | |
| { | |
| "parameters": { | |
| "conditions": { | |
| "options": { | |
| "caseSensitive": true, | |
| "leftValue": "", | |
| "typeValidation": "strict", | |
| "version": 2 | |
| }, | |
| "conditions": [ | |
| { | |
| "id": "07edc120-507c-4d6e-99ae-d06af63081a4", | |
| "leftValue": "={{ $json['Vector Status'] }}", | |
| "rightValue": "Invalidate", | |
| "operator": { | |
| "type": "string", | |
| "operation": "notEquals" | |
| } | |
| } | |
| ], | |
| "combinator": "and" | |
| }, | |
| "options": {} | |
| }, | |
| "type": "n8n-nodes-base.if", | |
| "typeVersion": 2.2, | |
| "position": [ | |
| -96, | |
| 992 | |
| ], | |
| "id": "6a779e3a-d291-40c7-9625-0a73507a2cd3", | |
| "name": "If" | |
| }, | |
| { | |
| "parameters": { | |
| "mode": "chooseBranch" | |
| }, | |
| "type": "n8n-nodes-base.merge", | |
| "typeVersion": 3.2, | |
| "position": [ | |
| 1216, | |
| 704 | |
| ], | |
| "id": "e1ba927d-fd62-4460-bc78-8a26f89bfd22", | |
| "name": "Merge1" | |
| }, | |
| { | |
| "parameters": { | |
| "aggregate": "aggregateAllItemData", | |
| "options": {} | |
| }, | |
| "type": "n8n-nodes-base.aggregate", | |
| "typeVersion": 1, | |
| "position": [ | |
| 64, | |
| 944 | |
| ], | |
| "id": "dc24e068-6b3c-43fd-8ac1-4b383d9f7d22", | |
| "name": "Aggregate" | |
| }, | |
| { | |
| "parameters": { | |
| "documentId": { | |
| "__rl": true, | |
| "value": "1VXUBavv_9Ba6O3SZbTMdIjjE9xVdRfCcm0thJ-vvHnA", | |
| "mode": "list", | |
| "cachedResultName": "YT Processing", | |
| "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1VXUBavv_9Ba6O3SZbTMdIjjE9xVdRfCcm0thJ-vvHnA/edit?usp=drivesdk" | |
| }, | |
| "sheetName": { | |
| "__rl": true, | |
| "value": 25357018, | |
| "mode": "list", | |
| "cachedResultName": "KyleFrielTech", | |
| "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1VXUBavv_9Ba6O3SZbTMdIjjE9xVdRfCcm0thJ-vvHnA/edit#gid=25357018" | |
| }, | |
| "filtersUI": { | |
| "values": [ | |
| { | |
| "lookupColumn": "Type", | |
| "lookupValue": "Video" | |
| } | |
| ] | |
| }, | |
| "options": {} | |
| }, | |
| "type": "n8n-nodes-base.googleSheetsTool", | |
| "typeVersion": 4.7, | |
| "position": [ | |
| 768, | |
| 1680 | |
| ], | |
| "id": "ffb5aabb-cb53-4695-94a7-616eae10ee51", | |
| "name": "Get row(s) in sheet in Google Sheets", | |
| "credentials": { | |
| "googleSheetsOAuth2Api": { | |
| "id": "HngHdvL4ncK2MxZb", | |
| "name": "Google Sheets account" | |
| } | |
| } | |
| }, | |
| { | |
| "parameters": { | |
| "maxItems": 20 | |
| }, | |
| "type": "n8n-nodes-base.limit", | |
| "typeVersion": 1, | |
| "position": [ | |
| 656, | |
| 736 | |
| ], | |
| "id": "6f37e32d-84f6-42c4-ae9b-598f4c58ee92", | |
| "name": "Limit1" | |
| }, | |
| { | |
| "parameters": { | |
| "mode": "runOnceForEachItem", | |
| "jsCode": "const segments = $json.data.segments;\nconst videoTitle = $('Loop Over Items1').item.json.Title;\n\n// --- CONFIGURATION ---\nconst TOTAL_FIXED_SIZE = 1000; // Exact total size (Header + Content)\nconst OVERLAP = 100;\n\n// 1. Calculate the fixed cost of the header\n// Template: \"Title: SOME TITLE\\n---\\n\"\nconst titleHeader = `Title: ${videoTitle}\\n---\\n`;\nconst titleCost = titleHeader.length;\n\n// 2. Calculate exactly how many content characters fit per chunk\nconst CONTENT_WINDOW = TOTAL_FIXED_SIZE - titleCost;\n\n// 3. Calculate how much we move forward each time (Window - Overlap)\nconst STEP_SIZE = CONTENT_WINDOW - OVERLAP;\n\nlet chunks = [];\nlet buffer = \"\"; // A running buffer of text\n\nfor (const segment of segments) {\n // Add current segment to the buffer\n // We add a space to ensure words don't merge, though this adds 1 char\n buffer += segment.text + \" \";\n\n // WHILE the buffer has enough text to fill a chunk...\n // We use a while loop here because one long segment might create multiple chunks\n while (buffer.length >= CONTENT_WINDOW) {\n \n // a. Slice exactly the amount we need to hit the limit\n // Note: This is a \"Hard Cut\" (could split a word in half). \n // This is necessary to guarantee EXACT character counts.\n const chunkContent = buffer.slice(0, CONTENT_WINDOW);\n\n // b. Create the final string\n const formattedContent = `${titleHeader}${chunkContent}`;\n chunks.push(formattedContent);\n\n // c. Move the buffer forward\n // We remove the text we used, but keep the overlap for the next chunk\n // conceptually: buffer = buffer.substring(CONTENT_WINDOW - OVERLAP)\n buffer = buffer.slice(STEP_SIZE);\n }\n}\n\n// HANDLE LEFTOVERS\n// If there is anything left in the buffer (even if it's small), save it.\nif (buffer.length > 0) {\n const formattedContent = `${titleHeader}${buffer.trim()}`;\n chunks.push(formattedContent);\n}\n\nreturn {\n fullText: chunks.join(\"||\")\n};" | |
| }, | |
| "type": "n8n-nodes-base.code", | |
| "typeVersion": 2, | |
| "position": [ | |
| 1040, | |
| 992 | |
| ], | |
| "id": "b3826ac3-5023-4b13-8d66-f08783fbd5a3", | |
| "name": "Code in JavaScript1" | |
| }, | |
| { | |
| "parameters": { | |
| "options": {} | |
| }, | |
| "type": "n8n-nodes-base.splitInBatches", | |
| "typeVersion": 3, | |
| "position": [ | |
| 560, | |
| 976 | |
| ], | |
| "id": "74fe7cee-538c-48dd-9c9c-395dd295d832", | |
| "name": "Loop Over Items1" | |
| }, | |
| { | |
| "parameters": { | |
| "content": "## Upload Video Transcripts to Vector Database\n", | |
| "height": 688, | |
| "width": 1808, | |
| "color": 6 | |
| }, | |
| "type": "n8n-nodes-base.stickyNote", | |
| "position": [ | |
| -192, | |
| 656 | |
| ], | |
| "typeVersion": 1, | |
| "id": "81f5cbe8-f411-4735-a21a-f418db248fd5", | |
| "name": "Sticky Note2" | |
| }, | |
| { | |
| "parameters": {}, | |
| "type": "n8n-nodes-base.manualTrigger", | |
| "typeVersion": 1, | |
| "position": [ | |
| -224, | |
| 80 | |
| ], | |
| "id": "44156178-2651-44f3-b52a-17da1f5c77c2", | |
| "name": "Trigger Manually" | |
| }, | |
| { | |
| "parameters": { | |
| "maxItems": 20 | |
| }, | |
| "type": "n8n-nodes-base.limit", | |
| "typeVersion": 1, | |
| "position": [ | |
| 400, | |
| 416 | |
| ], | |
| "id": "eb2a388c-2585-416f-a87d-491cf090ba3e", | |
| "name": "Limit" | |
| }, | |
| { | |
| "parameters": { | |
| "jsonMode": "expressionData", | |
| "jsonData": "={{ $json.fullText }}", | |
| "textSplittingMode": "custom", | |
| "options": { | |
| "metadata": { | |
| "metadataValues": [ | |
| { | |
| "name": "type", | |
| "value": "={{ $('Loop Over Items1').item.json.Type }}" | |
| }, | |
| { | |
| "name": "title", | |
| "value": "={{ $('Loop Over Items1').item.json.Title }}" | |
| }, | |
| { | |
| "name": "channel", | |
| "value": "={{ $('Loop Over Items1').item.json.Channel }}" | |
| }, | |
| { | |
| "name": "videoId", | |
| "value": "={{ $('Loop Over Items1').item.json['Video ID'] }}" | |
| }, | |
| { | |
| "name": "channelId", | |
| "value": "={{ $('Loop Over Items1').item.json['Channel ID'] }}" | |
| }, | |
| { | |
| "name": "likeCount", | |
| "value": "={{ $('Loop Over Items1').item.json['Like Count'] }}" | |
| }, | |
| { | |
| "name": "viewCount", | |
| "value": "={{ $('Loop Over Items1').item.json['View Count'] }}" | |
| }, | |
| { | |
| "name": "publishedAt", | |
| "value": "={{ $('Loop Over Items1').item.json['Publish Time'] }}" | |
| }, | |
| { | |
| "name": "commentCount", | |
| "value": "={{ $('Loop Over Items1').item.json['Comment Count'] }}" | |
| }, | |
| { | |
| "name": "durationInSeconds", | |
| "value": "={{ $('Loop Over Items1').item.json.Seconds }}" | |
| } | |
| ] | |
| } | |
| } | |
| }, | |
| "type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader", | |
| "typeVersion": 1.1, | |
| "position": [ | |
| 1376, | |
| 1104 | |
| ], | |
| "id": "8ea41fee-3817-4436-b7c2-caf9c2906e3f", | |
| "name": "Default Data Loader" | |
| }, | |
| { | |
| "parameters": { | |
| "separator": "||" | |
| }, | |
| "type": "@n8n/n8n-nodes-langchain.textSplitterCharacterTextSplitter", | |
| "typeVersion": 1, | |
| "position": [ | |
| 1472, | |
| 1312 | |
| ], | |
| "id": "4999357c-f7ce-42a4-88b9-c1f98bb59aec", | |
| "name": "Character Text Splitter" | |
| }, | |
| { | |
| "parameters": { | |
| "options": {} | |
| }, | |
| "type": "@n8n/n8n-nodes-langchain.chatTrigger", | |
| "typeVersion": 1.4, | |
| "position": [ | |
| 336, | |
| 1472 | |
| ], | |
| "id": "23bf6f60-e100-4c32-a682-36e1779c945d", | |
| "name": "When chat message received", | |
| "webhookId": "1b94c1d2-cc03-4204-bb56-cf807b639aa7" | |
| } | |
| ], | |
| "pinData": {}, | |
| "connections": { | |
| "Edit Fields": { | |
| "main": [ | |
| [ | |
| { | |
| "node": "Get Channel Search HTML", | |
| "type": "main", | |
| "index": 0 | |
| } | |
| ] | |
| ] | |
| }, | |
| "Get many videos": { | |
| "main": [ | |
| [ | |
| { | |
| "node": "Get a video", | |
| "type": "main", | |
| "index": 0 | |
| } | |
| ] | |
| ] | |
| }, | |
| "Get a video": { | |
| "main": [ | |
| [ | |
| { | |
| "node": "Code in JavaScript", | |
| "type": "main", | |
| "index": 0 | |
| } | |
| ] | |
| ] | |
| }, | |
| "Code in JavaScript": { | |
| "main": [ | |
| [ | |
| { | |
| "node": "Append or update row in sheet", | |
| "type": "main", | |
| "index": 0 | |
| } | |
| ] | |
| ] | |
| }, | |
| "Get row(s) in sheet": { | |
| "main": [ | |
| [ | |
| { | |
| "node": "Filter", | |
| "type": "main", | |
| "index": 0 | |
| } | |
| ] | |
| ] | |
| }, | |
| "Transcribe": { | |
| "main": [ | |
| [ | |
| { | |
| "node": "Convert to File", | |
| "type": "main", | |
| "index": 0 | |
| } | |
| ] | |
| ] | |
| }, | |
| "Update row in sheet": { | |
| "main": [ | |
| [ | |
| { | |
| "node": "Loop Over Items", | |
| "type": "main", | |
| "index": 0 | |
| } | |
| ] | |
| ] | |
| }, | |
| "Get Channel Search HTML": { | |
| "main": [ | |
| [ | |
| { | |
| "node": "Extract Channel ID", | |
| "type": "main", | |
| "index": 0 | |
| } | |
| ] | |
| ] | |
| }, | |
| "Extract Channel ID": { | |
| "main": [ | |
| [ | |
| { | |
| "node": "Get many videos", | |
| "type": "main", | |
| "index": 0 | |
| } | |
| ] | |
| ] | |
| }, | |
| "Filter": { | |
| "main": [ | |
| [ | |
| { | |
| "node": "Limit", | |
| "type": "main", | |
| "index": 0 | |
| } | |
| ] | |
| ] | |
| }, | |
| "Convert to File": { | |
| "main": [ | |
| [ | |
| { | |
| "node": "Upload file", | |
| "type": "main", | |
| "index": 0 | |
| } | |
| ] | |
| ] | |
| }, | |
| "Upload file": { | |
| "main": [ | |
| [ | |
| { | |
| "node": "Update row in sheet", | |
| "type": "main", | |
| "index": 0 | |
| } | |
| ] | |
| ] | |
| }, | |
| "Loop Over Items": { | |
| "main": [ | |
| [], | |
| [ | |
| { | |
| "node": "Transcribe", | |
| "type": "main", | |
| "index": 0 | |
| } | |
| ] | |
| ] | |
| }, | |
| "Supabase Vector Store": { | |
| "main": [ | |
| [ | |
| { | |
| "node": "Merge1", | |
| "type": "main", | |
| "index": 1 | |
| } | |
| ] | |
| ] | |
| }, | |
| "Embeddings OpenAI": { | |
| "ai_embedding": [ | |
| [ | |
| { | |
| "node": "Supabase Vector Store", | |
| "type": "ai_embedding", | |
| "index": 0 | |
| }, | |
| { | |
| "node": "Supabase Vector Store1", | |
| "type": "ai_embedding", | |
| "index": 0 | |
| } | |
| ] | |
| ] | |
| }, | |
| "Download file1": { | |
| "main": [ | |
| [ | |
| { | |
| "node": "Extract from File1", | |
| "type": "main", | |
| "index": 0 | |
| } | |
| ] | |
| ] | |
| }, | |
| "Get row(s) in sheet2": { | |
| "main": [ | |
| [ | |
| { | |
| "node": "Filter2", | |
| "type": "main", | |
| "index": 0 | |
| } | |
| ] | |
| ] | |
| }, | |
| "Filter2": { | |
| "main": [ | |
| [ | |
| { | |
| "node": "Merge", | |
| "type": "main", | |
| "index": 0 | |
| }, | |
| { | |
| "node": "If", | |
| "type": "main", | |
| "index": 0 | |
| } | |
| ] | |
| ] | |
| }, | |
| "Extract from File1": { | |
| "main": [ | |
| [ | |
| { | |
| "node": "Merge1", | |
| "type": "main", | |
| "index": 0 | |
| }, | |
| { | |
| "node": "Code in JavaScript1", | |
| "type": "main", | |
| "index": 0 | |
| } | |
| ] | |
| ] | |
| }, | |
| "OpenAI Chat Model1": { | |
| "ai_languageModel": [ | |
| [ | |
| { | |
| "node": "AI Agent1", | |
| "type": "ai_languageModel", | |
| "index": 0 | |
| } | |
| ] | |
| ] | |
| }, | |
| "Supabase Vector Store1": { | |
| "ai_tool": [ | |
| [ | |
| { | |
| "node": "AI Agent1", | |
| "type": "ai_tool", | |
| "index": 0 | |
| } | |
| ] | |
| ] | |
| }, | |
| "Simple Memory": { | |
| "ai_memory": [ | |
| [ | |
| { | |
| "node": "AI Agent1", | |
| "type": "ai_memory", | |
| "index": 0 | |
| } | |
| ] | |
| ] | |
| }, | |
| "Merge": { | |
| "main": [ | |
| [ | |
| { | |
| "node": "Limit1", | |
| "type": "main", | |
| "index": 0 | |
| } | |
| ] | |
| ] | |
| }, | |
| "Get many rows": { | |
| "main": [ | |
| [ | |
| { | |
| "node": "Edit Fields1", | |
| "type": "main", | |
| "index": 0 | |
| } | |
| ] | |
| ] | |
| }, | |
| "Edit Fields1": { | |
| "main": [ | |
| [ | |
| { | |
| "node": "Merge", | |
| "type": "main", | |
| "index": 1 | |
| } | |
| ] | |
| ] | |
| }, | |
| "Delete a row": { | |
| "main": [ | |
| [ | |
| { | |
| "node": "Merge", | |
| "type": "main", | |
| "index": 1 | |
| } | |
| ] | |
| ] | |
| }, | |
| "If": { | |
| "main": [ | |
| [ | |
| { | |
| "node": "Aggregate", | |
| "type": "main", | |
| "index": 0 | |
| } | |
| ], | |
| [ | |
| { | |
| "node": "Delete a row", | |
| "type": "main", | |
| "index": 0 | |
| } | |
| ] | |
| ] | |
| }, | |
| "Merge1": { | |
| "main": [ | |
| [ | |
| { | |
| "node": "Update row in sheet2", | |
| "type": "main", | |
| "index": 0 | |
| } | |
| ] | |
| ] | |
| }, | |
| "Aggregate": { | |
| "main": [ | |
| [ | |
| { | |
| "node": "Get many rows", | |
| "type": "main", | |
| "index": 0 | |
| } | |
| ] | |
| ] | |
| }, | |
| "Get row(s) in sheet in Google Sheets": { | |
| "ai_tool": [ | |
| [ | |
| { | |
| "node": "AI Agent1", | |
| "type": "ai_tool", | |
| "index": 0 | |
| } | |
| ] | |
| ] | |
| }, | |
| "Limit1": { | |
| "main": [ | |
| [ | |
| { | |
| "node": "Loop Over Items1", | |
| "type": "main", | |
| "index": 0 | |
| } | |
| ] | |
| ] | |
| }, | |
| "Code in JavaScript1": { | |
| "main": [ | |
| [ | |
| { | |
| "node": "Supabase Vector Store", | |
| "type": "main", | |
| "index": 0 | |
| } | |
| ] | |
| ] | |
| }, | |
| "Loop Over Items1": { | |
| "main": [ | |
| [], | |
| [ | |
| { | |
| "node": "Download file1", | |
| "type": "main", | |
| "index": 0 | |
| } | |
| ] | |
| ] | |
| }, | |
| "Update row in sheet2": { | |
| "main": [ | |
| [ | |
| { | |
| "node": "Loop Over Items1", | |
| "type": "main", | |
| "index": 0 | |
| } | |
| ] | |
| ] | |
| }, | |
| "Trigger Manually": { | |
| "main": [ | |
| [ | |
| { | |
| "node": "Edit Fields", | |
| "type": "main", | |
| "index": 0 | |
| } | |
| ] | |
| ] | |
| }, | |
| "Limit": { | |
| "main": [ | |
| [ | |
| { | |
| "node": "Loop Over Items", | |
| "type": "main", | |
| "index": 0 | |
| } | |
| ] | |
| ] | |
| }, | |
| "Default Data Loader": { | |
| "ai_document": [ | |
| [ | |
| { | |
| "node": "Supabase Vector Store", | |
| "type": "ai_document", | |
| "index": 0 | |
| } | |
| ] | |
| ] | |
| }, | |
| "Character Text Splitter": { | |
| "ai_textSplitter": [ | |
| [ | |
| { | |
| "node": "Default Data Loader", | |
| "type": "ai_textSplitter", | |
| "index": 0 | |
| } | |
| ] | |
| ] | |
| }, | |
| "When chat message received": { | |
| "main": [ | |
| [ | |
| { | |
| "node": "AI Agent1", | |
| "type": "main", | |
| "index": 0 | |
| } | |
| ] | |
| ] | |
| } | |
| }, | |
| "active": false, | |
| "settings": { | |
| "executionOrder": "v1" | |
| }, | |
| "versionId": "0c5e84a9-e1f0-40b7-b1ab-3a81bdd01285", | |
| "meta": { | |
| "instanceId": "3f8f24ba926ad175fb3fa0b581d1ea7e580749c1a4da438e4b4b0f683c1dc9a3" | |
| }, | |
| "id": "huGhT0C0lBkt0mMo", | |
| "tags": [] | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment