Nodes/ComfyUI-KLingAI-OmniVideo/🎬 Kling Omni: Video Extend
ComfyUI Node

🎬 Kling Omni: Video Extend

Kling Omni video extend

By starsFriday·Created 9 months ago·Updated 9 months ago· 0
🎬 Kling Omni: Video Extend
  • video_frames
  • images
  • audio
  • fps
promptGenerate the next scene
modelkling-video-o1
seed9369432966339813000
input_fps24

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:

  1. Your video_frames batch is written to a temporary mp4 with imageio (libx264 codec) at whatever input_fps you set.
  2. That file is uploaded to your Aliyun OSS bucket via upload_file_to_oss, which returns a public URL.
  3. The URL is sent to Kling's /v1/videos/omni-video endpoint as a video reference with refer_type: "feature" (the source comment calls this the key difference from the pack's VideoEdit node, which uses "base") and keep_original_sound: "yes".
  4. 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.ini and your Kling account.
  • API rejects the clip - input videos must be ≤10s and each side within 720–2560px.
  • Jittery or oddly-timed output - input_fps doesn'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_LoadVideo if 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.

CategoryKlingAI

Inputs (5)

NameTypeDefaultDescription
video_framesIMAGE
promptSTRINGGenerate the next scene
modelCOMBOkling-video-o11 options: kling-video-o1
seedINT93694329663398130000–18446744073709550000
input_fpsoptFLOAT241–60

Outputs (3)

NameTypeDescription
imagesIMAGE
audioAUDIO
fpsFLOAT