🎬 Kling Omni: Video Extend
Kling Omni video extend
- video_frames
- images
- audio
- fps
The video is great right up until its last frame, and then it just stops. KlingVideoExtend is the node that keeps it going: you feed in the frames of an existing clip and it asks Kling's kling-video-o1 Omni model to generate the next scene in the same style, with the same characters. It's the continuation mode of the Omni API, wrapped as a ComfyUI node.
Like its siblings in the ComfyUI-KLingAI-OmniVideo pack, this is a cloud call, not a local model - no weights, no VRAM, and every run costs money against your Kling API balance. What sets this node apart from the pack's image-to-video nodes is that it's the one where the OSS setup stops being background noise and becomes the actual mechanism.
How it works
The node's pipeline is worth understanding because it explains the whole pack's config requirements:
- Your
video_framesbatch is written to a temporary mp4 with imageio (libx264 codec) at whateverinput_fpsyou set. - That file is uploaded to your Aliyun OSS bucket via
upload_file_to_oss, which returns a public URL. - The URL is sent to Kling's
/v1/videos/omni-videoendpoint as a video reference withrefer_type: "feature"(the source comment calls this the key difference from the pack's VideoEdit node, which uses"base") andkeep_original_sound: "yes". - The node polls until the task succeeds or times out, then downloads the new segment, decodes it to a tensor, extracts its audio, and returns frames, audio, and fps.
So Kling's servers literally fetch your uploaded video from your bucket. If that bucket isn't publicly reachable, the whole thing fails before the model ever sees your clip.
The inputs that matter
Only a handful, and one of them is a trap:
video_frames(IMAGE) - required. A batch of frames from a video you loaded elsewhere in the graph (e.g. a VHS load node feeding its frame output here).prompt(multiline) - what the next scene should be. Defaults to "Generate the next scene", which is a decent starting point; being specific about the action pays off.model-kling-video-o1, the only choice right now.seed- set it to make the continuation reproducible.input_fps(FLOAT, optional) - default 24, range 1–60. This is the trap: it's the frame rate used to encode your temp mp4, and it should match your source video's actual fps. Feed the fps output of your video loader into it if you can.
Outputs and what they wire into
images(IMAGE) - the generated continuation. Route to a preview or a video-save node.audio(AUDIO) - the continuation's own soundtrack. Note this is new audio from Kling, not your original clip's audio.fps(FLOAT) - frame rate of the new segment; feed it into your saver's fps input.
Install and config
Same pack, same steps as the rest of the ComfyUI-KLingAI-OmniVideo nodes. ComfyUI Manager search "ComfyUI-KLingAI-OmniVideo", or:
cd ComfyUI/custom_nodes
git clone https://github.com/starsFriday/ComfyUI-KLingAI-OmniVideo.git
cd ComfyUI-KLingAI-OmniVideo
pip install -r requirements.txt
Restart, then create config.ini in the pack folder: Kling API keys plus Aliyun OSS credentials (oss2 is in the requirements because this node genuinely needs it). The OSS bucket must be public-read or fronted by a CDN. Environment variables (OSS_ACCESS_KEY_ID, etc.) work too.
Common issues
- Black output or download errors - the classic: your OSS bucket isn't actually public-read, so Kling couldn't pull your uploaded video. Fix the bucket.
- "Task failed" - keys or balance. Verify
config.iniand your Kling account. - API rejects the clip - input videos must be ≤10s and each side within 720–2560px.
- Jittery or oddly-timed output -
input_fpsdoesn't match your source video's real frame rate. Fix it and re-run. - Lost original audio - the returned audio is the generated segment's, not your input's. The pack README's own advice: combine with a node like
VHS_LoadVideoif you need the original sound preserved.
As with every node in this pack, watch the meter - continuation is fun, but each segment is a billed generation, and a "longer version of my video" session adds up fast.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| video_frames | IMAGE | — | |
| prompt | STRING | Generate the next scene | — |
| model | COMBO | kling-video-o1 | 1 options: kling-video-o1 |
| seed | INT | 93694329663398130000–18446744073709550000 | — |
| input_fpsopt | FLOAT | 241–60 | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| audio | AUDIO | — |
| fps | FLOAT | — |