AutomationFlowsAI & RAG › Episode 14: Seedance + Asmr

Episode 14: Seedance + Asmr

Episode 14: Seedance + ASMR. Uses lmChatOpenAi, agent, httpRequest, lmChatOllama. Event-driven trigger; 51 nodes.

Event trigger★★★★★ complexityAI-powered51 nodesOpenAI ChatAgentHTTP RequestOllama ChatLm Chat Deep SeekOpenRouter ChatGoogle Gemini ChatLm Chat Azure Open Ai
AI & RAG Trigger: Event Nodes: 51 Complexity: ★★★★★ AI nodes: yes Added:

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 →

Download .json
{
  "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.

Pro

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 →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

Episode 11: AI shorts factory app. Uses httpRequest, googleSheets, lmChatOpenAi, lmChatOllama. Event-driven trigger; 96 nodes.

HTTP Request, Google Sheets, OpenAI Chat +15
AI & RAG

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

HTTP Request, Telegram, Telegram Trigger +6
AI & RAG

Bitlab-Chatbot. Uses telegramTrigger, telegram, snowflake, httpRequest. Event-driven trigger; 87 nodes.

Telegram Trigger, Telegram, Snowflake +13
AI & RAG

My workflow 53. Uses formTrigger, httpRequest, lmChatOpenAi, form. Event-driven trigger; 74 nodes.

Form Trigger, HTTP Request, OpenAI Chat +15
AI & RAG

Episode 23: UGC with nanobanana. Uses lmChatOpenAi, lmChatOllama, lmChatDeepSeek, lmChatOpenRouter. Event-driven trigger; 74 nodes.

OpenAI Chat, Ollama Chat, Lm Chat Deep Seek +12