Wan 2.2 14b Animate: Move Character (fal)
Puppeteer your character with a driving video
- image
- video
- video_url
- frames_zip_url
Wan 2.2 Animate is Alibaba's character-animation model - the most-used of the task-specific models built on the (Apache 2.0) Wan 2.2 base. It comes in two flavours, and this node is the Move Character one: you hand it a still of your character and a driving video, and your character performs the motion from that video. Dancing, gesturing, walking - the reference clip is the puppet strings, your image is the puppet. This runs on fal.ai, so you skip the hefty local Wan setup.
Cloud call, per-clip billing, no VRAM to find. Wan itself is open, but running the 14B Animate model locally is a real GPU commitment - fal takes that off your plate.
How it works
You give it a character image and a driving video. The model reads the motion out of the video and applies it to your character, generating a new clip of your character doing what the driving performer did. Move Character is the "animate my character into this motion" mode - as opposed to the Replace Character sibling node, which instead swaps your character into the driving video's existing scene. If you want your character performing a motion, this is the one; if you want to body-swap someone in existing footage, use Replace.
The inputs and outputs that matter
image(required, IMAGE) - your character. A clean, full-view reference works best.- the driving video - as a
videosocket or aninput_video_urlstring. This supplies the motion. resolution-480p(default),580p, or720p. Higher costs more and renders slower.turbo(default on) - the fast path. Leave it on for iteration; the quality knobs below matter more than this for the final.
The finer dials, mostly safe at defaults: num_inference_steps (20), guidance_scale (1), shift (8), video_quality (low/medium/high/maximum, default high), video_write_mode (balanced/fast/small), seed (default 24), and variations (1–10, generate several at once). There are two safety checkers (enable_safety_checker, enable_output_safety_checker) and a return_frames_zip toggle if you want the raw frames.
Outputs are video_url and frames_zip_url (both lists - one entry per variation). These are URLs on fal; download them with Fal Save Media from URL. The frames zip is only populated if you turned return_frames_zip on.
How to install it
From gokayfem's ComfyUI-fal-API pack. ComfyUI Manager: search ComfyUI-fal-API, install, restart. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/gokayfem/ComfyUI-fal-API.git
pip install -r ComfyUI-fal-API/requirements.txt
Add your fal key (copy config.ini.example → config.ini, paste from fal.ai/dashboard/keys, or export FAL_KEY=your_key), restart.
Common issues & troubleshooting
You wanted a body-swap, not a puppet. You picked the wrong mode. Move Character animates your character with the driving motion. To replace a person inside existing footage while keeping that footage's scene, use Wan2214b_animate_replace_character_fal.
The motion transfer is rough or limbs go wrong. Give it a cleaner driving video with a clearly visible full body, and a character image that shows the whole figure. Complex or occluded motion is where character animation breaks down. Bumping resolution and video_quality helps the final but won't fix a bad driving clip.
frames_zip_url is empty. That output only fills in when return_frames_zip is on.
Insufficient funds / credit lag. fal is pay-per-call and legit; top-ups have sometimes posted late. Wait for credits rather than repaying. fal's errors surface as text in ComfyUI.
Inputs (15)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| videoopt | VIDEO | — | |
| input_video_urlopt | STRING | — | |
| turboopt | BOOLEAN | true | — |
| resolutionopt | COMBO | 480p | 3 options: 480p, 580p, 720p |
| seedopt | INT | 240–2147483647 | — |
| num_inference_stepsopt | INT | 201–40 | — |
| guidance_scaleopt | FLOAT | 1.01–10 | — |
| shiftopt | INT | 81–10 | — |
| video_qualityopt | COMBO | high | 4 options: low, medium, high, maximum |
| video_write_modeopt | COMBO | balanced | 3 options: balanced, fast, small |
| enable_safety_checkeropt | BOOLEAN | true | — |
| enable_output_safety_checkeropt | BOOLEAN | false | — |
| return_frames_zipopt | BOOLEAN | false | — |
| variationsopt | INT | 11–10 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| video_url | STRING | — |
| frames_zip_url | STRING | — |