KLingAI Image to Video
Animate an image into a Kling video — with camera control
- image
- image_tail
- task_id
- task_status
- created_at
- updated_at
- seed
This is the most flexible node in the pack, and probably the one you'll actually use. Where the text2video node is prompt-in/video-out, KLingAI Image to Video takes an image you already like - generated in ComfyUI, or anywhere else - and animates it on Kling's servers. It also carries the widest model list in the pack, including the kling-v2-5-turbo models, plus full camera control. If you want the current-gen Kling models, this is where they live.
The mechanism is the same async dance as the rest of the pack: POST to https://api.klingai.com/v1/videos/image2video, get a task_id back, hand it to KLingAI Query Status, and let that poll until Kling returns a result URL. Your only real job is describing the motion.
Inputs that matter
- api_token (required) - the JWT from the API Key node, as always.
- image - feed a ComfyUI IMAGE tensor directly (say, from an upscaler or img2img node). It gets base64-encoded and uploaded in the request. Alternatively flip
image_typetoURLand drop a hosted image URL inimage_urlinstead. Either path works; a tensor is more convenient inside a workflow. - model_name - seven choices:
kling-v1,kling-v1-5,kling-v1-6,kling-v2-master,kling-v2-1,kling-v2-1-master, and the defaultkling-v2-5-turbo. Turbo is the fast/cheap one; the-mastervariants are the quality flagships. - positive_prompt / negative_prompt - describe the motion ("camera slowly pushes in, hair blowing in wind"). This is where most of the video quality comes from.
- duration -
5or10seconds. - mode -
stdorpro(better, pricier). - image_tail - optional last-frame IMAGE input. If Kling supports end-frame control on the model you picked, this lets you specify how the clip should end rather than letting it drift.
- use_camera_control - the interesting one. Flip this on and you get
camera_typeplus six camera axes:camera_horizontal,camera_vertical,camera_pan,camera_tilt,camera_roll,camera_zoom, each -10 to 10. Preset types likedown_back,forward_up,right_turn_forward,left_turn_forward,simplegive you canned moves; the sliders let you hand-author a shot. Kling's camera control is genuinely good - this is the feature that makes the node worth reaching for over plain i2v. - cfg_scale - 0 to 1, default 0.5.
- seed - local-only again; it gates when the node re-runs, not your generation.
The output
task_id, task_status, created_at, updated_at (STRING) and seed (INT) - identical shape to text2video. task_id into Query Status, url from that into the Video Downloader.
A realistic first workflow
API Key → (image you already have, via a Load Image node) → this node → Query Status → Video Downloader. Set image_type to Base64, leave model_name on kling-v2-5-turbo for your first run, write a prompt describing the motion you want, and queue. Expect the render to take a few minutes.
Where people get burned
- Feeding an image in more than one way. If you attach both an IMAGE tensor and a URL, the behavior is defined by
image_type- pick one lane and stick to it. - Camera control doing nothing. The camera inputs only apply when
use_camera_controlis on, and not every model honors every axis. When in doubt, use acamera_typepreset and keep the manual sliders at 0. - Model not found. Kling retires or renames models from time to time; a 4xx with "model not found"-ish text usually means your chosen
model_nameis stale. Step down a version. - Credits.
promode plus 10 seconds plus a-mastermodel is the most expensive combo in this pack. Budget accordingly - the KB's community price references hover around a dollar-plus per premium 5-second clip.
Inputs (22)
| Name | Type | Default | Description |
|---|---|---|---|
| api_token | STRING | — | |
| image_typeopt | COMBO | Base64 | 2 options: Base64, URL |
| imageopt | IMAGE | — | |
| image_urlopt | STRING | — | |
| model_nameopt | COMBO | kling-v2-5-turbo | 7 options: kling-v1, kling-v1-5, kling-v1-6, kling-v2-master, kling-v2-1, kling-v2-1-master, +1 |
| positive_promptopt | STRING | — | |
| negative_promptopt | STRING | — | |
| cfg_scaleopt | FLOAT | 0.50–1 | — |
| modeopt | COMBO | std | 2 options: std, pro |
| durationopt | COMBO | 5 | 2 options: 5, 10 |
| image_tailopt | IMAGE | — | |
| use_camera_controlopt | BOOLEAN | false | — |
| camera_typeopt | COMBO | simple | 5 options: simple, down_back, forward_up, right_turn_forward, left_turn_forward |
| camera_horizontalopt | FLOAT | 0.0-10–10 | — |
| camera_verticalopt | FLOAT | 0.0-10–10 | — |
| camera_panopt | FLOAT | 0.0-10–10 | — |
| camera_tiltopt | FLOAT | 0.0-10–10 | — |
| camera_rollopt | FLOAT | 0.0-10–10 | — |
| camera_zoomopt | FLOAT | 0.0-10–10 | — |
| external_task_idopt | STRING | — | |
| callback_urlopt | STRING | — | |
| seedopt | INT | -1-1–18446744073709550000 | — |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| task_id | STRING | — |
| task_status | STRING | — |
| created_at | STRING | — |
| updated_at | STRING | — |
| seed | INT | — |