Extend Veo3.1 Video · fast
Keep the same shot running for another chunk
- video
- url
- all_urls_json
- task_id
- raw_json
- credits_consumed
- credits_left
Veo clips come in eight-second slices, which is fine until the shot needs to breathe. The Extend node is how you buy more time: it takes the task ID of a video you already generated and continues it, with a prompt describing what happens next. This is the fast tier of that operation - the middle price, the one you'll use most.
The whole thing only makes sense as a pair, so understand the chain before you wire it: Generate Veo3.1 Video hands you a task_id output. Extend Veo3.1 Video · fast takes that ID, adds a continuation prompt, and returns a new clip that picks up where the last one stopped. You can extend repeatedly - which is how people get 30-plus-second Veo sequences out of a model that renders eight at a time - and each extension is its own paid job.
How it works
Under the hood it's a KIE Market call: the node submits {"task_id": ..., "prompt": ..., "model": "fast"} shaped for the extend endpoint and polls the job until it reports success, then downloads the result and wraps it as a native ComfyUI VIDEO. The tier is baked into the node (fast), which is why there are three Extend nodes in the Veo3.1 folder rather than one with a dropdown. KIE bills each extension at the tier you picked.
The continuation is a new generation seeded from the previous clip, not a trim-and-append of stored frames. Continuity is good, not perfect - long chains drift, and the drift compounds. Two extensions usually look seamless; six usually don't.
The inputs
- task_id - required, and it must be a task ID the video generation API actually returned. It defaults to a placeholder string from the docs; wire the
task_idoutput from your Generate node here instead of typing anything. - prompt - what happens next. This is a motion prompt, not a re-description: "the dog keeps running, hurdles a low fence, camera tracks left". Re-describe the whole scene and you'll often get a soft reset of the framing.
- seeds - note the plural. Range 10000–99999, default 12345. Same seed plus same prompt trends toward similar motion; it's a nudge, not a lock.
- watermark - and this is the trap. It defaults to the literal string
MyBrand, and if it's non-empty you get it burned into your video. Clear the field unless you actually want a watermark on your clip. - timeout_seconds - 1200 by default; the extend call queues like any other render, so raise it before you assume it hung.
- callback_url - leave empty. It's for server-side workflows, not ComfyUI.
Outputs: video, url, all_urls_json, task_id (the new one - chain this into the next extension), raw_json, credits_consumed, credits_left. Wire video into KIE • Preview Video or KIE • Save Video; the node isn't a terminal node, so an unwired video output means it never executes.
Install and key
cd ComfyUI/custom_nodes
git clone https://github.com/felipederosilva/ComfyUI-KIE-Nodes-Next
cd ComfyUI-KIE-Nodes-Next && pip install -r requirements.txt
# restart ComfyUI
Or Manager → search "KIE.ai Nodes Next". Requirements are requests, Pillow, numpy, PyYAML; no weights, no VRAM, nothing to download. API key goes in once at Settings → KIE.ai Nodes Next → Connection - validated before saving, stored outside the workflow, masked to a fingerprint in the UI.
Where people get burned
Using an old task ID is the top one. Extensions are tied to a generation that still exists on KIE's side; IDs from a workflow you archived last month may simply not resolve, and the failure arrives as a provider error, not a friendly one.
Second: extending a clip you didn't generate through KIE. The field wants a KIE task ID, not a URL and not a local file. If you have a video you love from elsewhere, you can't extend it here - that's a different operation.
Third: cost discipline. Every extension is another full-price job, and stacking four of them to reach an arbitrary length costs more than shooting the sequence as two planned 8-second shots and cutting them together. Plan the beats first, then decide whether you need extension at all. The 4K-capable tiers aren't the place to discover that.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| task_id | STRING | veo_task_abcdef123456 | The task ID of the original video generation. Must be a valid task ID returned by the video generation API. |
| prompt | STRING | The dog continues running through the park, jumping over obstacles and playing with other dogs | A text prompt describing the content of the extended video. It should detail how you want the video to be extended, including actions, scene changes, styles, etc. |
| seedsopt | INT | 1234510000–99999 | A random seed parameter that controls the randomness of the generated content. Range: 10000-99999. The same seed will generate similar video content, while different seeds will generate different video content. If not specified, the system will automatically assign a random seed. |
| watermarkopt | STRING | MyBrand | Watermark text (optional). If provided, a watermark will be added to the generated video. |
| timeout_secondsopt | INT | 120030–7200 | — |
| callback_urlopt | STRING | Optional KIE callback URL. Leave empty for normal ComfyUI use. |
Outputs (7)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| url | STRING | — |
| all_urls_json | STRING | — |
| task_id | STRING | — |
| raw_json | STRING | — |
| credits_consumed | FLOAT | — |
| credits_left | FLOAT | — |