This workflow follows the Agent → Form 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 →
{
"name": "Episode 14: Seedance + ASMR",
"nodes": [
{
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini"
},
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"typeVersion": 1.2,
"position": [
1240,
1100
],
"id": "6e3e183c-85a0-4d02-ba64-647b25896908",
"name": "OpenAI Chat Model",
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"promptType": "define",
"text": "=<Instructions>\n\nBreak down the following story into a script (for short video) with exacly {{ $('Setup defaults').item.json.number_of_scenes }} scenes.\n\n</Instructions>\n\n<Story>\n{{ $json.output.story }}\n</Story>",
"hasOutputParser": true,
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.agent",
"typeVersion": 2,
"position": [
-220,
1120
],
"id": "52b9e185-977b-4e7b-a61a-70fe9c6e9530",
"name": "Generate scenes"
},
{
"parameters": {
"url": "={{ $('Start adding audio to the video').item.json.status_url }}",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
0,
2040
],
"id": "7aa27ddf-ead4-426b-a083-83eb231556fe",
"name": "Get audio status",
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"url": "={{ $('Start adding audio to the video').item.json.response_url }}",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
380,
2060
],
"id": "e4ccfc31-c7ad-49b0-8769-93ef4ff3a681",
"name": "Get video with audio",
"alwaysOutputData": false,
"retryOnFail": true,
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"method": "POST",
"url": "https://queue.fal.run/fal-ai/ffmpeg-api/compose",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={\n \"tracks\": [\n {\n \"id\": \"1\",\n \"type\": \"video\",\n \"keyframes\": {{ JSON.stringify($json.data.map((item, index) => ({ url: item.video.url, timestamp: index * 6000, duration: 6000 }))) }}\n }\n ]\n}",
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
-380,
2460
],
"id": "7733f3e3-de61-44e7-b32d-4a85feabad0a",
"name": "Start merging videos",
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"url": "={{ $json.video_url }}",
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
820,
2440
],
"id": "caacbc26-ecde-48f5-b07c-c9a24a55e661",
"name": "Download final video"
},
{
"parameters": {
"amount": 1
},
"type": "n8n-nodes-base.wait",
"typeVersion": 1.1,
"position": [
-120,
2460
],
"id": "d51d71e8-ca6c-4532-996e-71de03f6b88f",
"name": "Wait for the merge to complete"
},
{
"parameters": {
"rules": {
"values": [
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"leftValue": "={{ $json.status }}",
"rightValue": "COMPLETED",
"operator": {
"type": "string",
"operation": "equals"
},
"id": "6fc5bea4-1567-474b-bfca-5394eb303217"
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "COMPLETED"
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "0882f634-2472-4d24-a1c3-a39f0cd94855",
"leftValue": "={{ $json.status }}",
"rightValue": "IN_PROGRESS",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "IN_PROGRESS"
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "e6c8b207-13ac-4537-8c5c-677039bc2fef",
"leftValue": "={{ $json.status }}",
"rightValue": "IN_QUEUE",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "IN_QUEUE"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.switch",
"typeVersion": 3.2,
"position": [
320,
2460
],
"id": "53c4acad-1007-4591-b519-0b531559bef2",
"name": "Merge videos status"
},
{
"parameters": {
"url": "={{ $('Start merging videos').item.json.status_url }}",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
100,
2460
],
"id": "c24d434f-aa6a-4a2a-80be-6a727fa63e89",
"name": "Get merge videos status",
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"url": "={{ $('Start merging videos').item.json.response_url }}",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
600,
2440
],
"id": "61c957c9-d342-41b2-8b37-c1b68c6b35f3",
"name": "Get merged video",
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"fieldToSplitOut": "output.scenes",
"options": {}
},
"type": "n8n-nodes-base.splitOut",
"typeVersion": 1,
"position": [
460,
1140
],
"id": "088a1cda-54f8-48da-87b5-ee10fff9b263",
"name": "Split out the scenes"
},
{
"parameters": {
"method": "POST",
"url": "https://queue.fal.run/fal-ai/mmaudio-v2",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendBody": true,
"bodyParameters": {
"parameters": [
{
"name": "video_url",
"value": "={{ $json.video.url }}"
},
{
"name": "prompt",
"value": "={{ $('Create scene').item.json.output.sound_effects }}"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
-640,
2020
],
"id": "f1250add-bb79-4d16-99d1-8db90830392a",
"name": "Start adding audio to the video",
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"amount": 1
},
"type": "n8n-nodes-base.wait",
"typeVersion": 1.1,
"position": [
-200,
2040
],
"id": "93da13a3-1645-49f7-9af4-76f41e1c5c70",
"name": "Wait for adding the audio"
},
{
"parameters": {
"rules": {
"values": [
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"leftValue": "={{ $json.status }}",
"rightValue": "COMPLETED",
"operator": {
"type": "string",
"operation": "equals"
},
"id": "6fc5bea4-1567-474b-bfca-5394eb303217"
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "COMPLETED"
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "0882f634-2472-4d24-a1c3-a39f0cd94855",
"leftValue": "={{ $json.status }}",
"rightValue": "IN_PROGRESS",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "IN_PROGRESS"
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "e6c8b207-13ac-4537-8c5c-677039bc2fef",
"leftValue": "={{ $json.status }}",
"rightValue": "IN_QUEUE",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "IN_QUEUE"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.switch",
"typeVersion": 3.2,
"position": [
160,
2040
],
"id": "d59d02dc-35da-42bb-93e6-b42af4e08a69",
"name": "Audio status"
},
{
"parameters": {
"aggregate": "aggregateAllItemData",
"options": {}
},
"type": "n8n-nodes-base.aggregate",
"typeVersion": 1,
"position": [
-640,
2460
],
"id": "15dc2eb3-436f-49ea-aaa7-19f73ec6e110",
"name": "Aggregate videos with audio"
},
{
"parameters": {
"content": "# 1. Create a story\n1. Setup the LLM nodes `Create story` and `Generate scenes`",
"height": 320,
"width": 1320
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-680,
1000
],
"id": "4bd81888-d4fa-4df6-a6ff-03f4e939bb58",
"name": "Sticky Note"
},
{
"parameters": {
"content": "# 2. Generate a video with seedance\n1. Setup the fal.ai authentication in the `Start video generation` `Get video generation status` and the `Get the generated video` nodes\n1. Setup the LLM node `Create scene`\n",
"height": 460,
"width": 1820
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-680,
1360
],
"id": "0aa3d2c8-86e3-444c-b8b7-4102e27d86ed",
"name": "Sticky Note2"
},
{
"parameters": {
"content": "# 3. Create sound effects using mmaudio-v2\n\nSetup the fal.ai authentication in the `Start adding audio to the video` `Get audio status` and the `Get video with audio` nodes",
"height": 380,
"width": 1240
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-680,
1860
],
"id": "083bf0dc-073a-4304-a46c-86eadf7c2068",
"name": "Sticky Note3"
},
{
"parameters": {
"content": "# 4. Merge the clips into the final video\n\nSetup the fal.ai authentication in the `Start merging videos` `Get merge videos status` and `Get merged video` nodes",
"height": 380,
"width": 1740,
"color": 4
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-680,
2280
],
"id": "559c0546-90d2-45fa-96eb-5191729dc347",
"name": "Sticky Note4"
},
{
"parameters": {
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatOllama",
"typeVersion": 1,
"position": [
760,
760
],
"id": "0faf9f32-3b94-4dc3-bb17-909d994858c2",
"name": "Ollama Chat Model",
"credentials": {
"ollamaApi": {
"name": "<your credential>"
}
},
"disabled": true
},
{
"parameters": {
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatDeepSeek",
"typeVersion": 1,
"position": [
1080,
760
],
"id": "ba0cb47d-a16c-4377-a8b4-b33882af5b04",
"name": "DeepSeek Chat Model",
"disabled": true
},
{
"parameters": {
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
"typeVersion": 1,
"position": [
1240,
760
],
"id": "dc32a442-f49e-4974-9946-bebd92fdfced",
"name": "OpenRouter Chat Model",
"disabled": true
},
{
"parameters": {
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"typeVersion": 1,
"position": [
760,
1100
],
"id": "a2467b85-10a8-4cd4-8399-5921226526a1",
"name": "Google Gemini Chat Model",
"disabled": true
},
{
"parameters": {
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatAzureOpenAi",
"typeVersion": 1,
"position": [
760,
920
],
"id": "00de7ca2-3046-42b4-baff-cee80606f9e8",
"name": "Azure OpenAI Chat Model",
"disabled": true
},
{
"parameters": {
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatXAiGrok",
"typeVersion": 1,
"position": [
920,
920
],
"id": "57d9ed62-d3f2-4b2c-8c0d-485851b073ab",
"name": "xAI Grok Chat Model",
"disabled": true
},
{
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "claude-sonnet-4-20250514",
"cachedResultName": "Claude 4 Sonnet"
},
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
"typeVersion": 1.3,
"position": [
1080,
920
],
"id": "434ea32d-2f45-4590-87ef-fb6ef09d2c37",
"name": "Anthropic Chat Model",
"disabled": true
},
{
"parameters": {
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatXAiGrok",
"typeVersion": 1,
"position": [
1240,
920
],
"id": "afe55c34-0ee9-41b7-bec1-64807c638b82",
"name": "xAI Grok Chat Model1",
"disabled": true
},
{
"parameters": {
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatGroq",
"typeVersion": 1,
"position": [
1080,
1100
],
"id": "12b16826-f536-4f93-a09e-c24f39525ab4",
"name": "Groq Chat Model",
"disabled": true
},
{
"parameters": {
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatAwsBedrock",
"typeVersion": 1,
"position": [
920,
760
],
"id": "af02c51b-2a89-4e2b-8931-87270f7af5b6",
"name": "AWS Bedrock Chat Model",
"disabled": true
},
{
"parameters": {
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatMistralCloud",
"typeVersion": 1,
"position": [
920,
1100
],
"id": "72e18609-b399-4e53-b9d9-e1f27e87515f",
"name": "Mistral Cloud Chat Model",
"disabled": true
},
{
"parameters": {
"content": "# Pick your choice of LLM\n\nSelect one LLM and make sure to deactivate the rest",
"height": 700,
"width": 720,
"color": 3
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
680,
620
],
"id": "bd2cac0c-66cb-460c-8ee2-500acb920c72",
"name": "Sticky Note5"
},
{
"parameters": {
"content": "# How to set up this automation?\n\n## 1. Select your choice of LLM, set it up, connect it to the three LLM nodes in boxes 1 and 2 and make sure to deactive (or delete) the rest of the LLM chat models\n## 2. Setup the fal.ai authentication in the HTTP Request nodes in boxes 2, 3, 4",
"height": 340,
"width": 900,
"color": 6
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-260,
620
],
"id": "eb065857-7007-4e86-87af-cb5588dfd4b7",
"name": "Sticky Note14"
},
{
"parameters": {
"content": "# \ud83d\udcda [Join our Skool community for support, premium content and more!](https://www.skool.com/ai-agents-az/about?w9)\n\n## Be part of a growing community and help us create more content like this\n\n## And get access to our premium workflows and servers",
"height": 340,
"width": 700,
"color": 6
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-1000,
620
],
"id": "38be7977-af46-4ce1-878c-7f78639c9c29",
"name": "Sticky Note16"
},
{
"parameters": {
"formTitle": "Create an AI video with Seedance (from Bytedance)",
"formFields": {
"values": [
{
"fieldLabel": "Story",
"fieldType": "textarea",
"placeholder": "The story of the video",
"requiredField": true
},
{
"fieldLabel": "Number of scenes",
"fieldType": "number",
"placeholder": "default: 5"
},
{
"fieldLabel": "Aspect ratio",
"fieldType": "dropdown",
"fieldOptions": {
"values": [
{
"option": "16:9"
},
{
"option": "9:16"
},
{
"option": "1:1"
},
{
"option": "4:3"
},
{
"option": "3:4"
},
{
"option": "21:9"
}
]
},
"requiredField": true
},
{
"fieldLabel": "Resolution",
"fieldType": "dropdown",
"fieldOptions": {
"values": [
{
"option": "480p"
},
{
"option": "1080p"
}
]
},
"requiredField": true
},
{
"fieldLabel": "Duration",
"fieldType": "dropdown",
"fieldOptions": {
"values": [
{
"option": "5"
},
{
"option": "10"
}
]
},
"requiredField": true
}
]
},
"options": {}
},
"type": "n8n-nodes-base.formTrigger",
"typeVersion": 2.2,
"position": [
-1060,
1120
],
"id": "252c3be2-5c9e-4d6e-93e4-e0a66bc6f9ed",
"name": "On form submission"
},
{
"parameters": {},
"type": "n8n-nodes-base.wait",
"typeVersion": 1.1,
"position": [
240,
1620
],
"id": "dfc3748e-39b6-4a58-836d-b68aa9eb0a5b",
"name": "Wait for the video"
},
{
"parameters": {
"url": "={{ $('Loop Over Items').item.json.status_url }}",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
440,
1620
],
"id": "54353df3-0277-48fc-a6a5-625bd3911576",
"name": "Get the video status",
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"rules": {
"values": [
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"leftValue": "={{ $json.status }}",
"rightValue": "COMPLETED",
"operator": {
"type": "string",
"operation": "equals"
},
"id": "6fc5bea4-1567-474b-bfca-5394eb303217"
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "COMPLETED"
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "0882f634-2472-4d24-a1c3-a39f0cd94855",
"leftValue": "={{ $json.status }}",
"rightValue": "IN_PROGRESS",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "IN_PROGRESS"
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "e6c8b207-13ac-4537-8c5c-677039bc2fef",
"leftValue": "={{ $json.status }}",
"rightValue": "IN_QUEUE",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "IN_QUEUE"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.switch",
"typeVersion": 3.2,
"position": [
680,
1620
],
"id": "356ea095-7e89-4bbe-bbcc-364f736ca89e",
"name": "Video status"
},
{
"parameters": {
"url": "={{ $('Loop Over Items').item.json.response_url }}",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
960,
1640
],
"id": "579c73a7-9578-4296-aa91-3ddb8da03fc1",
"name": "Get the video",
"alwaysOutputData": false,
"retryOnFail": true,
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"promptType": "define",
"text": "=<Instructions>\n\nCreate an engaging, very detailed story for a short video, based on the idea/story below.\nMake sure to provide detailed description for the characters and the surroundings.\n\n</Instructions>\n\n<Idea>\n{{ $('On form submission').item.json.Story }}\n</Idea>",
"hasOutputParser": true,
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.agent",
"typeVersion": 2,
"position": [
-600,
1120
],
"id": "10d97b2c-21dc-4d9e-9540-2e0e50934c36",
"name": "Create story"
},
{
"parameters": {
"promptType": "define",
"text": "=<Instructions>\n\n# Create a detailed scene for the scene below, that consists of\n- A list of characters in the scene, with their detailed description\n- A detailed description of the scene: what's behind the characters\n- Camera movement (if any) in the scene\n- The movement of the objects on the screen in this 5s long clip\n- The description of the sound effects on the screen\n\nUse the full story for reference.\n\n</Instructions>\n\n<Scene>\n{{ $json['output.scenes'] }}\n</Scene>\n\n<FullStory>\n{{ $('Create story').item.json.output.story }}\n</FullStory>\n",
"hasOutputParser": true,
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.agent",
"typeVersion": 2,
"position": [
-640,
1520
],
"id": "f04f3b4d-64ad-47f7-b19b-f50171a5ec6a",
"name": "Create scene"
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "999a81ed-d897-43cf-babe-c05c0d9f2314",
"leftValue": "={{ $json.output.scenes }}",
"rightValue": "={{ $('Setup defaults').item.json.number_of_scenes }}",
"operator": {
"type": "array",
"operation": "lengthEquals",
"rightType": "number"
}
}
],
"combinator": "and"
},
"options": {}
},
"type": "n8n-nodes-base.if",
"typeVersion": 2.2,
"position": [
160,
1120
],
"id": "f980c511-a034-44d1-8fae-23529c20e02f",
"name": "Correct length?"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "88f1922e-9c90-4d5f-a501-2cd0fdb2ff54",
"name": "number_of_scenes",
"value": "={{ $json['Number of scenes'] || 5 }}",
"type": "number"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
-860,
1120
],
"id": "0fb7f73d-dba7-49f7-ae0b-ac83d7166cfe",
"name": "Setup defaults"
},
{
"parameters": {
"schemaType": "manual",
"inputSchema": "{\n \"type\": \"object\",\n \"properties\": {\n \"scenes\": {\n \"type\": \"array\",\n \"description\": \"the scenes\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\n \"scenes\"\n ]\n}"
},
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"typeVersion": 1.2,
"position": [
-940,
1480
],
"id": "bb8484f3-80b0-4502-b605-c82d8a705460",
"name": "Generate scenes output parser"
},
{
"parameters": {
"schemaType": "manual",
"inputSchema": "{\n \"type\": \"object\",\n \"properties\": {\n \"story\": {\n \"type\": \"string\",\n \"description\": \"the detailed story\"\n }\n },\n \"required\": [\n \"story\"\n ]\n}"
},
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"typeVersion": 1.2,
"position": [
-1320,
1480
],
"id": "7398f9b9-0212-4b46-8d1d-4f1e42bff773",
"name": "Create story output parser"
},
{
"parameters": {
"schemaType": "manual",
"inputSchema": "{\n \"type\": \"object\",\n \"properties\": {\n \"characters\": {\n \"type\": \"array\",\n \"description\": \"the list of characters in the scene\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\",\n \"description\": \"the name of the character\"\n },\n \"description\": {\n \"type\": \"string\",\n \"description\": \"the detailed description of the character (visual outlook)\"\n }\n },\n \"required\": [\n \"name\",\n \"description\"\n ]\n }\n },\n \"scene_description\": {\n \"type\": \"string\",\n \"description\": \"the detailed description of the scene\"\n },\n \"camera_movement\": {\n \"type\": \"string\",\n \"description\": \"the description of the camera movement (if any)\"\n },\n \"object_movements\": {\n \"type\": \"string\",\n \"description\": \"the detailed description of the movement of the objects on the screen\"\n },\n \"sound_effects\": {\n \"type\": \"string\",\n \"description\": \"the sound effects the viewer can hear during the scene\"\n }\n },\n \"required\": [\n \"characters\",\n \"scene_description\",\n \"camera_movement\",\n \"object_movements\",\n \"sound_effects\"\n ]\n}"
},
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"typeVersion": 1.2,
"position": [
-1140,
1480
],
"id": "17252628-d398-4ce3-8a54-f5378273ca56",
"name": "Create scene output parser"
},
{
"parameters": {
"options": {}
},
"type": "n8n-nodes-base.splitInBatches",
"typeVersion": 3,
"position": [
-40,
1660
],
"id": "19192180-55dd-4d70-8ccc-2e80cd5a618b",
"name": "Loop Over Items"
},
{
"parameters": {
"options": {}
},
"type": "n8n-nodes-base.splitInBatches",
"typeVersion": 3,
"position": [
-420,
2080
],
"id": "44a3349d-853a-47fc-b850-cc856954f399",
"name": "Loop Over Items1"
},
{
"parameters": {
"content": "# Structured output parsers",
"height": 300,
"width": 660,
"color": 7
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-1380,
1360
],
"id": "ca3733cd-fe51-4edf-a579-9ce86fda8d51",
"name": "Sticky Note1"
},
{
"parameters": {
"content": "# Start",
"height": 320,
"width": 440,
"color": 5
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-1160,
1000
],
"id": "8701b777-d751-4df9-a9e6-dd5221c43fdc",
"name": "Sticky Note6"
},
{
"parameters": {
"method": "POST",
"url": "https://queue.fal.run/fal-ai/bytedance/seedance/v1/pro/text-to-video",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendBody": true,
"bodyParameters": {
"parameters": [
{
"name": "prompt",
"value": "=<Characters>\n{{ $json.output.characters.map(character => `<Character>\n <Name>${character.name}</Name>\n <Description>${character.description}</Description>\n</Character>`).join('\\n') }}\n</Characters>\n\n<SceneDescription>\n{{ $json.output.scene_description }}\n</SceneDescription>\n\n<CameraMovements>\n{{ $json.output.camera_movement }}\n</CameraMovements>\n\n<ObjectMovements>\n{{ $json.output.object_movements }}\n</ObjectMovements>"
},
{
"name": "aspect_ratio",
"value": "={{ $('On form submission').item.json['Aspect ratio'] }}"
},
{
"name": "resolution",
"value": "={{ $('On form submission').item.json.Resolution }}"
},
{
"name": "duration",
"value": "={{ parseInt($('On form submission').item.json.Duration, 10) }}"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
-260,
1520
],
"id": "3dfb1423-c1c0-4802-a372-bc30be8cbed0",
"name": "Start generating the video",
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"content": "# fal.ai API key should be added in the following format:\n\n1. Select the `Header Authentication` node\n2. Use the following key: `Authorization`\n3. Value should be: `Key $YOUR_API_KEY`",
"height": 300,
"width": 660,
"color": 3
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-1380,
1700
],
"id": "23538bd9-26cc-4ec4-b9db-86ea708b7d95",
"name": "Sticky Note7"
}
],
"connections": {
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "Generate scenes",
"type": "ai_languageModel",
"index": 0
},
{
"node": "Create story",
"type": "ai_languageModel",
"index": 0
},
{
"node": "Create scene",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Generate scenes": {
"main": [
[
{
"node": "Correct length?",
"type": "main",
"index": 0
}
]
]
},
"Get audio status": {
"main": [
[
{
"node": "Audio status",
"type": "main",
"index": 0
}
]
]
},
"Get video with audio": {
"main": [
[
{
"node": "Loop Over Items1",
"type": "main",
"index": 0
}
]
]
},
"Start merging videos": {
"main": [
[
{
"node": "Wait for the merge to complete",
"type": "main",
"index": 0
}
]
]
},
"Wait for the merge to complete": {
"main": [
[
{
"node": "Get merge videos status",
"type": "main",
"index": 0
}
]
]
},
"Merge videos status": {
"main": [
[
{
"node": "Get merged video",
"type": "main",
"index": 0
}
],
[
{
"node": "Wait for the merge to complete",
"type": "main",
"index": 0
}
],
[
{
"node": "Wait for the merge to complete",
"type": "main",
"index": 0
}
]
]
},
"Get merge videos status": {
"main": [
[
{
"node": "Merge videos status",
"type": "main",
"index": 0
}
]
]
},
"Get merged video": {
"main": [
[
{
"node": "Download final video",
"type": "main",
"index": 0
}
]
]
},
"Split out the scenes": {
"main": [
[
{
"node": "Create scene",
"type": "main",
"index": 0
}
]
]
},
"Start adding audio to the video": {
"main": [
[
{
"node": "Loop Over Items1",
"type": "main",
"index": 0
}
]
]
},
"Wait for adding the audio": {
"main": [
[
{
"node": "Get audio status",
"type": "main",
"index": 0
}
]
]
},
"Audio status": {
"main": [
[
{
"node": "Get video with audio",
"type": "main",
"index": 0
}
],
[
{
"node": "Wait for adding the audio",
"type": "main",
"index": 0
}
],
[
{
"node": "Wait for adding the audio",
"type": "main",
"index": 0
}
]
]
},
"Aggregate videos with audio": {
"main": [
[
{
"node": "Start merging videos",
"type": "main",
"index": 0
}
]
]
},
"On form submission": {
"main": [
[
{
"node": "Setup defaults",
"type": "main",
"index": 0
}
]
]
},
"Wait for the video": {
"main": [
[
{
"node": "Get the video status",
"type": "main",
"index": 0
}
]
]
},
"Get the video status": {
"main": [
[
{
"node": "Video status",
"type": "main",
"index": 0
}
]
]
},
"Video status": {
"main": [
[
{
"node": "Get the video",
"type": "main",
"index": 0
}
],
[
{
"node": "Wait for the video",
"type": "main",
"index": 0
}
],
[
{
"node": "Wait for the video",
"type": "main",
"index": 0
}
]
]
},
"Get the video": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Create story": {
"main": [
[
{
"node": "Generate scenes",
"type": "main",
"index": 0
}
]
]
},
"Create scene": {
"main": [
[
{
"node": "Start generating the video",
"type": "main",
"index": 0
}
]
]
},
"Correct length?": {
"main": [
[
{
"node": "Split out the scenes",
"type": "main",
"index": 0
}
],
[
{
"node": "Generate scenes",
"type": "main",
"index": 0
}
]
]
},
"Setup defaults": {
"main": [
[
{
"node": "Create story",
"type": "main",
"index": 0
}
]
]
},
"Create story output parser": {
"ai_outputParser": [
[
{
"node": "Create story",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Generate scenes output parser": {
"ai_outputParser": [
[
{
"node": "Generate scenes",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Create scene output parser": {
"ai_outputParser": [
[
{
"node": "Create scene",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Loop Over Items": {
"main": [
[
{
"node": "Start adding audio to the video",
"type": "main",
"index": 0
}
],
[
{
"node": "Wait for the video",
"type": "main",
"index": 0
}
]
]
},
"Loop Over Items1": {
"main": [
[
{
"node": "Aggregate videos with audio",
"type": "main",
"index": 0
}
],
[
{
"node": "Wait for adding the audio",
"type": "main",
"index": 0
}
]
]
},
"Start generating the video": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
}
},
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "3f51c7bc-439e-4f38-ba42-4114bed36fb2",
"id": "jNlnoi0E3OBBvP4G",
"tags": []
}
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.
httpHeaderAuthollamaApiopenAiApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Episode 14: Seedance + ASMR. Uses lmChatOpenAi, agent, httpRequest, lmChatOllama. Event-driven trigger; 51 nodes.
Source: https://github.com/gyoridavid/ai_agents_az/blob/main/episode_14/ai_video_with_seedance.json — 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.
Episode 11: AI shorts factory app. Uses httpRequest, googleSheets, lmChatOpenAi, lmChatOllama. Event-driven trigger; 96 nodes.
A Telegram bot that converts natural-language work descriptions into detailed cost estimates using AI parsing, vector search, and the open-source DDC CWICR database with 55,000+ construction work item
Bitlab-Chatbot. Uses telegramTrigger, telegram, snowflake, httpRequest. Event-driven trigger; 87 nodes.
My workflow 53. Uses formTrigger, httpRequest, lmChatOpenAi, form. Event-driven trigger; 74 nodes.
Episode 23: UGC with nanobanana. Uses lmChatOpenAi, lmChatOllama, lmChatDeepSeek, lmChatOpenRouter. Event-driven trigger; 74 nodes.