Nodes/KIE.ai Nodes Next/Wan - Animate Move
ComfyUI Node

Wan - Animate Move

Borrow the motion from a clip, keep your own character

By felipederosilva·Created 2 months ago·Updated 13 days ago· 4
Wan - Animate Move
  • video_url
  • image_url
  • video
  • url
  • all_urls_json
  • task_id
  • raw_json
  • credits_consumed
  • credits_left
◄resolution720p►
◄nsfw_checkerfalse►
◄timeout_seconds1200►
◄callback_url►

This is motion transfer, the thing that used to mean DWPose skeleton extraction, driving videos, and a mask pipeline before you got anything. Wan Animate is Alibaba's first-party take on it - one of the task-specific Apache 2.0 models that still ships open even though the numbered Wan base is frozen at 2.2 - and on KIE it's a hosted endpoint with a two-socket ComfyUI wrapper.

The pitch, in one line: give it a video and a picture of your character, and it puts your character through that performance. That's it. Reels, dance clips, lip-sync-adjacent stuff, replacing a reference actor in a take you already shot.

How it works

Two required inputs, video_url (VIDEO) and image_url (IMAGE), and no prompt field at all - the motion is the instruction. The node converts your video to a temp MP4, uploads it and the image to KIE, then submits to /api/v1/jobs/createTask with the marketplace model wan/2-2-animate-move, polls /api/v1/jobs/recordInfo until the task completes, and downloads the result into ComfyUI/output/KIE-Results/videos. You get a native VIDEO back.

Worth knowing what the local version of this is, because it shapes expectations: Wan Animate and the community's later SCAIL models disagree about how to do this. SCAIL-2's whole argument was dropping the stick-figure intermediate, because the depth and contact information lost in pose extraction is exactly what makes a transferred performance feel grounded. Animate Move is on the older side of that line - simple to use, sometimes stiffer than a 2026 reference-model workflow.

Inputs that matter

  • video_url - the driving clip. Framing matters more than resolution; a clear upper body beats a wide shot.
  • image_url - the character to move. Needs to be a good, well-lit reference of the person, ideally with a similar aspect ratio to the driving video.
  • resolution - 480p (default), 580p, or 720p. Start at 480p.

Then the pair you'll see on every node in this pack: nsfw_checker, which defaults to off, and timeout_seconds at 1200, plus callback_url which wants to stay empty in ComfyUI. There's no seed - you can't reproduce a take by number, so keep the outputs you like.

Outputs

video is the deliverable. Alongside it: url (the hosted file), all_urls_json, task_id for tracking, raw_json, and credits_consumed / credits_left, with a credits receipt printed on the node after the run. Because there's no seed and these jobs cost real money, the task_id socket is worth wiring to a text display if you're running batches - a batch you can't retrace is a batch you'll re-pay for.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/felipederosilva/ComfyUI-KIE-Nodes-Next
cd ComfyUI-KIE-Nodes-Next && pip install -r requirements.txt

Restart ComfyUI. No model files, no GPU requirement beyond what ComfyUI itself needs - the weights are KIE's. The node tree is built from KIE's live API catalog at startup, so individual model nodes appear under folders like KIE Next / Video / Wan rather than one catch-all API node.

Key setup is one-time for the whole pack: Settings → KIE.ai Nodes Next → Connection → Paste / replace KIE.ai API key. It's validated against KIE before it overwrites anything, then you get a masked fingerprint and a ✅ CONNECTED. KIE_API_KEY env var overrides it for server installs. KIE sells credits à la carte with no subscription.

Common issues

"No complete upper body detected in the video." KIE rejects clips where the subject isn't clearly visible. Tighten the crop on the driving clip - this is a validation failure, not a bad model run, and you won't be charged for finishing a generation that never started.

The face drifts or the identity slides. Motion transfer isn't identity lock. If the face is the point, run the other direction: generate your character consistently (or train a LoRA) and only then animate.

Body proportions look wrong compared to the driving clip. Known complaint in this family - transfer models tend to stretch the subject toward the source's proportions. Try a reference image whose build is closer to the driving performer.

Nothing renders after a successful run. Add a video preview or save node; this node returns a VIDEO and isn't an output node itself.

Update ComfyUI if you get a comfy_api.latest error - the native video object depends on a current build.

CategoryKIE Next/Video/Wan

Inputs (6)

NameTypeDefaultDescription
video_urlVIDEOURL of the input video. (File URL after upload, not file content; Accepted types: video/mp4, video/quicktime, video/x-matroska; Max size: 100.0MB)
image_urlIMAGEURL of the input image. (File URL after upload, not file content; Accepted types: image/jpeg, image/png, image/webp; Max size: 5.0MB)
resolutionoptCOMBO720pResolution of the generated video (720p).
nsfw_checkeroptBOOLEANfalseDefaults to false. When false, no additional content filtering is applied and results are returned directly by the model.
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—