Nodes/KIE.ai Nodes Next/Kling-3.0 motion-control
ComfyUI Node

Kling-3.0 motion-control

Make the reference video do the dancing, your image be the character

By felipederosilva·Created about a month ago·Updated a day ago· 3
Kling-3.0 motion-control
  • input_urls
  • video_1
  • video_2
  • video_3
  • video
  • url
  • all_urls_json
  • task_id
  • raw_json
  • credits_consumed
  • credits_left
◄promptThe cartoon character is dancing.►
◄mode720p►
◄character_orientationimage►
◄background_sourceinput_video►
◄timeout_seconds1200►
◄callback_url►

The short version

You give it a still image of a character and a short video of somebody moving. It returns a video of your character performing that motion, in the reference clip's framing and background. That's motion transfer, and Kling's version of it is the reason people were willing to put up with an API round trip - this is the one job local video models were still visibly worse at through 2026.

The node is KIE_Next_kling_3_0_motion_control_209f54b3, in ComfyUI-KIE-Nodes-Next, under KIE Next / Video / Kling. It calls KIE.ai's kling-3.0/motion-control endpoint. Kling is Kuaishou's closed model - no weights, so API or nothing. And this is KIE, not Comfy's official Partner Nodes: separate account, separate credits, key pasted once into ComfyUI's settings.

How it works

Two uploads, then a wait. The image goes in as a normal ComfyUI IMAGE, gets PNG-encoded and pushed to KIE's file endpoint; the reference video is materialized to an MP4 and uploaded the same way. The node then POSTs the job and polls until success, downloads the result into output/KIE-Results/videos/, and hands back a native VIDEO object. The URL plumbing is genuinely hidden - you never paste a URL for the inputs.

Two hard limits worth knowing before you film anything: the source image has to clearly show head, shoulders and torso, and the reference video needs to be roughly 3–30 seconds of a person whose motion is actually legible. A jittery 8-second handheld clip of a crowd is not going to transfer into anything nice.

The inputs

  • input_urls (IMAGE, required) - the character. Yes, it's plural in the KIE docs; in this node it's one image socket.
  • video_1 (VIDEO, optional) - the motion reference. There are also video_2 and video_3 sockets because the underlying field is an array; for this endpoint you only need the first.
  • prompt - optional here, up to 2500 characters. It's a nudge, not a script. Use it to say what the motion is if the clip is ambiguous, or to describe what should stay put.
  • mode - quality tier. And here's a real wart: the doc text says send std for 720p or pro for 1080p, but the field is a plain string and the shipped default is 720p, because that's what KIE's own example payload contains. If the job comes back rejected on mode, try std / pro before you start blaming the pack.
  • character_orientation - image or video. The tooltip recommends video (that's what preserves the reference clip's head turns best), but the widget defaults to image, again following KIE's example body. Worth flipping deliberately on your first run.
  • background_source - input_video keeps the reference clip's background; input_image uses yours.
  • timeout_seconds / callback_url - leave both alone. 1200 seconds is plenty; the callback URL is for server setups.

Outputs

video is what you wire onward. url is the KIE-hosted link, all_urls_json the raw list, task_id for support threads, raw_json for the actual failure reason when a job dies, and credits_consumed / credits_left for the bill - both are also printed on the node after the run. credits_left shows -1 if KIE's balance endpoint is briefly unavailable, which does not mean your generation failed.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/felipederosilva/ComfyUI-KIE-Nodes-Next

Restart, then Settings → KIE.ai Nodes Next → Connection and paste your KIE key. It's validated before saving, stored outside your workflow, and shown back to you as a masked fingerprint with a ✅ CONNECTED status. KIE_API_KEY in the environment still works for headless installs and wins over the saved key. Requirements are light - requests, Pillow, numpy, PyYAML. Manager install works too if the pack is listed; the repo also ships a ZIP and a one-click Windows installer in dist/.

Where people get burned

  • Node missing from the menu. The pack builds its model nodes from KIE's documentation index at startup, then re-syncs at most once a day. Until that sync lands you only have the bootstrap models. Give it a restart and a minute.
  • "Your ComfyUI build does not expose comfy_api.latest..." - comes up on older ComfyUI installs when the pack tries to wrap the downloaded MP4 as a VIDEO. Update ComfyUI. Same story if the input side produces an empty file before upload.
  • Sticker shock. These are metered calls and motion control is a premium endpoint. The credit receipt on the node after each run is the honest answer to "can I afford to iterate on this", and it's why you keep the prompt short and the reference clip tight instead of doing twenty-variation sweeps.
  • Guardrails. Every prompt and every uploaded face goes to KIE and then to Kuaishou's model, which applies its own moderation and its own rules about real people. Local workflows don't have that problem, and this node does. If that matters for your use case, the whole API branch of the graph is the wrong branch.
CategoryKIE Next/Video/Kling

Inputs (10)

NameTypeDefaultDescription
promptSTRINGThe cartoon character is dancing.(Optional) Text prompt words, used to guide the generation of animation content. Can be empty or 0 - 2500 characters long.
input_urlsIMAGE—
video_1optVIDEO—
video_2optVIDEO—
video_3optVIDEO—
modeoptSTRING720p(Optional) Video Quality Mode. std: Standard Mode (720p). pro: Professional Mode (1080p)
character_orientationoptSTRINGimage(Optional) Reference source for character orientation. video: Refer to video (recommended); image: Refer to image. Default value: video
background_sourceoptSTRINGinput_video(Optional) Background source. input_video: Use video background; input_image: Use image background. Default value: input_video
timeout_secondsoptINT120030–7200—
callback_urloptSTRINGOptional KIE callback URL. Leave empty for normal ComfyUI use.

Outputs (7)

NameTypeDescription
videoVIDEO—
urlSTRING—
all_urls_jsonSTRING—
task_idSTRING—
raw_jsonSTRING—
credits_consumedFLOAT—
credits_leftFLOAT—