n8n AI video
Generate videos with Kling 3, Veo 3, Seedance and the rest of the catalogue from any n8n workflow, using two HTTP Request nodes. This is a generic HTTP workflow, not an official n8n community node, so it works on n8n Cloud and self-hosted alike.
1. Import the workflow
Download videogenapi-generate.json and import it in n8n (Workflows → Import from file). It contains three nodes: Generate video (POST), Wait 5s and Poll status (GET).
2. Add your API key
Create a Header Auth credential and select it in both HTTP nodes:
Name: Authorization
Value: Bearer YOUR_API_KEY
Your key is in the dashboard under API keys; see authentication.
3. Set the model and prompt
In Generate video, the JSON body takes the same fields as the generate endpoint. Map the prompt from a previous node with an expression:
{
"model": "kling-3",
"prompt": "{{ $json.prompt }}",
"duration": 5,
"aspect_ratio": "9:16"
}
4. Turn the poll into a loop
The imported workflow polls once. Most models need longer than 5 seconds, so add a loop:
- Change the Wait node to 15 seconds (30 for Kling 3 or Seedance 2.5).
- After Poll status, add an IF node with the condition
{{ $json.status }}is equal tocompleted. - Connect the true branch to your next step (save to Drive, post to Slack, upload to YouTube…). The video URL is
{{ $json.video_url }}. - Connect the false branch to a second IF on
failed: route failures to an alert, and everything else back into the Wait node.
Typical waits per model are listed on completion and polling. Status checks are not counted against generation rate limits.
Automation ideas
- Product videos from a catalogue: a Google Sheets trigger sends each new product photo to an image-to-video model such as Kling 3.
- Daily social clips: a Schedule trigger, an LLM node that writes a prompt, then Seedance 2.0 for fast vertical video.
- Ad variants: generate several versions of one brief and push them to your ad platform for testing.
Troubleshooting
- 401: the credential is not attached to the node, or "Bearer " is missing before the key.
- 429: the loop submitted too many generations in a short window. Generate in smaller batches; see rate limits.
- The status never completes: check the Wait node really loops back, and that the GET uses the
generation_idfrom the Generate node.
Prefer chatting to building flows? Connect Claude, ChatGPT or Cursor through the MCP server instead.