This workflow corresponds to n8n.io template #11276 — we link there as the canonical source.
This workflow follows the Agent → Chat Trigger recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"id": "U36du3R0leNDLpX7",
"name": "Advanced Hybrid AI Video Generator with Sora, Veo & Blotato Multi-Publisher",
"tags": [],
"nodes": [
{
"id": "1508117e-ea4e-417b-ac7b-0c4299756cef",
"name": "When chat message received",
"type": "@n8n/n8n-nodes-langchain.chatTrigger",
"position": [
-992,
432
],
"parameters": {
"options": {}
},
"typeVersion": 1.3
},
{
"id": "488c4f9b-2a28-4fa0-b337-597a8e2c5406",
"name": "Google Gemini Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
-816,
608
],
"parameters": {
"options": {}
},
"credentials": {
"googlePalmApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "786ed08b-505f-4034-8090-919970d4f9a6",
"name": "Gemini Prompt Enhancer",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-816,
432
],
"parameters": {
"text": "={{ $json.chatInput }}",
"options": {
"systemMessage": "You are an AI assistant that rewrites user ideas into highly detailed AI video generation prompts.\n\nRules:\n- Take the user input and expand it into a single improved prompt suitable for models like OpenAI Sora 2 and Google Veo 3.1.\n- Focus on describing action, scene, lighting, mood, camera movement and style.\n- Make it safe for all audiences.\n- Output ONLY the improved prompt as plain text (no JSON, no keys)."
},
"promptType": "define"
},
"typeVersion": 3
},
{
"id": "91f29f64-d48a-4355-b18a-433132d9d5c8",
"name": "Config \u2013 Toggles",
"type": "n8n-nodes-base.set",
"position": [
-496,
432
],
"parameters": {
"values": {
"boolean": [
{
"name": "useSora",
"value": true
},
{
"name": "useVeo",
"value": true
},
{
"name": "publishToYouTube",
"value": true
},
{
"name": "publishToTikTok"
},
{
"name": "publishToInstagram"
},
{
"name": "logToGoogleSheets",
"value": true
}
]
},
"options": {}
},
"typeVersion": 2
},
{
"id": "8f050558-cc0c-481f-8967-37d77b3645d7",
"name": "If Use Sora",
"type": "n8n-nodes-base.if",
"position": [
-288,
336
],
"parameters": {
"options": {},
"conditions": {
"boolean": [
{
"value1": "={{ $json.useSora }}",
"operation": "isTrue"
}
]
}
},
"typeVersion": 2
},
{
"id": "9f54a873-e2e9-4f4f-8226-68ca8d82a472",
"name": "If Use Veo",
"type": "n8n-nodes-base.if",
"position": [
-288,
576
],
"parameters": {
"options": {},
"conditions": {
"boolean": [
{
"value1": "={{ $json.useVeo }}",
"operation": "isTrue"
}
]
}
},
"typeVersion": 2
},
{
"id": "e9d8bdbe-535b-4de1-a56e-fa1ddc53bc57",
"name": "Create Sora 2 Pro Video",
"type": "n8n-nodes-base.httpRequest",
"position": [
96,
176
],
"parameters": {
"url": "https://api.openai.com/v1/videos",
"method": "POST",
"options": {},
"sendBody": true,
"contentType": "multipart-form-data",
"authentication": "genericCredentialType",
"bodyParameters": {
"parameters": [
{
"name": "prompt",
"value": "={{ $json.output || $json.chatInput }}"
},
{
"name": "model",
"value": "sora-2-pro"
},
{
"name": "size",
"value": "1280x720"
},
{
"name": "seconds",
"value": "8"
}
]
},
"genericAuthType": "httpHeaderAuth"
},
"typeVersion": 4.2
},
{
"id": "1b9efd86-0af4-4093-92af-eaaad907b888",
"name": "Download Sora Video",
"type": "n8n-nodes-base.httpRequest",
"position": [
304,
176
],
"parameters": {
"url": "=https://api.openai.com/v1/videos/{{ $json.id }}/content",
"options": {
"response": {
"response": {
"responseFormat": "file",
"outputPropertyName": "video"
}
}
},
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth"
},
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "959ae1ba-72fd-4889-be39-eb182172b383",
"name": "Upload Sora Video to Blotato",
"type": "@blotato/n8n-nodes-blotato.blotato",
"position": [
288,
-32
],
"parameters": {
"resource": "media"
},
"credentials": {
"blotatoApi": {
"name": "<your credential>"
}
},
"typeVersion": 2
},
{
"id": "7b394cbc-6e72-4608-86cb-77b803f2de67",
"name": "Publish Sora to YouTube",
"type": "@blotato/n8n-nodes-blotato.blotato",
"position": [
560,
48
],
"parameters": {
"options": {},
"platform": "youtube",
"accountId": {
"__rl": true,
"mode": "list",
"value": "YOUR_BLOTATO_ACCOUNT_ID",
"cachedResultUrl": "https://backend.blotato.com/v2/accounts/YOUR_BLOTATO_ACCOUNT_ID",
"cachedResultName": "Your Blotato YouTube Account"
},
"postContentText": "={{ $('Gemini Prompt Enhancer').item.json.output || $json.chatInput }}",
"postContentMediaUrls": "={{ $json.url }}",
"postCreateYoutubeOptionTitle": "={{ $('Gemini Prompt Enhancer').item.json.output || $json.chatInput }}",
"postCreateYoutubeOptionContainsSyntheticMedia": true
},
"credentials": {
"blotatoApi": {
"name": "<your credential>"
}
},
"typeVersion": 2
},
{
"id": "119bf7de-7e0e-4ac5-a09a-8d88e94a6ff3",
"name": "Publish Sora to TikTok",
"type": "@blotato/n8n-nodes-blotato.blotato",
"position": [
560,
-80
],
"parameters": {
"options": {},
"platform": "tiktok",
"accountId": "YOUR_BLOTATO_ACCOUNT_ID",
"postContentText": "={{ $('Gemini Prompt Enhancer').item.json.output || $json.chatInput }}",
"postContentMediaUrls": "={{ $json.url }}"
},
"credentials": {
"blotatoApi": {
"name": "<your credential>"
}
},
"typeVersion": 2
},
{
"id": "cb5e29e9-fb01-4e62-bf25-5a4cbef64f97",
"name": "Publish Sora to Instagram",
"type": "@blotato/n8n-nodes-blotato.blotato",
"position": [
560,
240
],
"parameters": {
"options": {},
"accountId": "YOUR_BLOTATO_ACCOUNT_ID",
"postContentText": "={{ $('Gemini Prompt Enhancer').item.json.output || $json.chatInput }}",
"postContentMediaUrls": "={{ $json.url }}"
},
"credentials": {
"blotatoApi": {
"name": "<your credential>"
}
},
"typeVersion": 2
},
{
"id": "2f4c8fb3-592f-433a-9779-96870116572e",
"name": "Email Sora Upload Confirmation",
"type": "n8n-nodes-base.gmail",
"position": [
864,
128
],
"parameters": {
"sendTo": "user@example.com",
"message": "Your Sora 2 Pro video has been generated and uploaded via Blotato. Check your connected social channels (YouTube, TikTok, Instagram) or Blotato dashboard for the published content.",
"options": {},
"subject": "Sora Video Published via Blotato"
},
"typeVersion": 2.1
},
{
"id": "7215c2f9-ee94-4872-b801-2d4166835562",
"name": "Log Sora Video to Google Sheets",
"type": "n8n-nodes-base.googleSheets",
"position": [
832,
-64
],
"parameters": {
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": ""
},
"documentId": {
"__rl": true,
"mode": "list",
"value": ""
}
},
"typeVersion": 4
},
{
"id": "aafab867-ec3f-4b63-ab8b-7355c15e906d",
"name": "Create Veo 3.1 Video",
"type": "n8n-nodes-base.httpRequest",
"position": [
32,
752
],
"parameters": {
"url": "https://api.wavespeed.ai/api/v3/google/veo3.1/text-to-video",
"method": "POST",
"options": {},
"sendBody": true,
"authentication": "genericCredentialType",
"bodyParameters": {
"parameters": [
{
"name": "aspect_ratio",
"value": "9:16"
},
{
"name": "duration",
"value": "8"
},
{
"name": "generate_audio",
"value": "true"
},
{
"name": "prompt",
"value": "={{ $json.output || $json.chatInput }}"
},
{
"name": "resolution",
"value": "720p"
}
]
},
"genericAuthType": "httpHeaderAuth"
},
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "10e75028-2ee5-49e2-99b0-e2af2b193721",
"name": "Wait for Veo Result",
"type": "n8n-nodes-base.wait",
"position": [
240,
752
],
"parameters": {
"amount": 60
},
"typeVersion": 1.1
},
{
"id": "80e391c4-dc51-461b-9311-f27d2b3fdf19",
"name": "Get Veo Result",
"type": "n8n-nodes-base.httpRequest",
"position": [
400,
752
],
"parameters": {
"url": "=https://api.wavespeed.ai/api/v3/predictions/{{ $json.data.id }}/result",
"options": {},
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth"
},
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "d6524bb1-d960-4078-a51a-3e66bea2e381",
"name": "Email Veo Video Link",
"type": "n8n-nodes-base.gmail",
"position": [
560,
752
],
"parameters": {
"sendTo": "user@example.com",
"message": "={{ $json.data && $json.data.outputs && $json.data.outputs[0] ? $json.data.outputs[0] : 'Your Veo 3.1 video has finished. Check Wavespeed dashboard for details.' }}",
"options": {},
"subject": "Veo 3.1 Video Result"
},
"typeVersion": 2.1
},
{
"id": "28eee874-5fc0-4c2f-b720-e54913272901",
"name": "Upload Veo Video to Blotato",
"type": "@blotato/n8n-nodes-blotato.blotato",
"position": [
864,
752
],
"parameters": {
"mediaUrl": "={{ $json.data && $json.data.outputs && $json.data.outputs[0] ? $json.data.outputs[0] : '' }}",
"resource": "media"
},
"credentials": {
"blotatoApi": {
"name": "<your credential>"
}
},
"typeVersion": 2
},
{
"id": "099e831e-2b2b-456d-8b64-ffedbbdafd7f",
"name": "Publish Veo to YouTube",
"type": "@blotato/n8n-nodes-blotato.blotato",
"position": [
752,
624
],
"parameters": {
"options": {},
"platform": "youtube",
"accountId": {
"__rl": true,
"mode": "list",
"value": "YOUR_BLOTATO_ACCOUNT_ID",
"cachedResultUrl": "https://backend.blotato.com/v2/accounts/YOUR_BLOTATO_ACCOUNT_ID",
"cachedResultName": "Your Blotato YouTube Account"
},
"postContentText": "={{ $('Gemini Prompt Enhancer').item.json.output || $json.chatInput }}",
"postContentMediaUrls": "={{ $json.url }}",
"postCreateYoutubeOptionTitle": "={{ $('Gemini Prompt Enhancer').item.json.output || $json.chatInput }}",
"postCreateYoutubeOptionContainsSyntheticMedia": true
},
"credentials": {
"blotatoApi": {
"name": "<your credential>"
}
},
"typeVersion": 2
},
{
"id": "f9cfca68-2e90-45af-8900-a6406b17055e",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1488,
176
],
"parameters": {
"width": 336,
"height": 576,
"content": "## Advanced Hybrid AI Video Generator (Sora + Veo + Gemini + Blotato)\n\nThis workflow turns a simple idea into AI-generated videos using OpenAI Sora 2 and Google Veo 3.1. Your message is enhanced by Google Gemini, then sent to both video models in parallel.\n\nThe Sora branch downloads the MP4 file and publishes it to multiple platforms through Blotato (YouTube, TikTok, Instagram). The Veo branch retrieves the Wavespeed result link, emails it to you for comparison, and can optionally upload and publish the Veo output through Blotato.\n\nA Config \u2013 Toggles node lets you enable or disable Sora, Veo, each publishing platform, and optional Google Sheets logging.\n\nThis template is ideal for creators, brands, UGC teams, and anyone wanting a flexible, multi-model AI video pipeline with automated cross-platform publishing.\n"
},
"typeVersion": 1
},
{
"id": "3a3910ae-5bf4-4bc3-93f1-9ab0ff5f513a",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1040,
160
],
"parameters": {
"color": 7,
"width": 944,
"height": 640,
"content": "## Input & Prompt Enhancement\nThis section receives your idea from the Chat Trigger and rewrites it into a detailed, structured video prompt using Google Gemini. The enhanced prompt is then passed to the Sora and Veo branches for video generation.\n"
},
"typeVersion": 1
},
{
"id": "59cc614e-8b42-477d-bad9-d4f18a8ebc46",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
0,
-160
],
"parameters": {
"color": 7,
"width": 1072,
"height": 608,
"content": "## Sora Generation & Multi-Platform Publishing\nThis section generates a Sora 2 Pro video, downloads the MP4, uploads it to Blotato, and publishes it to YouTube, TikTok, and Instagram. It can also log each result to Google Sheets for tracking.\n"
},
"typeVersion": 1
},
{
"id": "ed14d7a5-f16d-478c-ae8b-d1719dd90572",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-16,
544
],
"parameters": {
"color": 7,
"width": 1088,
"height": 432,
"content": "## Veo Comparison & Optional Publishing\nThis section generates a Veo 3.1 video via Wavespeed, emails you the result link, and can upload the output to Blotato for optional publishing to YouTube.\n"
},
"typeVersion": 1
},
{
"id": "32f286f7-b237-49f4-af1e-1fe19d3d2402",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-16,
1088
],
"parameters": {
"width": 352,
"content": "## Before Running\nSet API keys, connect Blotato accounts, and adjust toggles in the Config node. Optional platforms can be enabled or disabled as needed.\n"
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "ac90f285-52bf-4805-890d-0688e8096e9d",
"connections": {
"If Use Veo": {
"main": [
[
{
"node": "Create Veo 3.1 Video",
"type": "main",
"index": 0
}
]
]
},
"If Use Sora": {
"main": [
[
{
"node": "Create Sora 2 Pro Video",
"type": "main",
"index": 0
}
]
]
},
"Get Veo Result": {
"main": [
[
{
"node": "Email Veo Video Link",
"type": "main",
"index": 0
}
]
]
},
"Config \u2013 Toggles": {
"main": [
[
{
"node": "If Use Veo",
"type": "main",
"index": 0
},
{
"node": "If Use Sora",
"type": "main",
"index": 0
}
]
]
},
"Download Sora Video": {
"main": [
[
{
"node": "Upload Sora Video to Blotato",
"type": "main",
"index": 0
}
]
]
},
"Wait for Veo Result": {
"main": [
[
{
"node": "Get Veo Result",
"type": "main",
"index": 0
}
]
]
},
"Create Veo 3.1 Video": {
"main": [
[
{
"node": "Wait for Veo Result",
"type": "main",
"index": 0
}
]
]
},
"Email Veo Video Link": {
"main": [
[
{
"node": "Upload Veo Video to Blotato",
"type": "main",
"index": 0
}
]
]
},
"Gemini Prompt Enhancer": {
"main": [
[
{
"node": "Config \u2013 Toggles",
"type": "main",
"index": 0
}
]
]
},
"Create Sora 2 Pro Video": {
"main": [
[
{
"node": "Download Sora Video",
"type": "main",
"index": 0
}
]
]
},
"Publish Sora to YouTube": {
"main": [
[
{
"node": "Email Sora Upload Confirmation",
"type": "main",
"index": 0
}
]
]
},
"Google Gemini Chat Model": {
"ai_languageModel": [
[
{
"node": "Gemini Prompt Enhancer",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"When chat message received": {
"main": [
[
{
"node": "Gemini Prompt Enhancer",
"type": "main",
"index": 0
}
]
]
},
"Upload Veo Video to Blotato": {
"main": [
[
{
"node": "Publish Veo to YouTube",
"type": "main",
"index": 0
}
]
]
},
"Upload Sora Video to Blotato": {
"main": [
[
{
"node": "Publish Sora to YouTube",
"type": "main",
"index": 0
},
{
"node": "Publish Sora to TikTok",
"type": "main",
"index": 0
},
{
"node": "Publish Sora to Instagram",
"type": "main",
"index": 0
}
]
]
},
"Email Sora Upload Confirmation": {
"main": [
[
{
"node": "Log Sora Video to Google Sheets",
"type": "main",
"index": 0
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
blotatoApigooglePalmApihttpHeaderAuth
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow automatically generates short-form AI videos using both OpenAI Sora 2 Pro and Google Veo 3.1, enhances your idea with Google Gemini, and publishes content across multiple platforms through Blotato. It’s perfect for creators, brands, UGC teams, and anyone building a…
Source: https://n8n.io/workflows/11276/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
🎓 Undergraduate and graduate students or researchers in soft-science fields (psychology, sociology, economics, business) ⏱️ People who don’t have time to read full papers and need quick overviews 📊 An
This Chatbot automates the process of discovering job openings and generating tailored job application emails.
The aim of the Invoice Data Automation workflow is to streamline invoice processing by extracting, validating, and storing invoice details automatically. It uses AI to read invoices (from images/PDFs)
When working as a functional Pega Software tester, this workflow will create a Google Spreadsheet with acceptance criteria and testcases based on the Pega Agile Studio userstory provided. This improve
teste. Uses chatTrigger, agent, lmChatGroq, memoryBufferWindow. Chat trigger; 24 nodes.