Kling 2.1 Master · Image to Video
1080p motion at twenty-two cents a second, and you'd better mean it
- image_url
- video
- task id
Master is Kling's quality tier, and the price is the story: $0.216 per second, fixed. A five-second clip is $1.08. Ten seconds is $2.16. There is no resolution choice - Master is 1080p, that's what Master means - and no closing-frame input, so this is the version for when the cheap 2.1 tier's motion isn't holding up on the frame you care about and you're willing to pay roughly six times as much per second for it.
Is that worth it? Sometimes. What the Master tier buys you is detail that survives motion: faces that don't liquefy, hands that stay hands, fine texture that doesn't boil. On a wide landscape shot with slow camera movement, the standard tier at $0.035/s is the sane call and you'd struggle to tell the clips apart. On a close-up of a person talking with a hand gesture, that difference is very visible, and it's the difference between a usable shot and a reshoot.
Ten seconds of context on the price
The community's reaction when hosted video landed in ComfyUI was blunt and correct: "it's the real price of these renders." These models cost what they cost to run, and the cheap years of subsidised inference were always going to end. The counter-argument is that you keep your workflow, your nodes, your upscaler and your local pipeline, and only the generation step is metered. Both things are true. At Master's rate, though, you should be finishing the shot on cheap tiers and rendering it once - not exploring at $2 a click.
The inputs
- image_url - the opening frame, an
IMAGEsocket. JPEG or PNG. It's uploaded for the run (PNG under 10 MiB, JPEG above that), and the output aspect ratio follows your picture. - prompt - what happens after the frame: the action, then the camera. Describing camera movement explicitly is what makes these clips feel shot rather than warped.
- negative_prompt - a short list of what to keep out. Works here.
- duration_seconds -
5or10. Straight multiplication: $1.08 or $2.16. - guidance_scale - 0 to 1, default
0.5. Not CFG - higher follows your prompt more literally, lower gives the model latitude. Leave it at 0.5 unless you have a reason, and if a clip comes back stiff, that's usually the dial you over-turned.
Outputs: video (VIDEO - Save Video, or a preview/video-combine node; this is not an image tensor) and task id (STRING, the exact run handle for the console logs or support).
No audio track, and no last_image_url on this node - if you wanted to pin the ending, that's the non-Master 2.1 node at 1080p, or a later generation.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/spicyapi-ai/comfyui-spicyapi
Restart, then Settings > SpicyAPI → paste a key from spicyapi.ai/console/keys → restart once more so the node list loads from your account. Manager users: search "SpicyAPI". Headless: SPICY_API_KEY. No downloads, no GPU, no extra Python packages.
Guardrails you should set before you press Run
Max cost per run. Put a number in it. This is the node that makes that setting earn its keep - the gap between "queue it again, it's only a few cents" thinking and a $0.216/s meter is exactly where people burn twenty dollars in an evening. The node quotes every job and aborts anything above your ceiling before charging.
Turn seeds to randomize only when you want a new sample. Default control is fixed, so re-queueing the same graph returns the first result rather than a second bill. Every run is billed, including re-rolls.
Cancelling doesn't cancel the job. A cancelled task keeps running on SpicyAPI, is charged if it succeeds, and its result is in your console up to 14 days. Same for the standard failures: 40310 is an unverified email, 40004 means the named option combination isn't served, and a message mentioning a proxy or firewall means your HTTPS_PROXY isn't pointing anywhere useful.
And keep the task id wired somewhere. It's the only handle that identifies your exact run when something comes back wrong.
Inputs (6)
| 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. | |
| 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. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| task id | STRING | The SpicyAPI task id, for the console logs or support. |