Kling O3 Image-to-Video
Start frame, end frame, and sound
- image
- end_image
- client
- video_url
Kling is Kuaishou's closed, API-only video line - the poster child for "you can't run this locally." This node is how you use Kling O3, its flagship, from inside ComfyUI: you feed it a starting image and a sentence about what moves, and a cloud GPU does the rest. If you don't have a video card that can breathe life into 10 seconds of footage, or you just want the newest model without chasing a quantized local workflow, this is the point.
It's part of the ERPK Collection, a community monorepo that wraps the WaveSpeed AI API (plus OpenAI, Claude, Gemini, Grok). The official WaveSpeed ComfyUI nodes have a reputation for lagging behind the model lineup; ERPK is the refresh that actually tracks what WaveSpeed ships.
How it works
Pick a model (Kling O3, or Kling O3 Pro for the heavier tier), connect an image, write a prompt about motion, camera work, and action. The node uploads your frame to api.wavespeed.ai, then polls - 10-second interval, 15-minute timeout - until the clip is rendered. The output isn't a video file or a tensor; it's a video_url STRING. Wire that into the pack's Preview Anything node to preview and download.
Everything is billed per call, so treat it like a vending machine, not a local model.
The inputs that matter
Only a few actually need your attention:
prompt- describes motion, camera movement, and action. Blank prompts are rejected before you're charged, so you won't pay for a typo'd empty box.image- your starting frame as a ComfyUI IMAGE tensor (LoadImage → here). Preferred overimage_url, and takes precedence if both are connected. If you only have a URL,image_urlworks as the fallback.model- O3 standard or O3 Pro. Pro unlockselement_list(Kling Elements IDs for character/scene consistency) and is the tier wheredurationis 5 or 10 seconds; standard takes 3–15.end_image- an optional end frame for guided transitions, so the clip lands on a specific final shot instead of wherever the model wanders.sound- synchronized audio. Nice, but it raises the base cost, so it's a "do I actually need dialogue" decision.multi_prompt- a JSON array of scene-segmented prompts if you want the video to change scene mid-clip rather than follow one prompt.
The seed widget is a lie in the best way: the O3 API doesn't accept a seed, so the field exists for workflow compatibility. Leave it randomizing. The rest - client, shot_type (intelligent vs customize), end_image_url - you can safely ignore at first.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/eRepublik-Labs/comfyui-nodes-erpk.git erpk
cd erpk
pip install -r requirements.txt
# restart ComfyUI
Or just search erpk in ComfyUI Manager and install ERPK Custom Nodes. No model files to download - that's the whole point. You do need a WaveSpeed API key with credits: right-click the canvas > ERPK Settings (or Settings > ERPK > API Keys), and it's stored per-user, never in the workflow.
Common issues
- "Starting image is required" - you need either the
imagetensor orimage_url. One of them has to be connected. - Blank
video_url- the generation probably failed upstream (moderation or content filter on WaveSpeed's side). Check the WaveSpeed dashboard for the actual error; it's not your ComfyUI install. - It's expensive to iterate - every queue with a randomized seed is a fresh billed generation. Tune your prompt in the image, not the video.
element_listerrors on standard O3 - that input is Pro-only. If you get a JSON parse error there, it means you pasted something that isn't a[...]array.
One honest caveat: you're renting Kling's quality per clip, and the per-clip cost adds up fast if you're iterating. For volume, the 2.5 Turbo nodes in this pack are the budget path.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| model | COMBO | Kling O3 | Model variant: Kling O3 (standard) or Kling O3 Pro (adds element_list) |
| prompt | STRING | Text description of motion, camera movement, and action | |
| image_url | STRING | Starting image URL (use WaveSpeed Upload Image to produce one). Fallback when the IMAGE input is not connected. | |
| imageopt | IMAGE | Starting image as a ComfyUI IMAGE tensor. Preferred — takes precedence over `image_url` when connected. | |
| end_imageopt | IMAGE | Optional end-frame image as a ComfyUI IMAGE tensor for guided transitions. Preferred — takes precedence over `end_image_url` when connected. | |
| clientopt | WAVESPEED_AI_API_CLIENT | WaveSpeed API client (optional if API key is configured in Settings) | |
| durationopt | INT | 53–15 | Video duration in seconds. Std accepts 3-15; Pro accepts 5 or 10. |
| seedopt | INT | -1-1–2147483647 | Retained for workflow compatibility; the O3 API does not accept a seed parameter. |
| end_image_urlopt | STRING | End-frame image URL for guided transitions. Fallback when the end_image IMAGE input is not connected. | |
| soundopt | BOOLEAN | false | Enable synchronized audio generation (raises base cost) |
| shot_typeopt | COMBO | intelligent | Shot composition mode: 'intelligent' (auto) or 'customize' (manual) |
| multi_promptopt | STRING | JSON array of scene-segmented prompts guiding scene transitions | |
| element_listopt | STRING | Pro only: JSON array of Kling Elements IDs to lock for visual consistency |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video_url | STRING | — |