Extend Veo3.1 Video · quality
The tier you want for shots that end up in the edit
- video
- url
- all_urls_json
- task_id
- raw_json
- credits_consumed
- credits_left
Veo gives you eight seconds at a time. When the shot needs more and the shot matters, you extend at the quality tier: the most expensive of the three Extend nodes, and the only one I'd use on a clip that's actually going into a finished edit. KIE bills each extension at the tier you selected, so the price difference is real - but so is the visible step between a fast or lite chunk and a quality one if you mix them in the same scene.
Think of the three Extend nodes as a pricing ladder, not a quality mystery: same operation, same fields, one word different under the hood.
What it actually does
The node takes the task_id of an existing Veo3.1 generation plus a continuation prompt, submits a KIE job at the quality tier, polls the task until it reports success, downloads the result and returns it as a ComfyUI VIDEO. The continuation is generated from your clip, not appended to stored frames - so the model is extrapolating forward, and long chains drift.
The workflow pattern is always the same shape:
Generate Veo3.1 Video ──video──► Preview / Save Video
└──task_id──► Extend Veo3.1 Video · quality ──video──► Save Video
└──task_id──► (another Extend, if you must)
Keep the Generate node in the graph. It's what produces the ID the Extend node needs, and if you delete it the extension has nothing to continue from.
Inputs, and the one that will catch you
- task_id - required, and it must be a real ID returned by the video generation API. The widget's default is a documentation placeholder; drive it from the generate node's output.
- prompt - required. Describe motion, not the scene: what the subject does next, how the camera moves. Re-describing the world tends to reset the framing.
- seeds - plural, 10000–99999. Default 12345. Same seed plus same prompt gives you similar motion, not a lock.
- watermark - defaults to
MyBrand. Clear the field. A non-empty value puts that text on your video, permanently. - timeout_seconds - 1200 by default. Quality-tier jobs queue longer than the other tiers; if you get a timeout at the default, raise it rather than re-submitting and paying twice.
- callback_url - empty for ComfyUI.
Outputs: video, url, all_urls_json, task_id, raw_json, credits_consumed, credits_left. Feed the new task_id into another Extend node for a third chunk, and wire video into KIE • Preview Video or KIE • Save Video - an unwired output means the node never executes at all.
Installing
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
Manager users can search "KIE.ai Nodes Next" instead. Dependencies are requests, Pillow, numpy, PyYAML - nothing video-related is installed locally, because nothing video-related runs locally. Your key goes in Settings → KIE.ai Nodes Next → Connection once; the pack tests it against KIE before overwriting a saved key and keeps it out of workflow JSON entirely.
Cost and failure, plainly
Every extension is a separate paid job. Two quality extensions cost more than the original generation in most cases, which is why the planning advice matters more at this tier than at the others: storyboard the beats, render the shots you need, and extend only where a single eight-second clip genuinely can't hold the action.
Stale or foreign task IDs fail at the provider. So does extending a clip that wasn't generated through KIE - the field wants a KIE task ID, not a URL, not an upload. And if a job times out on your side after the provider accepted it, the credits may still be gone; the pack's local task journal keeps recent IDs so you can check state rather than blindly resubmitting.
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 | — |