Kling 2.1 · Image to Video
The cheapest way to make a still move
- image_url
- last_image_url
- video
- task id
Kling is Kuaishou's closed video line - the one the community has been pointing at as "what made this clip?" for two years, and one of the models with no open weights at any VRAM. You can't download it, so if you want its motion you call it. Kling 2.1 is the oldest generation still sold in this pack, and that's the entire argument for it: at $0.035 per second for 720p, a five-second clip costs about eighteen cents. Nothing else in this pack animates a still that cheaply.
The workflow is the standard one: generate a still (locally or with a Nano Banana node), wire it in here, get a clip back, feed that into whatever you do with clips. This node does not create the frame - it moves it, and it holds the frame's aspect ratio, so you pick your shape upstream.
What you hand it and what you get
- image_url - an
IMAGEsocket. The opening frame; the clip starts from this picture. The node encodes it (PNG when it fits under the 10 MiB upload ceiling, high-quality JPEG when it doesn't) and uploads it for the run. Tooltip says JPEG or PNG only, and that's the honest constraint - an exotic format or a 16-bit TIFF will not survive the round trip. - prompt - describe what happens after the opening frame. Action and camera. Keep it short; this generation of Kling reads motion direction well and long narrative prompts poorly.
- negative_prompt - a short comma-separated list of what to avoid. This model does respond to it, unlike the newer nodes where the negative prompt is often doing very little.
- duration_seconds -
5or10. Billed per second, so ten seconds is exactly double. - resolution -
720p(standard tier, $0.035/s) or1080p(pro tier, $0.068/s). The price on the node updates as you flip it. - guidance_scale - 0 to 1, default
0.5. Read this one carefully: it is not CFG. Kling's guidance here is a how-literal dial, where higher sticks closer to your prompt and lower gives the model more room. 0.5 is a sane midpoint; drifting to 0.9 mostly buys you a stiffer clip. - last_image_url - optional, a second
IMAGE. A closing frame to end on, which turns the job into a first-frame/last-frame interpolation and is genuinely useful for match cuts. Per the model's own description, this is only on offer when you render at 1080p, so plan the shot knowing that.
Outputs are video - a real ComfyUI VIDEO, so wire Save Video or a preview node to it, not Save Image - and task id, a STRING you should keep visible for troubleshooting.
No audio. 2.1 produces silent clips. If a track came with it, you'd be in 2.5 Turbo or a 2.6 node with sound switched on.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/spicyapi-ai/comfyui-spicyapi
Restart ComfyUI. In Settings > SpicyAPI, paste a key from spicyapi.ai/console/keys - the panel shows your balance - then restart once more so the node list is rebuilt from your account's catalogue. ComfyUI Manager users can search "SpicyAPI" instead. Headless box: set SPICY_API_KEY. The pack pulls in no dependencies of its own; it uses what ComfyUI already ships.
Costs, and the traps around them
A video run is not instant and not free. The node quotes each job before submitting and refuses it if the quote is above your Max cost per run setting, then prints what it actually charged when the job lands. Set that ceiling before your first 10-second 1080p run, because that combination is $0.68 and it's easy to queue by accident.
Cancelling stops your wait, not the job. Interrupt a run and the task keeps going server-side, gets charged if it succeeds, and its result sits in your SpicyAPI console for up to 14 days. That's not a bug, it's how a hosted job works - but it means a cancel is a "stop watching," not a refund.
Model not in the node list? Restart. The list comes from your account's catalogue at startup, so anything added since the last boot only appears after one.
Errors worth knowing by heart: No SpicyAPI key is set (settings step skipped), 40310 (verify your email), 40004 (that exact option combination isn't served - change the field the message names). If you're behind a corporate proxy, the pack's error text about a proxy or firewall intercepting the request is real; HTTPS_PROXY is honoured, so point it somewhere working.
One last thing about the price: at 2.1's rates it's very easy to think in clips rather than dollars. Ten 5-second 720p takes is $1.75 - cheap enough to actually iterate on motion, which is the one thing this node is better at than the fancy tiers.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Describe what happens after the opening frame: the action, the camera. | |
| image_url | IMAGE | Opening frame. The clip starts from this image. JPEG or PNG only. | |
| resolution | COMBO | 720p | Output resolution. Higher tiers cost more per second. |
| duration_seconds | COMBO | 5 | Output length: 5 or 10 seconds. Billed per second. |
| negative_prompt | STRING | Things the clip should avoid, written as a short list. | |
| guidance_scale | FLOAT | 0.500–1 | How strictly the clip follows the prompt, from 0 to 1. Higher is more literal, lower gives the model more freedom. |
| seed | INT | 00–2147483647 | This model takes no seed, so the number is never sent. Changing it makes ComfyUI run the node again: set 'control after generate' to randomize for a new result on every run; every run is billed. |
| last_image_urlopt | IMAGE | Optional closing frame the clip should end on. JPEG or PNG only. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| task id | STRING | The SpicyAPI task id, for the console logs or support. |