Kling 3.0 · Motion Control
The version with knobs — orientation, shots, original audio
- image_url
- video_url
- video
- task id
Kling 3.0's motion transfer is the same idea as the 2.6 node - a driving clip's moves, expressions and gestures copied onto one photo of your character - with four extra decisions bolted on, and those decisions are why you'd pay the higher rate ($0.1008/s at 720p, $0.1344/s at 1080p versus 2.6's $0.069/$0.112). Motion control is the capability that gets a model noticed: when an open-weight release added it, the top reaction was literally "motion control like Kling." This is Kling's current take on it.
The inputs
- image_url - the character. One clear full- or half-body picture of the person,
IMAGE, JPEG or PNG. Front-on, evenly lit, whole body in frame if the motion involves the whole body. - video_url - the driving clip, a
VIDEOsocket, 3 to 30 seconds. The result runs exactly as long as this clip, which is also how the bill works out. - prompt - optional notes on the result: the setting, the look, anything the driving clip doesn't show. Leave it blank for a clean transfer.
- negative_prompt - what to keep out: objects, looks or motion you don't want. A real, functional field here.
- resolution -
720por1080p; the per-second rate on the node updates when you flip it. - keep_original_audio - on by default. Keeps the driving clip's own sound in the result, so a dance video keeps its music and a spoken performance keeps its voice. Turn it off if you're scoring the clip yourself and don't want two soundtracks fighting.
- character_orientation - which way the character faces.
videofollows the person in the driving clip;imagefollows the person in your photo. This is the important one: withimage, the driving clip may be at most 10 seconds. So the free-est source material is only available on thevideosetting, and the photo-faithful setting costs you clip length. - shot_type -
customizekeeps to your inputs,intelligentlets the model plan the shots itself. Start oncustomize; switch tointelligentwhen your driving clip is loose or you want the model to find a cut for you.
Outputs: video (VIDEO - Save Video or preview; the audio, if kept, is inside the file) and task id (STRING, the run's handle in the console).
Install
cd ComfyUI/custom_nodes
git clone https://github.com/spicyapi-ai/comfyui-spicyapi
Restart ComfyUI, open Settings > SpicyAPI, paste a key from spicyapi.ai/console/keys, restart once more so the node list loads from your account's catalogue. Manager users can search "SpicyAPI". On a server, set SPICY_API_KEY instead. No model downloads, no GPU, no dependencies - the node is an HTTP client and the rendering happens on SpicyAPI's machines.
Cost, since a variable-length input decides it
Both uploads are real: the photo (PNG, or JPEG if it's over the 10 MiB upload ceiling) and the driving clip (up to 90 MiB of media, so a 4K source needs re-exporting first). Then billing is per output second, and the output matches the driving clip - a 30-second clip at 1080p is about $4.
That's the trap this node sets for people: it's much more interesting to feed it a whole song performance and iterate than to trim the clip first. Trim first. Shorter driving clips render better as well - character identity holds tightly over a short energetic burst and starts slipping on longer ones, which is the standing limitation of every character-consistency approach, local or hosted.
Set Max cost per run in the SpicyAPI settings. Every job is quoted before submission and anything above your ceiling aborts uncharged, then the node prints what it really cost when it lands. Interrupting a run stops your wait, not the job: it keeps running on SpicyAPI, is charged if it succeeds, and the result sits in your console for up to 14 days. Seeds default to fixed, so re-queueing the same graph returns the first result rather than billing you twice - flip control after generate to randomize when you want a new take.
And if the node won't run at all: No SpicyAPI key is set means the settings step didn't stick, 40310 means verify your email, 40004 means that combination of options isn't served, and a model missing from the node search just needs a ComfyUI restart.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Optional notes on the result: the setting, the look, anything the driving clip does not show. | |
| negative_prompt | STRING | What to keep out of the result: objects, looks or motion you do not want. | |
| image_url | IMAGE | The character to animate: one clear, full or half-body picture of the person. | |
| video_url | VIDEO | Driving clip, 3 to 30 seconds: the moves, expressions and gestures to copy. The result is as long as this clip. | |
| resolution | COMBO | 720p | Output resolution. Higher tiers cost more per second. |
| keep_original_audio | BOOLEAN | true | Keep the driving clip's own sound in the result. |
| character_orientation | COMBO | video | Which way the character faces: video follows the person in the driving clip, image follows the person in the photo. With image the driving clip may be at most 10 seconds. |
| shot_type | COMBO | customize | How the shots are planned: customize keeps to your inputs, intelligent lets the model plan the shots itself. |
| 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. |