Extend AI Video
Keep the Runway clip going past its last frame
- video
- url
- all_urls_json
- task_id
- raw_json
- credits_consumed
- credits_left
Video models generate in clips. Five seconds here, eight seconds there, and then you need the shot to keep going - the cat keeps dancing, the camera keeps pushing in, the character keeps talking. You can't ask for a longer clip, so you extend one: take the job you already finished and ask the same model to continue from where it stopped.
This is Runway's extend path via KIE, and the important thing to know before you touch it is that it doesn't take a video. It takes the task ID of a video that was already generated on Runway. Nothing local gets uploaded; you're naming a job that exists on the provider's side.
How it works
Unlike most nodes in this pack - which go through KIE's generic task endpoint - this one posts directly to /api/v1/runway/extend and then polls Runway's own record-detail endpoint until the state comes back success, or fails, or your timeout runs out. When it finishes, the returned clip is downloaded and handed back as a ComfyUI VIDEO object, which you can wire into Save Video or a video-combine node.
One wrinkle worth knowing: KIE's documentation marks a callback URL as required for extension requests. The pack ships callback_url empty by default and polls Runway's record-detail endpoint for the result instead. If you ever get a provider error complaining about callbacks, that field is the lever - put a webhook you already run there, otherwise leave it empty.
The inputs
taskId is the one that decides whether this works at all. It's the ID of a previous Runway generation - the pack's own generation nodes expose a task_id output for exactly this, so the clean pattern is to wire the generation node's task_id into this node rather than copy-pasting. It's a plain text field, though, so pasting works too.
prompt describes the continuation, not the whole video. "The cat continues dancing with more energy, spinning as the lights intensify" beats a fresh scene description - you're describing what happens next, and the more you contradict the original footage, the worse the seam looks.
quality is a string, and per its tooltip you type 720p or 1080p. There's no dropdown here, so if you fat-finger the value, expect a provider-side error rather than a silent fallback.
Two optional fields: waterMark and the housekeeping pair timeout_seconds / callback_url. On the watermark - the field ships pre-filled with kie.ai, and the tooltip says an empty string means no watermark while any other value gets burned into the bottom right. Clear it unless you want the ad.
Outputs
video is the clip you came for. url is the hosted file, all_urls_json collects every URL in the response, task_id identifies this extension job (useful if you're chaining several extensions back to back), raw_json is the raw provider payload, and credits_consumed / credits_left are floats reading out what the call cost and what's left in the account.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/felipederosilva/ComfyUI-KIE-Nodes-Next
Restart after cloning, or install it through ComfyUI Manager by searching "KIE.ai Nodes Next". Dependencies are four small Python packages - requests, Pillow, numpy, PyYAML - so there's no weight download and no CUDA drama. The key goes in once: Settings → KIE.ai Nodes Next → Connection. It's validated against KIE before being saved, is never written into workflow JSON, and on a headless server you can skip the UI entirely with KIE_API_KEY.
Common issues
- "Must be a valid task ID from a previously generated video" - you've pasted something that isn't a Runway job ID, or the job has aged out. Re-generate and take the ID from the node that produced it.
- You get a task-ID error straight away - you're on the wrong provider's ID. An extend node reads IDs only from jobs the same service generated.
- The seam is visible - that's the model, not the node. Prompt the continuation for a moving subject and, if you're chaining, extend the extension rather than starting a second extension from the original.
- A local-only build won't do this job at all. Runway has no open weights, so there's no local equivalent to fall back on - the same tradeoff that applies to any closed video model: per-call cost and your prompt leaving the machine, in exchange for a capability you can't download.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| taskId | STRING | ee603959-debb-48d1-98c4-a6d1c717eba6 | Unique identifier of the original video generation task. Must be a valid task ID from a previously generated video. |
| prompt | STRING | The cat continues dancing with more energy and excitement, spinning around with colorful light effects intensifying | Descriptive text that guides the continuation of the video. Explain what actions, movements, or developments should happen next. Be specific but maintain consistency with the original video content. |
| quality | STRING | 720p | Video resolution, optional values are 720p or 1080p. |
| waterMarkopt | STRING | kie.ai | Video watermark text content. An empty string indicates no watermark, while a non-empty string will display the specified text as a watermark in the bottom right corner of the 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 | — |