{ "id": "CvXjXG4SFnN0ioJQ", "meta": { "instanceId": "workflow-107533b7", "versionId": "1.0.0", "createdAt": "2025-09-29T07:07:59.271888", "updatedAt": "2025-09-29T07:07:59.271915", "owner": "n8n-user", "license": "MIT", "category": "automation", "status": "active", "priority": "high", "environment": "production" }, "name": "AutoQoutesV2_template", "tags": [ "automation", "n8n", "production-ready", "excellent", "optimized" ], "nodes": [ { "id": "2ff58bb4-7079-44fe-a2ac-b4af9fa5b30e", "name": "When clicking ‘Test workflow’", "type": "n8n-nodes-base.manualTrigger", "position": [ 300, 0 ], "parameters": {}, "typeVersion": 1, "notes": "This manualTrigger node performs automated tasks as part of the workflow." }, { "id": "ec44d567-dfc8-4561-87df-903724225247", "name": "Generate Image", "type": "n8n-nodes-base.httpRequest", "position": [ 660, 0 ], "parameters": { "url": "{{ $env.API_BASE_URL }}", "body": "={\n \"model\": \"Qubico/flux1-dev\",\n \"task_type\": \"txt2img\",\n \"input\": {\n \"prompt\": \"Ultra-realistic vertical nature landscape, {{ $json['Background (EN)'] }}, featuring {{ $json['Prompt (EN)'] }}, high detail, soft atmospheric lighting, cinematic golden hour glow, vertical composition, photorealistic texture, natural depth of field, calm and serene mood, no people, no buildings, HDR, 8k resolution, masterpiece\",\n \"negative_prompt\": \"taking a photo of a room, recording a video of a room, photos app, video recorder, illegible text, blurry text, low quality text, DSLR, unnatural\",\n \"width\": 540,\n \"height\": 960\n }\n}", "method": "POST", "options": {}, "sendBody": true, "contentType": "raw", "sendHeaders": true, "rawContentType": "application/json", "headerParameters": { "parameters": [ { "name": "X-API-Key", "value": "=[Your PiAPI Key]" } ] } }, "retryOnFail": false, "typeVersion": 4.2, "notes": "This httpRequest node performs automated tasks as part of the workflow." }, { "id": "ad260a51-e981-47cc-8600-967c1c748814", "name": "Get image", "type": "n8n-nodes-base.httpRequest", "position": [ 1020, 0 ], "parameters": { "url": "{{ $env.BASE_URL }}", "options": {}, "sendHeaders": true, "headerParameters": { "parameters": [ { "name": "X-API-Key", "value": "=[Your PiAPI Key]" } ] } }, "typeVersion": 4.2, "notes": "This httpRequest node performs automated tasks as part of the workflow." }, { "id": "cddff673-15ce-47ec-a2d3-3d71437bfb1f", "name": "Sticky Note", "type": "n8n-nodes-base.stickyNote", "position": [ 600, -80 ], "parameters": { "width": 820, "height": 240, "content": "## Create Image Background\nGenerate an image using prompt from Google Sheet via PiAPI Flux (Txt2img)." }, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow." }, { "id": "64132a39-ad42-4158-9eec-5b6bfdc7bca2", "name": "Update image background URL", "type": "n8n-nodes-base.googleSheets", "position": [ 1240, 0 ], "parameters": { "columns": { "value": { "Index": "={{ $('Get data from Google Sheet').item.json.Index }}", "Background Image": "={{ $json.data.output.image_url }}" }, "schema": [ { "id": "Index", "type": "string", "display": true, "removed": false, "required": false, "displayName": "Index", "defaultMatch": false, "canBeUsedToMatch": true }, { "id": "Quote (Thai)", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Quote (Thai)", "defaultMatch": false, "canBeUsedToMatch": true }, { "id": "Pen Name (Thai)", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Pen Name (Thai)", "defaultMatch": false, "canBeUsedToMatch": true }, { "id": "Background (EN)", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Background (EN)", "defaultMatch": false, "canBeUsedToMatch": true }, { "id": "Prompt (EN)", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Prompt (EN)", "defaultMatch": false, "canBeUsedToMatch": true }, { "id": "Background Image", "type": "string", "display": true, "required": false, "displayName": "Background Image", "defaultMatch": false, "canBeUsedToMatch": true }, { "id": "Background Video", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Background Video", "defaultMatch": false, "canBeUsedToMatch": true }, { "id": "Video Status", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Video Status", "defaultMatch": false, "canBeUsedToMatch": true }, { "id": "row_number", "type": "string", "display": true, "removed": true, "readOnly": true, "required": false, "displayName": "row_number", "defaultMatch": false, "canBeUsedToMatch": true } ], "mappingMode": "defineBelow", "matchingColumns": [ "Index" ], "attemptToConvertTypes": false, "convertFieldsToString": false }, "options": {}, "operation": "update", "sheetName": { "__rl": true, "mode": "list", "value": "gid=0", "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "Sheet1" }, "documentId": { "__rl": true, "mode": "id", "value": "1p1iPoiu2uI3qGbHi0diS7QwsMcLuzDIqwo3AeSUVrGQ" } }, "credentials": { "googleSheetsOAuth2Api": { "id": "Ra2f1dlqOJ13jTtb", "name": "Google Sheets account" } }, "typeVersion": 4.5, "notes": "This googleSheets node performs automated tasks as part of the workflow." }, { "id": "801dd794-4cf8-42f7-8102-a3a4853cae39", "name": "Image-to-Video", "type": "n8n-nodes-base.httpRequest", "position": [ 260, 280 ], "parameters": { "url": "{{ $env.API_BASE_URL }}", "body": "={\n \"model\": \"kling\",\n \"task_type\": \"video_generation\",\n \"input\": {\n \"prompt\": \"Cinematic vertical video from image of {{ $('Get data from Google Sheet').item.json['Background (EN)'] }}, with {{ $('Get data from Google Sheet').item.json['Prompt (EN)'] }}, animated subtly from image, with soft light, mist, swaying trees, slow zoom effect, no people or buildings\",\n \"negative_prompt\": \"blurry motion, distorted faces, unnatural lighting, over produced, bad quality\",\n \"cfg_scale\": 0.5,\n \"duration\": 5,\n \"mode\": \"std\",\n \"image_url\": \"{{ $('Get image').item.json.data.output.image_url }}\",\n \"version\": \"1.0\",\n \"camera_control\": {\n \"type\": \"simple\",\n \"config\": {\n \"horizontal\": 0,\n \"vertical\": 0,\n \"pan\": 0,\n \"tilt\": 0,\n \"roll\": 0,\n \"zoom\": 5\n }\n }\n }\n}", "method": "POST", "options": {}, "sendBody": true, "contentType": "raw", "sendHeaders": true, "rawContentType": "application/json", "headerParameters": { "parameters": [ { "name": "X-API-Key", "value": "=[Your PiAPI Key]" } ] } }, "typeVersion": 4.2, "notes": "This httpRequest node performs automated tasks as part of the workflow." }, { "id": "6f7d755f-73fb-474f-a2c4-4612317c4f5a", "name": "Wait image 2 min", "type": "n8n-nodes-base.wait", "position": [ 840, 0 ], "webhookId": "ccf58c3e-f91d-4f58-a4a7-aff58c9be226", "parameters": { "unit": "minutes", "amount": 2 }, "typeVersion": 1.1, "notes": "This wait node performs automated tasks as part of the workflow." }, { "id": "d8de3a95-1a5b-4495-9a1f-8178c1be3d44", "name": "Wait video 5 min", "type": "n8n-nodes-base.wait", "position": [ 440, 280 ], "webhookId": "6df38e96-d5ec-4588-9569-db9b86539a34", "parameters": { "unit": "minutes" }, "typeVersion": 1.1, "notes": "This wait node performs automated tasks as part of the workflow." }, { "id": "c3f97a19-9ea8-4489-8629-767542f0fddb", "name": "Get Video", "type": "n8n-nodes-base.httpRequest", "position": [ 620, 280 ], "parameters": { "url": "{{ $env.BASE_URL }}", "options": {}, "sendHeaders": true, "headerParameters": { "parameters": [ { "name": "X-API-Key", "value": "=[Your PiAPI Key]" } ] } }, "typeVersion": 4.2, "notes": "This httpRequest node performs automated tasks as part of the workflow." }, { "id": "eefa224d-2e3d-459e-a16d-8e2584b59cf0", "name": "Sticky Note1", "type": "n8n-nodes-base.stickyNote", "position": [ 240, 200 ], "parameters": { "color": 3, "width": 1180, "height": 240, "content": "## Create Video Background\nCreate a cinematic vertical video from the generated image using PiAPI Kling." }, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow." }, { "id": "8d2035a8-d4a0-4a33-bae3-c18b530487d4", "name": "Generate Audio", "type": "n8n-nodes-base.httpRequest", "position": [ 380, 560 ], "parameters": { "url": "{{ $env.API_BASE_URL }}", "method": "POST", "options": {}, "sendBody": true, "sendHeaders": true, "bodyParameters": { "parameters": [ { "name": "text", "value": "={\n \"text\": \"no voice, A peaceful soundscape unfolds as the sun begins to rise over misty {{ $('Get data from Google Sheet').item.json['Background (EN)'] }}, casting warm light across the scene. The crisp morning air is filled with ambient nature sounds like {{ $('Get data from Google Sheet').item.json['Prompt (EN)'] }} along with soft lofi beats, blending into a calm and immersive atmosphere.\",\n \"duration_seconds\": 5,\n \"model_id\": \"sound-effects-v1\",\n \"output_format\": \"mp3\"\n}\n" }, { "name": "duration_seconds", "value": "20" } ] }, "headerParameters": { "parameters": [ { "name": "xi-api-key", "value": "[Your ElevenLab Key]" } ] } }, "typeVersion": 4.2, "notes": "This httpRequest node performs automated tasks as part of the workflow." }, { "id": "66af781a-2012-426e-a623-e90e21e8b2a1", "name": "Get data from Google Sheet", "type": "n8n-nodes-base.googleSheets", "position": [ 480, 0 ], "parameters": { "options": { "returnFirstMatch": true }, "filtersUI": { "values": [ { "lookupColumn": "Video Status" } ] }, "sheetName": { "__rl": true, "mode": "list", "value": "gid=0", "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "Sheet1" }, "documentId": { "__rl": true, "mode": "id", "value": "1p1iPoiu2uI3qGbHi0diS7QwsMcLuzDIqwo3AeSUVrGQ" } }, "credentials": { "googleSheetsOAuth2Api": { "id": "Ra2f1dlqOJ13jTtb", "name": "Google Sheets account" } }, "typeVersion": 4.5, "notes": "This googleSheets node performs automated tasks as part of the workflow." }, { "id": "04074118-9f30-4648-8aab-9574156a76ba", "name": "Update Sound background URL", "type": "n8n-nodes-base.googleSheets", "position": [ 1220, 480 ], "parameters": { "columns": { "value": { "Index": "={{ $('Get data from Google Sheet').item.json.Index }}", "Music Background": "={{ $json.webContentLink }}" }, "schema": [ { "id": "Index", "type": "string", "display": true, "removed": false, "required": false, "displayName": "Index", "defaultMatch": false, "canBeUsedToMatch": true }, { "id": "Quote (Thai)", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Quote (Thai)", "defaultMatch": false, "canBeUsedToMatch": true }, { "id": "Pen Name (Thai)", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Pen Name (Thai)", "defaultMatch": false, "canBeUsedToMatch": true }, { "id": "Background (EN)", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Background (EN)", "defaultMatch": false, "canBeUsedToMatch": true }, { "id": "Prompt (EN)", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Prompt (EN)", "defaultMatch": false, "canBeUsedToMatch": true }, { "id": "Background Image", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Background Image", "defaultMatch": false, "canBeUsedToMatch": true }, { "id": "Background Video", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Background Video", "defaultMatch": false, "canBeUsedToMatch": true }, { "id": "Music Background", "type": "string", "display": true, "removed": false, "required": false, "displayName": "Music Background", "defaultMatch": false, "canBeUsedToMatch": true }, { "id": "Video Status", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Video Status", "defaultMatch": false, "canBeUsedToMatch": true }, { "id": "row_number", "type": "string", "display": true, "removed": true, "readOnly": true, "required": false, "displayName": "row_number", "defaultMatch": false, "canBeUsedToMatch": true } ], "mappingMode": "defineBelow", "matchingColumns": [ "Index" ], "attemptToConvertTypes": false, "convertFieldsToString": false }, "options": {}, "operation": "update", "sheetName": { "__rl": true, "mode": "list", "value": "gid=0", "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "Sheet1" }, "documentId": { "__rl": true, "mode": "id", "value": "1p1iPoiu2uI3qGbHi0diS7QwsMcLuzDIqwo3AeSUVrGQ" } }, "credentials": { "googleSheetsOAuth2Api": { "id": "Ra2f1dlqOJ13jTtb", "name": "Google Sheets account" } }, "typeVersion": 4.5, "notes": "This googleSheets node performs automated tasks as part of the workflow." }, { "id": "35ca939b-fb27-48cf-8036-f35618ceaee0", "name": "Update video background URL", "type": "n8n-nodes-base.googleSheets", "position": [ 1240, 280 ], "parameters": { "columns": { "value": { "Index": "={{ $('Get data from Google Sheet').item.json.Index }}", "Background Video": "={{ $json.data.output.video_url }}" }, "schema": [ { "id": "Index", "type": "string", "display": true, "removed": false, "required": false, "displayName": "Index", "defaultMatch": false, "canBeUsedToMatch": true }, { "id": "Quote (Thai)", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Quote (Thai)", "defaultMatch": false, "canBeUsedToMatch": true }, { "id": "Pen Name (Thai)", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Pen Name (Thai)", "defaultMatch": false, "canBeUsedToMatch": true }, { "id": "Background (EN)", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Background (EN)", "defaultMatch": false, "canBeUsedToMatch": true }, { "id": "Prompt (EN)", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Prompt (EN)", "defaultMatch": false, "canBeUsedToMatch": true }, { "id": "Background Image", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Background Image", "defaultMatch": false, "canBeUsedToMatch": true }, { "id": "Background Video", "type": "string", "display": true, "required": false, "displayName": "Background Video", "defaultMatch": false, "canBeUsedToMatch": true }, { "id": "Video Status", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Video Status", "defaultMatch": false, "canBeUsedToMatch": true }, { "id": "row_number", "type": "string", "display": true, "removed": true, "readOnly": true, "required": false, "displayName": "row_number", "defaultMatch": false, "canBeUsedToMatch": true } ], "mappingMode": "defineBelow", "matchingColumns": [ "Index" ], "attemptToConvertTypes": false, "convertFieldsToString": false }, "options": {}, "operation": "update", "sheetName": { "__rl": true, "mode": "list", "value": "gid=0", "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "Sheet1" }, "documentId": { "__rl": true, "mode": "id", "value": "1p1iPoiu2uI3qGbHi0diS7QwsMcLuzDIqwo3AeSUVrGQ" } }, "credentials": { "googleSheetsOAuth2Api": { "id": "Ra2f1dlqOJ13jTtb", "name": "Google Sheets account" } }, "typeVersion": 4.5, "notes": "This googleSheets node performs automated tasks as part of the workflow." }, { "id": "54c8badf-a99a-4e5c-ad96-e1d982eb6855", "name": "Sticky Note2", "type": "n8n-nodes-base.stickyNote", "position": [ 240, 480 ], "parameters": { "color": 4, "width": 1180, "height": 240, "content": "## Create Sound Background\nGenerate ambient sound using ElevenLabs based on the scene prompt." }, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow." }, { "id": "15b9e2b1-72d9-42bf-a8a4-0ad0a01c5e5f", "name": "Upload Sound to Google Drive", "type": "n8n-nodes-base.googleDrive", "position": [ 780, 480 ], "parameters": { "name": "={{ $('Get data from Google Sheet').item.json['Background (EN)'] }}.mp3", "driveId": { "__rl": true, "mode": "id", "value": "1Sfv2PvIHF0J3-5IOYFdZp2-4LNPOoSX1" }, "options": {}, "folderId": { "__rl": true, "mode": "list", "value": "root", "cachedResultName": "/ (Root folder)" } }, "credentials": { "googleDriveOAuth2Api": { "id": "OEWvSsY5xiUhqOnx", "name": "Google Drive account - PeakWave" } }, "typeVersion": 3, "alwaysOutputData": true, "notes": "This googleDrive node performs automated tasks as part of the workflow." }, { "id": "2a628e8a-077a-4999-9ef7-8d28ac4433ac", "name": "Save Video Background Locally1", "type": "n8n-nodes-base.readWriteFile", "position": [ 1040, 280 ], "parameters": { "options": {}, "fileName": "=VideoBackground.mp4", "operation": "write" }, "typeVersion": 1, "notes": "This readWriteFile node performs automated tasks as part of the workflow." }, { "id": "fa5cce8d-4b50-4221-9446-050f497b30a9", "name": "Get Binary Video Background", "type": "n8n-nodes-base.httpRequest", "position": [ 820, 280 ], "parameters": { "url": "{{ $env.BASE_URL }}", "options": { "response": { "response": { "responseFormat": "file" } } } }, "typeVersion": 4.2, "notes": "This httpRequest node performs automated tasks as part of the workflow." }, { "id": "ea003577-5467-4acb-a33b-b4b30a03a35f", "name": "Save Music Background Locally1", "type": "n8n-nodes-base.readWriteFile", "position": [ 980, 560 ], "parameters": { "options": { "append": false }, "fileName": "=SoundBackground.mp3", "operation": "write" }, "typeVersion": 1, "notes": "This readWriteFile node performs automated tasks as part of the workflow." }, { "id": "b9332740-c4e0-40f9-bc0d-c550c8f0f96d", "name": "Prepare Overlay Text (Quote & Author)1", "type": "n8n-nodes-base.code", "position": [ 300, 860 ], "parameters": { "jsCode": "// Define separate configuration for the quote and the author\nconst quoteFont = \"Kanit-Italic.ttf\"; \nconst quoteFontSize = 70;\nconst authorFont = \"Kanit-Italic.ttf\"; \nconst authorFontSize = 50;\nconst fontColor = \"white\";\nconst lineHeightMultiplier = 1.1;\nconst videoWidth = 1080;\nconst margin = 40; \n\n// Effective width for the quote text\nconst effectiveVideoWidth = videoWidth - 2 * margin;\n\n// Estimate average character width based on quoteFontSize\nconst avgCharWidth = quoteFontSize * 0.6;\nconst maxCharsPerLine = Math.floor(effectiveVideoWidth / avgCharWidth);\n\n// Retrieve the quote and author from \"Select Random Video, Music & Quote\"\nconst transcript = $('Get data from Google Sheet').first().json['Quote (Thai)'];\nif (!transcript) {\n throw new Error(\"Quote not found\");\n}\n\nconst author = $('Get data from Google Sheet').first().json['Pen Name (Thai)'];\nif (!author) {\n throw new Error(\"Author not found\");\n}\n\n// Split transcript into words and group them into lines\nconst words = transcript.split(' ');\nconst lines = [];\nlet currentLine = \"\";\nlet currentCharCount = 0;\n\nwords.forEach(word => {\n const wordLength = word.length;\n const additionalSpace = currentLine ? 1 : 0;\n const potentialLength = currentCharCount + additionalSpace + wordLength;\n if (potentialLength <= maxCharsPerLine) {\n currentLine += (currentLine ? \" \" : \"\") + word;\n currentCharCount = potentialLength;\n } else {\n lines.push(currentLine);\n currentLine = word;\n currentCharCount = wordLength;\n }\n});\nif (currentLine) {\n lines.push(currentLine);\n}\n\n// Calculate layout for the quote block\nconst lineHeight = quoteFontSize * lineHeightMultiplier;\nconst totalHeight = lines.length * lineHeight;\n\n// Build drawtext commands for quote lines\nconst quoteCommands = lines.map((line, index) => {\n const escapedLine = line.replace(/'/g, \"\\\\'\");\n return `drawtext=fontfile=${quoteFont}:text='${escapedLine}':fontsize=${quoteFontSize}:fontcolor=${fontColor}:x=(w-text_w)/2:y=((h-${totalHeight})/2)+(${index}*${lineHeight})`;\n});\n\n// Build the drawtext command for author\nconst authorY = `((h-${totalHeight})/2)+(${lines.length}*${lineHeight})+20`;\nconst escapedAuthor = author.replace(/'/g, \"\\\\'\");\nconst authorCommand = `drawtext=fontfile=${authorFont}:text='${escapedAuthor}':fontsize=${authorFontSize}:fontcolor=${fontColor}:x=w-text_w-${margin}:y=${authorY}`;\n\n// Combine all commands into one drawtext filter string\nconst fullDrawTextFilter = quoteCommands.concat(authorCommand).join(\", \");\n\n// Return the prepared filter string\nreturn {\n json: {\n drawText: fullDrawTextFilter\n }\n};" }, "typeVersion": 2, "notes": "This code node performs automated tasks as part of the workflow." }, { "id": "79764093-f6ca-459b-a73c-3326fe82fafa", "name": "Generate Final Video Clip1", "type": "n8n-nodes-base.executeCommand", "position": [ 480, 860 ], "parameters": { "command": "=ffmpeg -i {{ $('Save Video Background Locally1').item.json.fileName }} -i {{ $('Save Music Background Locally1').item.json.fileName }} -filter_complex \"[0:v]scale=1080:1920:force_original_aspect_ratio=increase,crop=1080:1920[vid]; color=black@0.3:size=1080x1920:d=10[bg]; [vid][bg]overlay=shortest=1[bgvid]; [bgvid]{{ $json.drawText }}[outv]; [1:a]volume=0.8[aout]\" -map \"[outv]\" -map \"[aout]\" -aspect 9:16 -c:v libx264 -c:a aac -shortest output.mp4 -y" }, "typeVersion": 1, "notes": "This executeCommand node performs automated tasks as part of the workflow." }, { "id": "3c301b6b-d6cb-41af-ac52-5722bed8470d", "name": "Initiate YouTube Resumable Upload", "type": "n8n-nodes-base.httpRequest", "position": [ 700, 860 ], "parameters": { "url": "{{ $env.BASE_URL }}", "body": "={\n \"snippet\": {\n \"title\": \"{{ $('Get data from Google Sheet').item.json['Quote (Thai)'] }}\",\n \"description\": \"{{ $('Get data from Google Sheet').item.json['Quote (Thai)'] }}\\n{{ $('Get data from Google Sheet').item.json['Pen Name (Thai)'] }}\",\n \"defaultLanguage\": \"en\",\n \"defaultAudioLanguage\": \"en\"\n },\n \"status\": {\n \"privacyStatus\": \"public\",\n \"license\": \"youtube\",\n \"embeddable\": true,\n \"publicStatsViewable\": true,\n \"madeForKids\": false\n }\n}", "method": "POST", "options": { "response": { "response": { "fullResponse": true } } }, "sendBody": true, "contentType": "raw", "sendHeaders": true, "authentication": "{{ $credentials.predefinedCredentialType }}", "rawContentType": "RAW/JSON", "headerParameters": { "parameters": [ { "name": "Content-Type", "value": "application/json" }, { "name": "X-Upload-Content-Type", "value": "video/webm" } ] }, "nodeCredentialType": "YOUR_CREDENTIAL_HERE" }, "credentials": { "youTubeOAuth2Api": { "id": "f9uNp5YNQMnXrNw2", "name": "YouTube account" } }, "typeVersion": 4.2, "notes": "This httpRequest node performs automated tasks as part of the workflow." }, { "id": "dbde06b3-e7ba-4b7e-9d58-0a06f88b5176", "name": "Read output file", "type": "n8n-nodes-base.readWriteFile", "position": [ 880, 860 ], "parameters": { "options": {}, "fileSelector": "=output.mp4" }, "typeVersion": 1, "notes": "This readWriteFile node performs automated tasks as part of the workflow." }, { "id": "0b9b92e0-5500-4dca-a622-f63b3cdf0878", "name": "Upload Video to YouTube", "type": "n8n-nodes-base.httpRequest", "position": [ 1080, 860 ], "parameters": { "url": "{{ $env.BASE_URL }}", "method": "PUT", "options": {}, "sendBody": true, "contentType": "binaryData", "sendHeaders": true, "authentication": "{{ $credentials.predefinedCredentialType }}", "headerParameters": { "parameters": [ { "name": "Content-Type", "value": "video/webm" } ] }, "inputDataFieldName": "data", "nodeCredentialType": "YOUR_CREDENTIAL_HERE" }, "credentials": { "youTubeOAuth2Api": { "id": "f9uNp5YNQMnXrNw2", "name": "YouTube account" } }, "typeVersion": 4.2, "notes": "This httpRequest node performs automated tasks as part of the workflow." }, { "id": "721078b6-b1e2-4077-b1ff-696cb3765675", "name": "Update Quote Upload Status", "type": "n8n-nodes-base.googleSheets", "position": [ 1280, 860 ], "parameters": { "columns": { "value": { "Index": "={{ $('Get data from Google Sheet').item.json.Index }}", "Video Status": "={{ $env.WEBHOOK_URL }}{{ $json.id }}" }, "schema": [ { "id": "Index", "type": "string", "display": true, "removed": false, "required": false, "displayName": "Index", "defaultMatch": false, "canBeUsedToMatch": true }, { "id": "Quote (Thai)", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Quote (Thai)", "defaultMatch": false, "canBeUsedToMatch": true }, { "id": "Pen Name (Thai)", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Pen Name (Thai)", "defaultMatch": false, "canBeUsedToMatch": true }, { "id": "Background (EN)", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Background (EN)", "defaultMatch": false, "canBeUsedToMatch": true }, { "id": "Prompt (EN)", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Prompt (EN)", "defaultMatch": false, "canBeUsedToMatch": true }, { "id": "Background Image", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Background Image", "defaultMatch": false, "canBeUsedToMatch": true }, { "id": "Background Video", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Background Video", "defaultMatch": false, "canBeUsedToMatch": true }, { "id": "Music Background", "type": "string", "display": true, "removed": true, "required": false, "displayName": "Music Background", "defaultMatch": false, "canBeUsedToMatch": true }, { "id": "Video Status", "type": "string", "display": true, "required": false, "displayName": "Video Status", "defaultMatch": false, "canBeUsedToMatch": true } ], "mappingMode": "defineBelow", "matchingColumns": [ "Index" ], "attemptToConvertTypes": false, "convertFieldsToString": false }, "options": {}, "operation": "appendOrUpdate", "sheetName": { "__rl": true, "mode": "list", "value": "gid=0", "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "Sheet1" }, "documentId": { "__rl": true, "mode": "id", "value": "1p1iPoiu2uI3qGbHi0diS7QwsMcLuzDIqwo3AeSUVrGQ" } }, "credentials": { "googleSheetsOAuth2Api": { "id": "Ra2f1dlqOJ13jTtb", "name": "Google Sheets account" } }, "typeVersion": 4.5, "notes": "This googleSheets node performs automated tasks as part of the workflow." }, { "id": "8900abd9-9f35-46a3-9b59-883ff16b0764", "name": "Sticky Note3", "type": "n8n-nodes-base.stickyNote", "position": [ 660, 760 ], "parameters": { "color": 5, "width": 760, "height": 300, "content": "## Video Upload & Post-Processing\nUpload the final video to YouTube using the YouTube API and update your Google Sheets with upload statuses and YouTube links." }, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow." }, { "id": "07cdec2c-9677-46f0-8038-641c4c191059", "name": "Sticky Note4", "type": "n8n-nodes-base.stickyNote", "position": [ 240, -80 ], "parameters": { "color": 6, "width": 340, "height": 240, "content": "## Get Quote\nRetrieve quote data from Google Sheets including text, author, and background prompts." }, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow." }, { "id": "aeadbc59-13d7-4755-b38d-6d4946ecfa78", "name": "Sticky Note5", "type": "n8n-nodes-base.stickyNote", "position": [ 240, 760 ], "parameters": { "color": 6, "width": 400, "height": 300, "content": "## Combine All\nMerge video, sound, and quote text into final clip using FFmpeg." }, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow." } ], "active": false, "pinData": {}, "settings": { "executionOrder": "v1", "saveManualExecutions": true, "callerPolicy": "workflowsFromSameOwner", "errorWorkflow": null, "timezone": "UTC", "executionTimeout": 3600, "maxExecutions": 1000, "retryOnFail": true, "retryCount": 3, "retryDelay": 1000 }, "versionId": "2c56841d-3045-4d6d-b643-0f3804bf2c3e", "connections": { "ec44d567-dfc8-4561-87df-903724225247": { "main": [ [ { "node": "error-handler-ec44d567-dfc8-4561-87df-903724225247", "type": "main", "index": 0 } ], [ { "node": "error-handler-ec44d567-dfc8-4561-87df-903724225247-86581695", "type": "main", "index": 0 } ], [ { "node": "error-handler-ec44d567-dfc8-4561-87df-903724225247-58cd0530", "type": "main", "index": 0 } ], [ { "node": "error-handler-ec44d567-dfc8-4561-87df-903724225247-438758b3", "type": "main", "index": 0 } ], [ { "node": "error-handler-ec44d567-dfc8-4561-87df-903724225247-52b28ac5", "type": "main", "index": 0 } ], [ { "node": "error-handler-ec44d567-dfc8-4561-87df-903724225247-4b2395de", "type": "main", "index": 0 } ], [ { "node": "error-handler-ec44d567-dfc8-4561-87df-903724225247-2db044ae", "type": "main", "index": 0 } ], [ { "node": "error-handler-ec44d567-dfc8-4561-87df-903724225247-c6ed7c5d", "type": "main", "index": 0 } ], [ { "node": "error-handler-ec44d567-dfc8-4561-87df-903724225247-a5f235bf", "type": "main", "index": 0 } ] ] }, "ad260a51-e981-47cc-8600-967c1c748814": { "main": [ [ { "node": "error-handler-ad260a51-e981-47cc-8600-967c1c748814", "type": "main", "index": 0 } ], [ { "node": "error-handler-ad260a51-e981-47cc-8600-967c1c748814-6e35ce32", "type": "main", "index": 0 } ], [ { "node": "error-handler-ad260a51-e981-47cc-8600-967c1c748814-319f5f3a", "type": "main", "index": 0 } ], [ { "node": "error-handler-ad260a51-e981-47cc-8600-967c1c748814-3a38b9eb", "type": "main", "index": 0 } ], [ { "node": "error-handler-ad260a51-e981-47cc-8600-967c1c748814-f1500c0e", "type": "main", "index": 0 } ], [ { "node": "error-handler-ad260a51-e981-47cc-8600-967c1c748814-c8b9b05b", "type": "main", "index": 0 } ], [ { "node": "error-handler-ad260a51-e981-47cc-8600-967c1c748814-8a43725a", "type": "main", "index": 0 } ], [ { "node": "error-handler-ad260a51-e981-47cc-8600-967c1c748814-08f4d82a", "type": "main", "index": 0 } ], [ { "node": "error-handler-ad260a51-e981-47cc-8600-967c1c748814-dfcdd7ae", "type": "main", "index": 0 } ] ] }, "801dd794-4cf8-42f7-8102-a3a4853cae39": { "main": [ [ { "node": "error-handler-801dd794-4cf8-42f7-8102-a3a4853cae39", "type": "main", "index": 0 } ], [ { "node": "error-handler-801dd794-4cf8-42f7-8102-a3a4853cae39-0e2b27c0", "type": "main", "index": 0 } ], [ { "node": "error-handler-801dd794-4cf8-42f7-8102-a3a4853cae39-152c231e", "type": "main", "index": 0 } ], [ { "node": "error-handler-801dd794-4cf8-42f7-8102-a3a4853cae39-97a7bad9", "type": "main", "index": 0 } ], [ { "node": "error-handler-801dd794-4cf8-42f7-8102-a3a4853cae39-3be0cc6f", "type": "main", "index": 0 } ], [ { "node": "error-handler-801dd794-4cf8-42f7-8102-a3a4853cae39-60388776", "type": "main", "index": 0 } ], [ { "node": "error-handler-801dd794-4cf8-42f7-8102-a3a4853cae39-a95b6775", "type": "main", "index": 0 } ], [ { "node": "error-handler-801dd794-4cf8-42f7-8102-a3a4853cae39-9373007e", "type": "main", "index": 0 } ], [ { "node": "error-handler-801dd794-4cf8-42f7-8102-a3a4853cae39-b78cb61c", "type": "main", "index": 0 } ] ] }, "c3f97a19-9ea8-4489-8629-767542f0fddb": { "main": [ [ { "node": "error-handler-c3f97a19-9ea8-4489-8629-767542f0fddb", "type": "main", "index": 0 } ], [ { "node": "error-handler-c3f97a19-9ea8-4489-8629-767542f0fddb-4ad4c9b5", "type": "main", "index": 0 } ], [ { "node": "error-handler-c3f97a19-9ea8-4489-8629-767542f0fddb-f90ac4c3", "type": "main", "index": 0 } ], [ { "node": "error-handler-c3f97a19-9ea8-4489-8629-767542f0fddb-fc90d608", "type": "main", "index": 0 } ], [ { "node": "error-handler-c3f97a19-9ea8-4489-8629-767542f0fddb-36151948", "type": "main", "index": 0 } ], [ { "node": "error-handler-c3f97a19-9ea8-4489-8629-767542f0fddb-a46180d8", "type": "main", "index": 0 } ], [ { "node": "error-handler-c3f97a19-9ea8-4489-8629-767542f0fddb-7fa1e4e1", "type": "main", "index": 0 } ], [ { "node": "error-handler-c3f97a19-9ea8-4489-8629-767542f0fddb-fb0857fd", "type": "main", "index": 0 } ], [ { "node": "error-handler-c3f97a19-9ea8-4489-8629-767542f0fddb-57bc863d", "type": "main", "index": 0 } ] ] }, "8d2035a8-d4a0-4a33-bae3-c18b530487d4": { "main": [ [ { "node": "error-handler-8d2035a8-d4a0-4a33-bae3-c18b530487d4", "type": "main", "index": 0 } ], [ { "node": "error-handler-8d2035a8-d4a0-4a33-bae3-c18b530487d4-434fe9c9", "type": "main", "index": 0 } ], [ { "node": "error-handler-8d2035a8-d4a0-4a33-bae3-c18b530487d4-88485159", "type": "main", "index": 0 } ], [ { "node": "error-handler-8d2035a8-d4a0-4a33-bae3-c18b530487d4-f45107a1", "type": "main", "index": 0 } ], [ { "node": "error-handler-8d2035a8-d4a0-4a33-bae3-c18b530487d4-08b6003b", "type": "main", "index": 0 } ], [ { "node": "error-handler-8d2035a8-d4a0-4a33-bae3-c18b530487d4-da2c32ad", "type": "main", "index": 0 } ], [ { "node": "error-handler-8d2035a8-d4a0-4a33-bae3-c18b530487d4-d25ffa7f", "type": "main", "index": 0 } ], [ { "node": "error-handler-8d2035a8-d4a0-4a33-bae3-c18b530487d4-c1155180", "type": "main", "index": 0 } ], [ { "node": "error-handler-8d2035a8-d4a0-4a33-bae3-c18b530487d4-e0bcdf68", "type": "main", "index": 0 } ] ] }, "fa5cce8d-4b50-4221-9446-050f497b30a9": { "main": [ [ { "node": "error-handler-fa5cce8d-4b50-4221-9446-050f497b30a9", "type": "main", "index": 0 } ], [ { "node": "error-handler-fa5cce8d-4b50-4221-9446-050f497b30a9-a2db36e5", "type": "main", "index": 0 } ], [ { "node": "error-handler-fa5cce8d-4b50-4221-9446-050f497b30a9-06a8f4c1", "type": "main", "index": 0 } ], [ { "node": "error-handler-fa5cce8d-4b50-4221-9446-050f497b30a9-b65ccc55", "type": "main", "index": 0 } ], [ { "node": "error-handler-fa5cce8d-4b50-4221-9446-050f497b30a9-b83945d6", "type": "main", "index": 0 } ], [ { "node": "error-handler-fa5cce8d-4b50-4221-9446-050f497b30a9-fd62a5ce", "type": "main", "index": 0 } ], [ { "node": "error-handler-fa5cce8d-4b50-4221-9446-050f497b30a9-cf18af0a", "type": "main", "index": 0 } ], [ { "node": "error-handler-fa5cce8d-4b50-4221-9446-050f497b30a9-95073ddc", "type": "main", "index": 0 } ], [ { "node": "error-handler-fa5cce8d-4b50-4221-9446-050f497b30a9-4b7ee85c", "type": "main", "index": 0 } ] ] }, "3c301b6b-d6cb-41af-ac52-5722bed8470d": { "main": [ [ { "node": "error-handler-3c301b6b-d6cb-41af-ac52-5722bed8470d", "type": "main", "index": 0 } ], [ { "node": "error-handler-3c301b6b-d6cb-41af-ac52-5722bed8470d-3945e809", "type": "main", "index": 0 } ], [ { "node": "error-handler-3c301b6b-d6cb-41af-ac52-5722bed8470d-7bd8ac31", "type": "main", "index": 0 } ], [ { "node": "error-handler-3c301b6b-d6cb-41af-ac52-5722bed8470d-11d28a9e", "type": "main", "index": 0 } ], [ { "node": "error-handler-3c301b6b-d6cb-41af-ac52-5722bed8470d-2c8e125c", "type": "main", "index": 0 } ], [ { "node": "error-handler-3c301b6b-d6cb-41af-ac52-5722bed8470d-1e7697cc", "type": "main", "index": 0 } ], [ { "node": "error-handler-3c301b6b-d6cb-41af-ac52-5722bed8470d-4382bcab", "type": "main", "index": 0 } ], [ { "node": "error-handler-3c301b6b-d6cb-41af-ac52-5722bed8470d-372c5eea", "type": "main", "index": 0 } ], [ { "node": "error-handler-3c301b6b-d6cb-41af-ac52-5722bed8470d-45348b23", "type": "main", "index": 0 } ] ] }, "0b9b92e0-5500-4dca-a622-f63b3cdf0878": { "main": [ [ { "node": "error-handler-0b9b92e0-5500-4dca-a622-f63b3cdf0878", "type": "main", "index": 0 } ], [ { "node": "error-handler-0b9b92e0-5500-4dca-a622-f63b3cdf0878-1396813f", "type": "main", "index": 0 } ], [ { "node": "error-handler-0b9b92e0-5500-4dca-a622-f63b3cdf0878-f55ae35b", "type": "main", "index": 0 } ], [ { "node": "error-handler-0b9b92e0-5500-4dca-a622-f63b3cdf0878-5718674d", "type": "main", "index": 0 } ], [ { "node": "error-handler-0b9b92e0-5500-4dca-a622-f63b3cdf0878-a4dd7090", "type": "main", "index": 0 } ], [ { "node": "error-handler-0b9b92e0-5500-4dca-a622-f63b3cdf0878-9b8a604b", "type": "main", "index": 0 } ], [ { "node": "error-handler-0b9b92e0-5500-4dca-a622-f63b3cdf0878-b833f79e", "type": "main", "index": 0 } ], [ { "node": "error-handler-0b9b92e0-5500-4dca-a622-f63b3cdf0878-2980235c", "type": "main", "index": 0 } ], [ { "node": "error-handler-0b9b92e0-5500-4dca-a622-f63b3cdf0878-60936c2e", "type": "main", "index": 0 } ] ] }, "64132a39-ad42-4158-9eec-5b6bfdc7bca2": { "main": [ [ { "node": "error-handler-64132a39-ad42-4158-9eec-5b6bfdc7bca2-3595d14e", "type": "main", "index": 0 } ] ] }, "66af781a-2012-426e-a623-e90e21e8b2a1": { "main": [ [ { "node": "error-handler-66af781a-2012-426e-a623-e90e21e8b2a1-443f1442", "type": "main", "index": 0 } ] ] }, "04074118-9f30-4648-8aab-9574156a76ba": { "main": [ [ { "node": "error-handler-04074118-9f30-4648-8aab-9574156a76ba-a8f0de8a", "type": "main", "index": 0 } ] ] }, "35ca939b-fb27-48cf-8036-f35618ceaee0": { "main": [ [ { "node": "error-handler-35ca939b-fb27-48cf-8036-f35618ceaee0-90ba0a48", "type": "main", "index": 0 } ] ] }, "15b9e2b1-72d9-42bf-a8a4-0ad0a01c5e5f": { "main": [ [ { "node": "error-handler-15b9e2b1-72d9-42bf-a8a4-0ad0a01c5e5f-4d809a99", "type": "main", "index": 0 } ] ] }, "2a628e8a-077a-4999-9ef7-8d28ac4433ac": { "main": [ [ { "node": "error-handler-2a628e8a-077a-4999-9ef7-8d28ac4433ac-e3077707", "type": "main", "index": 0 } ] ] }, "ea003577-5467-4acb-a33b-b4b30a03a35f": { "main": [ [ { "node": "error-handler-ea003577-5467-4acb-a33b-b4b30a03a35f-c1eebaff", "type": "main", "index": 0 } ] ] }, "dbde06b3-e7ba-4b7e-9d58-0a06f88b5176": { "main": [ [ { "node": "error-handler-dbde06b3-e7ba-4b7e-9d58-0a06f88b5176-ad367bc6", "type": "main", "index": 0 } ] ] }, "721078b6-b1e2-4077-b1ff-696cb3765675": { "main": [ [ { "node": "error-handler-721078b6-b1e2-4077-b1ff-696cb3765675-f6a1c1f6", "type": "main", "index": 0 } ] ] } }, "description": "Automated workflow: AutoQoutesV2_template. This workflow integrates 10 different services: stickyNote, httpRequest, wait, code, readWriteFile. It contains 53 nodes and follows best practices for error handling and security.", "notes": "Excellent quality workflow: AutoQoutesV2_template. This workflow has been optimized for production use with comprehensive error handling, security, and documentation." }