Created
February 7, 2026 23:21
-
-
Save jordanwwoods/a7641821ed1cdbd916fa7e785d32362c to your computer and use it in GitHub Desktop.
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": "N8N whitepaper", | |
| "nodes": [ | |
| { | |
| "parameters": { | |
| "operation": "uploadUrl", | |
| "indexId": "<YOUR_TWELVELABS_INDEX_ID>", | |
| "videoUrl": "={{ $json.presignedUrl }}" | |
| }, | |
| "type": "n8n-nodes-twelve-labs.twelveLabs", | |
| "typeVersion": 1, | |
| "position": [-672, 208], | |
| "id": "b2d8feb7-6ab0-4959-98c3-95a1e3493803", | |
| "name": "Index to TwelveLabs", | |
| "credentials": { | |
| "twelveLabsApi": { | |
| "id": "<CREDENTIAL_ID>", | |
| "name": "TwelveLabs API for N8N" | |
| } | |
| } | |
| }, | |
| { | |
| "parameters": { | |
| "content": "# 📹 Index to TwelveLabs\n\n**Upload videos to TwelveLabs for multimodal AI analysis**\n\n**[📖 Documentation](https://docs.twelvelabs.io/v1.3/sdk-reference/node-js/upload-content/video-indexing-tasks)**", | |
| "height": 400, | |
| "width": 864, | |
| "color": 6 | |
| }, | |
| "type": "n8n-nodes-base.stickyNote", | |
| "position": [-1376, 16], | |
| "typeVersion": 1, | |
| "id": "c4e6a94d-8041-458e-8e5b-88aecf741e30", | |
| "name": "Sticky Note" | |
| }, | |
| { | |
| "parameters": { | |
| "jsCode": "// Parse the Lambda response and extract unique files\nconst seenKeys = new Set();\nconst results = [];\n\nfor (const item of $input.all()) {\n const response = JSON.parse(item.json.result.body);\n for (const file of response.files) {\n if (!seenKeys.has(file.Key)) {\n seenKeys.add(file.Key);\n results.push({\n json: {\n Key: file.Key,\n presignedUrl: file.presignedUrl,\n Size: file.Size,\n LastModified: file.LastModified,\n expiresIn: file.expiresIn\n }\n });\n }\n }\n}\n\nreturn results;" | |
| }, | |
| "type": "n8n-nodes-base.code", | |
| "typeVersion": 2, | |
| "position": [-896, 208], | |
| "id": "f07674c1-6363-4b6f-87ff-91a8dd33ec03", | |
| "name": "Get pre-signed URLs" | |
| }, | |
| { | |
| "parameters": { | |
| "content": "# 🎯 Analyze Video with TwelveLabs\n\n**Generate insights from indexed videos using Pegasus**\n\n**[📖 Documentation](https://docs.twelvelabs.io/v1.3/sdk-reference/node-js/generate/video-analysis)**", | |
| "height": 784, | |
| "width": 864, | |
| "color": 4 | |
| }, | |
| "type": "n8n-nodes-base.stickyNote", | |
| "position": [-496, 16], | |
| "typeVersion": 1, | |
| "id": "65d32fd6-17fe-4619-9cc9-c656c6dfd2dd", | |
| "name": "Sticky Note1" | |
| }, | |
| { | |
| "parameters": { | |
| "resource": "analysis", | |
| "indexId": "={{ $json.indexId }}", | |
| "videoId": "={{ $json.videoId }}", | |
| "prompt": "Analyze this video for content compliance using YouTube's ABCD framework:\n\n**A - Adult Content:**\n- Nudity or sexual content\n- Sexually suggestive content\n- Adult themes\n\n**B - Brand Safety:**\n- Inflammatory or demeaning content\n- Hateful content targeting protected groups\n- Harmful or dangerous acts\n- Shocking or graphic content\n- Profanity and crude language\n\n**C - Copyright:**\n- Copyrighted music, video, or images\n- Unlicensed third-party content\n\n**D - Dangerous/Harmful:**\n- Violence or graphic content\n- Drugs, dangerous products, or substances\n- Firearms and weapons\n- Misinformation (health, elections, etc.)\n\nFor each flagged issue, provide:\n1. **Timestamp**: When it appears\n2. **Category**: A, B, C, or D\n3. **Issue**: Brief description\n4. **Action**: Allow, Restrict (age-gate), Monetization off, or Remove\n\n**Output:**\n- Overall Status: Suitable / Needs Review / Not Suitable\n- Flagged Issues (if any)\n- Recommended Actions", | |
| "additionalOptions": { | |
| "temperature": 0.2 | |
| } | |
| }, | |
| "type": "n8n-nodes-twelve-labs.twelveLabs", | |
| "typeVersion": 1, | |
| "position": [-224, 176], | |
| "id": "77440a41-d7fe-4837-aa7e-e6996c07b7c3", | |
| "name": "Analyze for compliance", | |
| "credentials": { | |
| "twelveLabsApi": { | |
| "id": "<CREDENTIAL_ID>", | |
| "name": "TwelveLabs API for N8N" | |
| } | |
| } | |
| }, | |
| { | |
| "parameters": { | |
| "resource": "analysis", | |
| "indexId": "={{ $json.indexId }}", | |
| "videoId": "={{ $json.videoId }}", | |
| "prompt": "Summarize this video in 3-4 paragraphs covering:\n- What happens in the video\n- Main topics or themes\n- Key moments or important details", | |
| "additionalOptions": { | |
| "temperature": 0.2 | |
| } | |
| }, | |
| "type": "n8n-nodes-twelve-labs.twelveLabs", | |
| "typeVersion": 1, | |
| "position": [-224, 336], | |
| "id": "4ea3a8e0-1a51-4910-9dac-bf0d6a6fa9ad", | |
| "name": "Generate summary", | |
| "credentials": { | |
| "twelveLabsApi": { | |
| "id": "<CREDENTIAL_ID>", | |
| "name": "TwelveLabs API for N8N" | |
| } | |
| } | |
| }, | |
| { | |
| "parameters": { | |
| "resource": "analysis", | |
| "indexId": "={{ $json.indexId }}", | |
| "videoId": "={{ $json.videoId }}", | |
| "prompt": "Break this video into chapters with timestamps. For each chapter provide:\n- Timestamp (start time)\n- Chapter title\n- Brief description of what happens", | |
| "additionalOptions": { | |
| "temperature": 0.2 | |
| } | |
| }, | |
| "type": "n8n-nodes-twelve-labs.twelveLabs", | |
| "typeVersion": 1, | |
| "position": [-224, 480], | |
| "id": "e32b1209-1e01-4ba3-ae9f-edc6c9275d73", | |
| "name": "Generate chapters", | |
| "credentials": { | |
| "twelveLabsApi": { | |
| "id": "<CREDENTIAL_ID>", | |
| "name": "TwelveLabs API for N8N" | |
| } | |
| } | |
| }, | |
| { | |
| "parameters": { | |
| "resource": "analysis", | |
| "indexId": "={{ $json.indexId }}", | |
| "videoId": "={{ $json.videoId }}", | |
| "prompt": "Identify the most important or interesting moments in this video. For each highlight provide:\n- Timestamp\n- Title of the moment\n- Why it's noteworthy", | |
| "additionalOptions": { | |
| "temperature": 0.2 | |
| } | |
| }, | |
| "type": "n8n-nodes-twelve-labs.twelveLabs", | |
| "typeVersion": 1, | |
| "position": [-224, 640], | |
| "id": "dace148a-0491-4133-9321-49b43dac7184", | |
| "name": "Generate highlights", | |
| "credentials": { | |
| "twelveLabsApi": { | |
| "id": "<CREDENTIAL_ID>", | |
| "name": "TwelveLabs API for N8N" | |
| } | |
| } | |
| }, | |
| { | |
| "parameters": { | |
| "numberInputs": 4 | |
| }, | |
| "type": "n8n-nodes-base.merge", | |
| "typeVersion": 3.2, | |
| "position": [-16, 368], | |
| "id": "1a69f2ec-a620-4c90-9abb-cf860bda417d", | |
| "name": "Merge TwelveLabs analysis" | |
| }, | |
| { | |
| "parameters": {}, | |
| "type": "n8n-nodes-base.manualTrigger", | |
| "typeVersion": 1, | |
| "position": [-1552, 208], | |
| "id": "cdeef633-90f9-4699-8584-7aee06216ae0", | |
| "name": "When clicking 'Execute workflow'" | |
| }, | |
| { | |
| "parameters": { | |
| "operation": "upsert", | |
| "base": { | |
| "__rl": true, | |
| "value": "<YOUR_AIRTABLE_BASE_ID>", | |
| "mode": "list", | |
| "cachedResultName": "N8N", | |
| "cachedResultUrl": "https://airtable.com/<YOUR_AIRTABLE_BASE_ID>" | |
| }, | |
| "table": { | |
| "__rl": true, | |
| "value": "<YOUR_AIRTABLE_TABLE_ID>", | |
| "mode": "list", | |
| "cachedResultName": "Table 1", | |
| "cachedResultUrl": "https://airtable.com/<YOUR_AIRTABLE_BASE_ID>/<YOUR_AIRTABLE_TABLE_ID>" | |
| }, | |
| "columns": { | |
| "mappingMode": "defineBelow", | |
| "value": { | |
| "id": "<YOUR_AIRTABLE_TABLE_ID>", | |
| "Compliance report": "={{ $json[\"Compliance report\"] }}", | |
| "Summary": "={{ $json.Summary }}", | |
| "Chapters": "={{ $json.Chapters }}", | |
| "Highlights": "={{ $json.Highlights }}", | |
| "videoID": "={{ $json.videoID }}", | |
| "Compliance": "={{ $json[\"Compliance Status\"] }}" | |
| }, | |
| "matchingColumns": ["id"], | |
| "schema": [ | |
| { | |
| "id": "id", | |
| "displayName": "id", | |
| "required": false, | |
| "defaultMatch": true, | |
| "display": true, | |
| "type": "string", | |
| "readOnly": true, | |
| "removed": false | |
| }, | |
| { | |
| "id": "videoID", | |
| "displayName": "videoID", | |
| "required": false, | |
| "defaultMatch": false, | |
| "canBeUsedToMatch": true, | |
| "display": true, | |
| "type": "string", | |
| "readOnly": false, | |
| "removed": false | |
| }, | |
| { | |
| "id": "Compliance", | |
| "displayName": "Compliance", | |
| "required": false, | |
| "defaultMatch": false, | |
| "canBeUsedToMatch": true, | |
| "display": true, | |
| "type": "options", | |
| "options": [ | |
| { "name": "PASS", "value": "PASS" }, | |
| { "name": "FAILED", "value": "FAILED" }, | |
| { "name": "NEEDS REVIEW", "value": "NEEDS REVIEW" } | |
| ], | |
| "readOnly": false, | |
| "removed": false | |
| }, | |
| { | |
| "id": "Compliance report", | |
| "displayName": "Compliance report", | |
| "required": false, | |
| "defaultMatch": false, | |
| "canBeUsedToMatch": true, | |
| "display": true, | |
| "type": "string", | |
| "readOnly": false, | |
| "removed": false | |
| }, | |
| { | |
| "id": "Summary", | |
| "displayName": "Summary", | |
| "required": false, | |
| "defaultMatch": false, | |
| "canBeUsedToMatch": true, | |
| "display": true, | |
| "type": "string", | |
| "readOnly": false, | |
| "removed": false | |
| }, | |
| { | |
| "id": "Chapters", | |
| "displayName": "Chapters", | |
| "required": false, | |
| "defaultMatch": false, | |
| "canBeUsedToMatch": true, | |
| "display": true, | |
| "type": "string", | |
| "readOnly": false, | |
| "removed": false | |
| }, | |
| { | |
| "id": "Highlights", | |
| "displayName": "Highlights", | |
| "required": false, | |
| "defaultMatch": false, | |
| "canBeUsedToMatch": true, | |
| "display": true, | |
| "type": "string", | |
| "readOnly": false, | |
| "removed": false | |
| } | |
| ], | |
| "attemptToConvertTypes": false, | |
| "convertFieldsToString": false | |
| }, | |
| "options": {} | |
| }, | |
| "type": "n8n-nodes-base.airtable", | |
| "typeVersion": 2.1, | |
| "position": [176, 544], | |
| "id": "fa517b24-b77e-4203-9f9c-038e86dc4d4e", | |
| "name": "Create or update a record", | |
| "credentials": { | |
| "airtableTokenApi": { | |
| "id": "<CREDENTIAL_ID>", | |
| "name": "Airtable Personal Access Token account" | |
| } | |
| } | |
| }, | |
| { | |
| "parameters": { | |
| "jsCode": "// Organize TwelveLabs analysis results based on input order\nconst allItems = $input.all();\n\nconst videoId = allItems[0]?.json?.videoId || '';\n\n// Input 0 = Compliance, 1 = Summary, 2 = Chapters, 3 = Highlights\nconst complianceResponse = allItems[0]?.json?.response || '';\n\nlet complianceStatus = 'NEEDS REVIEW';\n\nif (complianceResponse.includes('Overall Status: Suitable')) {\n complianceStatus = 'PASS';\n} else if (complianceResponse.includes('Overall Status: Not Suitable')) {\n complianceStatus = 'FAILED';\n} else if (complianceResponse.includes('Overall Status: Needs Review')) {\n complianceStatus = 'NEEDS REVIEW';\n}\n\nconst result = {\n videoID: videoId,\n 'Compliance Status': complianceStatus,\n 'Compliance report': complianceResponse,\n 'Summary': allItems[1]?.json?.response || '',\n 'Chapters': allItems[2]?.json?.response || '',\n 'Highlights': allItems[3]?.json?.response || ''\n};\n\nreturn [{ json: result }];" | |
| }, | |
| "type": "n8n-nodes-base.code", | |
| "typeVersion": 2, | |
| "position": [192, 288], | |
| "id": "e0c2f845-57d2-4b2c-a8fa-1f98d61932d3", | |
| "name": "Clean TwelveLabs outputs" | |
| }, | |
| { | |
| "parameters": { | |
| "content": "# 🔍 Semantic Search with TwelveLabs\n\n**Search videos using natural language queries**\n\n**[📖 Documentation](https://docs.twelvelabs.io/v1.3/sdk-reference/node-js/search/semantic-search)**", | |
| "height": 368, | |
| "width": 864 | |
| }, | |
| "type": "n8n-nodes-base.stickyNote", | |
| "position": [-1376, 432], | |
| "typeVersion": 1, | |
| "id": "6cfa36e0-b64f-4a9d-bce3-85b4f52e0956", | |
| "name": "Sticky Note2" | |
| }, | |
| { | |
| "parameters": { | |
| "formTitle": "Semantic Search with TwelveLabs", | |
| "formFields": { | |
| "values": [ | |
| { | |
| "fieldLabel": "Search Query", | |
| "requiredField": true | |
| } | |
| ] | |
| }, | |
| "options": { | |
| "customCss": ":root {\n\t--font-family: 'Inter', 'Open Sans', sans-serif;\n\t--color-background: #0A0B0D;\n\t--color-card-bg: #141518;\n\t--color-card-border: #2A2B30;\n\t--color-card-shadow: rgba(139, 92, 246, 0.15);\n\t--color-link: #8B5CF6;\n\t--color-header: #FFFFFF;\n\t--color-label: #E5E7EB;\n\t--color-submit-btn-bg: #8B5CF6;\n\t--color-submit-btn-text: #FFFFFF;\n\t--border-radius-card: 12px;\n\t--border-radius-input: 8px;\n\t--container-width: 520px;\n}\nbody {\n\tbackground: linear-gradient(135deg, #0A0B0D 0%, #1A1B1F 100%);\n\tmin-height: 100vh;\n}\nbutton[type=\"submit\"]:hover {\n\tbackground: #7C3AED;\n\ttransform: translateY(-1px);\n\tbox-shadow: 0 4px 12px rgba(139, 92, 246, 0.4);\n\ttransition: all 0.2s ease;\n}\ninput:focus, textarea:focus, select:focus {\n\tbox-shadow: 0 0 0 3px rgba(139, 92, 246, 0.2);\n\ttransition: box-shadow 0.2s ease;\n}" | |
| } | |
| }, | |
| "type": "n8n-nodes-base.formTrigger", | |
| "typeVersion": 2.3, | |
| "position": [-1312, 608], | |
| "id": "b415acb0-a3da-4a36-8635-af6ab81d21a1", | |
| "name": "On form submission", | |
| "webhookId": "<WEBHOOK_ID>" | |
| }, | |
| { | |
| "parameters": { | |
| "jsCode": "const searchData = $input.first().json.data;\nconst top10 = searchData.filter(result => result.rank <= 10);\n\nlet resultsHTML = `\n<table style=\"width: 100%; border-collapse: separate; border-spacing: 20px; margin: 20px 0;\">\n <tr>\n <td colspan=\"4\" style=\"text-align: center; padding-bottom: 20px;\">\n <h2 style=\"color: #8B5CF6; font-size: 28px; margin: 0;\">Search Results (Top ${top10.length})</h2>\n </td>\n </tr>\n`;\n\nfor (let i = 0; i < top10.length; i += 4) {\n resultsHTML += '<tr>';\n for (let j = 0; j < 4; j++) {\n if (i + j < top10.length) {\n const result = top10[i + j];\n resultsHTML += `\n <td style=\"width: 25%; vertical-align: top;\">\n <div style=\"background: #141518; border: 1px solid #2A2B30; border-radius: 12px; padding: 16px; box-shadow: 0px 4px 12px rgba(139, 92, 246, 0.1);\">\n <div style=\"position: relative; margin-bottom: 12px;\">\n <span style=\"position: absolute; top: 8px; left: 8px; background: #8B5CF6; color: #FFFFFF; padding: 6px 10px; border-radius: 6px; font-size: 14px; font-weight: 600; z-index: 10;\">#${result.rank}</span>\n <img src=\"${result.thumbnail_url}\" alt=\"Result ${result.rank}\" style=\"width: 100%; height: 140px; object-fit: cover; border-radius: 8px; display: block;\"/>\n </div>\n <div style=\"color: #FFFFFF; font-size: 13px; margin-bottom: 6px;\">\n <strong style=\"color: #FFFFFF;\">Video ID:</strong><br/>${result.video_id.substring(0, 12)}...\n </div>\n <div style=\"color: #E5E7EB; font-size: 12px; margin-bottom: 6px;\">\n <strong style=\"color: #FFFFFF;\">Time:</strong> ${result.start}s - ${result.end}s\n </div>\n ${result.transcription ? `\n <div style=\"color: #D1D5DB; font-size: 11px; font-style: italic; padding: 8px; background: #1A1B1F; border-radius: 6px; margin-top: 8px;\">\n \"${result.transcription}\"\n </div>\n ` : ''}\n </div>\n </td>\n `;\n } else {\n resultsHTML += '<td style=\"width: 25%;\"></td>';\n }\n }\n resultsHTML += '</tr>';\n}\n\nresultsHTML += '</table>';\nreturn [{ json: { html: resultsHTML } }];" | |
| }, | |
| "type": "n8n-nodes-base.code", | |
| "typeVersion": 2, | |
| "position": [-896, 608], | |
| "id": "960a71bf-e6cf-45c1-955c-89354f9ee1e6", | |
| "name": "Parse search results" | |
| }, | |
| { | |
| "parameters": { | |
| "operation": "completion", | |
| "completionTitle": "Search results", | |
| "completionMessage": "={{ $json.html }}", | |
| "options": { | |
| "customCss": ":root {\n\t--font-family: 'Inter', 'Open Sans', sans-serif;\n\t--color-background: #0A0B0D;\n\t--color-card-bg: #141518;\n\t--color-header: #FFFFFF;\n\t--color-html-text: #FFFFFF;\n\t--container-width: 100% !important;\n}\nbody {\n\tbackground: linear-gradient(135deg, #0A0B0D 0%, #1A1B1F 100%);\n\tmin-height: 100vh;\n\tcolor: #FFFFFF;\n}\n.container, .form-container, .completion-container {\n\tmax-width: 100% !important;\n\twidth: 100% !important;\n}\ndiv, p, span, strong, h1, h2, h3 {\n\tcolor: inherit !important;\n}" | |
| } | |
| }, | |
| "type": "n8n-nodes-base.form", | |
| "typeVersion": 2.3, | |
| "position": [-688, 608], | |
| "id": "3cc3a564-741f-4d58-96b1-37bd123a70a4", | |
| "name": "Show results", | |
| "webhookId": "<WEBHOOK_ID>" | |
| }, | |
| { | |
| "parameters": { | |
| "function": "arn:aws:lambda:<YOUR_REGION>:<YOUR_AWS_ACCOUNT_ID>:function:tl-generate-pre-signed-urls", | |
| "payload": "={{ JSON.stringify({ bucketName: \"<YOUR_S3_BUCKET>\", files: $input.all().map(item => item.json), expiresIn: 3600 }) }}" | |
| }, | |
| "type": "n8n-nodes-base.awsLambda", | |
| "typeVersion": 1, | |
| "position": [-1120, 208], | |
| "id": "4ec00502-b621-4d73-a3ef-b81d4aa41fad", | |
| "name": "Generate pre-signed URLs", | |
| "credentials": { | |
| "aws": { | |
| "id": "<CREDENTIAL_ID>", | |
| "name": "AWS account" | |
| } | |
| } | |
| }, | |
| { | |
| "parameters": { | |
| "operation": "search", | |
| "indexId": "<YOUR_TWELVELABS_INDEX_ID>", | |
| "queryText": "={{ $json[\"Search Query\"] }}", | |
| "additionalOptions": {} | |
| }, | |
| "type": "n8n-nodes-twelve-labs.twelveLabs", | |
| "typeVersion": 1, | |
| "position": [-1104, 608], | |
| "id": "c70f784e-1525-4f66-add9-865610e619a7", | |
| "name": "Search videos", | |
| "credentials": { | |
| "twelveLabsApi": { | |
| "id": "<CREDENTIAL_ID>", | |
| "name": "TwelveLabs API for N8N" | |
| } | |
| } | |
| }, | |
| { | |
| "parameters": { | |
| "content": "# 🚀 TwelveLabs Workflows on SaaS\n\n**Multimodal Video AI Pipeline: End-to-end video indexing, search & analysis**\n\n**[📖 TwelveLabs Documentation](https://docs.twelvelabs.io)**", | |
| "height": 976, | |
| "width": 1792, | |
| "color": 3 | |
| }, | |
| "type": "n8n-nodes-base.stickyNote", | |
| "position": [-1392, -144], | |
| "typeVersion": 1, | |
| "id": "b4237691-6e29-4f85-a0ba-ea62f05131e8", | |
| "name": "Sticky Note3" | |
| }, | |
| { | |
| "parameters": { | |
| "operation": "getAll", | |
| "bucketName": "<YOUR_S3_BUCKET>", | |
| "returnAll": true, | |
| "options": {} | |
| }, | |
| "type": "n8n-nodes-base.awsS3", | |
| "typeVersion": 2, | |
| "position": [-1328, 208], | |
| "id": "16dbfb0d-49be-4af0-9018-64dbbafeb684", | |
| "name": "Get asset(s) from S3", | |
| "credentials": { | |
| "aws": { | |
| "id": "<CREDENTIAL_ID>", | |
| "name": "AWS account" | |
| } | |
| } | |
| }, | |
| { | |
| "parameters": { | |
| "operation": "getAll", | |
| "bucketName": "<YOUR_S3_BUCKET>", | |
| "returnAll": true, | |
| "options": { | |
| "folderKey": "bedrock/" | |
| } | |
| }, | |
| "type": "n8n-nodes-base.awsS3", | |
| "typeVersion": 2, | |
| "position": [-1248, 1024], | |
| "id": "ec6018bf-efac-4896-b354-88754d018455", | |
| "name": "Get asset(s) from AWS S3", | |
| "credentials": { | |
| "aws": { | |
| "id": "<CREDENTIAL_ID>", | |
| "name": "AWS account" | |
| } | |
| } | |
| }, | |
| { | |
| "parameters": { | |
| "function": "arn:aws:lambda:<YOUR_REGION>:<YOUR_AWS_ACCOUNT_ID>:function:bedrock-pegasus-video-analysis-n8n", | |
| "payload": "={{ JSON.stringify({ s3Uri: $json.s3Uri, textPrompt: \"Summarize this video in detail\" }) }}" | |
| }, | |
| "type": "n8n-nodes-base.awsLambda", | |
| "typeVersion": 1, | |
| "position": [-800, 1024], | |
| "id": "e66afc69-1eba-4875-8ecb-9a189aa8b083", | |
| "name": "Analyze with Bedrock Pegasus", | |
| "credentials": { | |
| "aws": { | |
| "id": "<CREDENTIAL_ID>", | |
| "name": "AWS account" | |
| } | |
| } | |
| }, | |
| { | |
| "parameters": { | |
| "jsCode": "const bucketName = '<YOUR_S3_BUCKET>';\nconst results = [];\n\nfor (const item of $input.all()) {\n results.push({\n json: {\n Key: item.json.Key,\n s3Uri: `s3://${bucketName}/${item.json.Key}`\n }\n });\n}\n\nreturn results;" | |
| }, | |
| "type": "n8n-nodes-base.code", | |
| "typeVersion": 2, | |
| "position": [-1024, 1024], | |
| "id": "91e16872-8137-4920-9bc0-ed370395dc52", | |
| "name": "Build S3 URI for Bedrock" | |
| }, | |
| { | |
| "parameters": { | |
| "content": "# 🎬 Analyze with AWS Bedrock Pegasus\n\n**Generate insights from videos using TwelveLabs Pegasus via AWS Bedrock**\n\n[📖 Documentation](https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-pegasus.html)", | |
| "height": 384, | |
| "width": 896, | |
| "color": 4 | |
| }, | |
| "type": "n8n-nodes-base.stickyNote", | |
| "position": [-1392, 848], | |
| "typeVersion": 1, | |
| "id": "fc6d67c1-1b54-4786-a253-54b20bf0789d", | |
| "name": "Sticky Note4" | |
| }, | |
| { | |
| "parameters": { | |
| "operation": "getAll", | |
| "bucketName": "<YOUR_S3_BUCKET>", | |
| "returnAll": true, | |
| "options": { | |
| "folderKey": "bedrock/" | |
| } | |
| }, | |
| "type": "n8n-nodes-base.awsS3", | |
| "typeVersion": 2, | |
| "position": [-336, 1008], | |
| "id": "046590c5-57b1-4d4c-8bf7-17fee19dd26f", | |
| "name": "Get asset(s) from AWS S3 storage", | |
| "credentials": { | |
| "aws": { | |
| "id": "<CREDENTIAL_ID>", | |
| "name": "AWS account" | |
| } | |
| } | |
| }, | |
| { | |
| "parameters": { | |
| "jsCode": "const bucketName = '<YOUR_S3_BUCKET>';\nconst results = [];\n\nfor (const item of $input.all()) {\n results.push({\n json: {\n Key: item.json.Key,\n s3Uri: `s3://${bucketName}/${item.json.Key}`\n }\n });\n}\n\nreturn results;" | |
| }, | |
| "type": "n8n-nodes-base.code", | |
| "typeVersion": 2, | |
| "position": [-112, 1008], | |
| "id": "f4183446-ea78-4578-a22a-f7f612e90792", | |
| "name": "Build AWS S3 URI for Bedrock" | |
| }, | |
| { | |
| "parameters": { | |
| "function": "arn:aws:lambda:<YOUR_REGION>:<YOUR_AWS_ACCOUNT_ID>:function:bedrock-marengo-embeddings-n8n", | |
| "payload": "={{ JSON.stringify({ s3Uri: $json.s3Uri }) }}" | |
| }, | |
| "type": "n8n-nodes-base.awsLambda", | |
| "typeVersion": 1, | |
| "position": [96, 1008], | |
| "id": "f0ee8b91-137f-4856-8b8c-a71d18727646", | |
| "name": "Create embeddings with Bedrock Marengo", | |
| "credentials": { | |
| "aws": { | |
| "id": "<CREDENTIAL_ID>", | |
| "name": "AWS account" | |
| } | |
| } | |
| }, | |
| { | |
| "parameters": { | |
| "content": "# 🧬 AWS Bedrock Marengo Embeddings\n\n**Generate video embeddings using TwelveLabs Marengo via AWS Bedrock**\n\n[📖 Marengo Documentation](https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-marengo-3.html)", | |
| "height": 384, | |
| "width": 880, | |
| "color": 5 | |
| }, | |
| "type": "n8n-nodes-base.stickyNote", | |
| "position": [-480, 848], | |
| "typeVersion": 1, | |
| "id": "beac45d3-daf9-40fc-9a20-95d268d3b162", | |
| "name": "Sticky Note5" | |
| } | |
| ], | |
| "pinData": {}, | |
| "connections": { | |
| "Get pre-signed URLs": { | |
| "main": [ | |
| [{ "node": "Index to TwelveLabs", "type": "main", "index": 0 }] | |
| ] | |
| }, | |
| "Index to TwelveLabs": { | |
| "main": [ | |
| [ | |
| { "node": "Analyze for compliance", "type": "main", "index": 0 }, | |
| { "node": "Generate summary", "type": "main", "index": 0 }, | |
| { "node": "Generate chapters", "type": "main", "index": 0 }, | |
| { "node": "Generate highlights", "type": "main", "index": 0 } | |
| ] | |
| ] | |
| }, | |
| "Generate summary": { | |
| "main": [ | |
| [{ "node": "Merge TwelveLabs analysis", "type": "main", "index": 1 }] | |
| ] | |
| }, | |
| "Generate chapters": { | |
| "main": [ | |
| [{ "node": "Merge TwelveLabs analysis", "type": "main", "index": 2 }] | |
| ] | |
| }, | |
| "Analyze for compliance": { | |
| "main": [ | |
| [{ "node": "Merge TwelveLabs analysis", "type": "main", "index": 0 }] | |
| ] | |
| }, | |
| "Generate highlights": { | |
| "main": [ | |
| [{ "node": "Merge TwelveLabs analysis", "type": "main", "index": 3 }] | |
| ] | |
| }, | |
| "Merge TwelveLabs analysis": { | |
| "main": [ | |
| [{ "node": "Clean TwelveLabs outputs", "type": "main", "index": 0 }] | |
| ] | |
| }, | |
| "When clicking 'Execute workflow'": { | |
| "main": [ | |
| [{ "node": "Get asset(s) from S3", "type": "main", "index": 0 }] | |
| ] | |
| }, | |
| "Clean TwelveLabs outputs": { | |
| "main": [ | |
| [{ "node": "Create or update a record", "type": "main", "index": 0 }] | |
| ] | |
| }, | |
| "On form submission": { | |
| "main": [ | |
| [{ "node": "Search videos", "type": "main", "index": 0 }] | |
| ] | |
| }, | |
| "Parse search results": { | |
| "main": [ | |
| [{ "node": "Show results", "type": "main", "index": 0 }] | |
| ] | |
| }, | |
| "Generate pre-signed URLs": { | |
| "main": [ | |
| [{ "node": "Get pre-signed URLs", "type": "main", "index": 0 }] | |
| ] | |
| }, | |
| "Search videos": { | |
| "main": [ | |
| [{ "node": "Parse search results", "type": "main", "index": 0 }] | |
| ] | |
| }, | |
| "Get asset(s) from S3": { | |
| "main": [ | |
| [{ "node": "Generate pre-signed URLs", "type": "main", "index": 0 }] | |
| ] | |
| }, | |
| "Get asset(s) from AWS S3": { | |
| "main": [ | |
| [{ "node": "Build S3 URI for Bedrock", "type": "main", "index": 0 }] | |
| ] | |
| }, | |
| "Build S3 URI for Bedrock": { | |
| "main": [ | |
| [{ "node": "Analyze with Bedrock Pegasus", "type": "main", "index": 0 }] | |
| ] | |
| }, | |
| "Get asset(s) from AWS S3 storage": { | |
| "main": [ | |
| [{ "node": "Build AWS S3 URI for Bedrock", "type": "main", "index": 0 }] | |
| ] | |
| }, | |
| "Build AWS S3 URI for Bedrock": { | |
| "main": [ | |
| [{ "node": "Create embeddings with Bedrock Marengo", "type": "main", "index": 0 }] | |
| ] | |
| } | |
| }, | |
| "active": true, | |
| "settings": { | |
| "executionOrder": "v1", | |
| "timeSavedMode": "fixed", | |
| "callerPolicy": "workflowsFromSameOwner", | |
| "availableInMCP": true | |
| }, | |
| "versionId": "<VERSION_ID>", | |
| "meta": { | |
| "templateCredsSetupCompleted": true, | |
| "instanceId": "<INSTANCE_ID>" | |
| }, | |
| "id": "<WORKFLOW_ID>", | |
| "tags": [] | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment