Wan 2.2 14b Animate: Replace Character (fal)
Swap your character into an existing video
- image
- video
- video_url
- frames_zip_url
This is the Replace Character half of Wan 2.2 Animate - Alibaba's character model and the most-used of the task-specific models built on the open Wan 2.2 base. Where the Move Character node animates your character with a borrowed motion, this one does a body-swap: it takes an existing video and replaces the person in it with your character, keeping the original scene, lighting, and action intact. Your character steps into the footage. It all runs on fal.ai.
Cloud call, per-clip billing, no local GPU. The 14B Animate model is a serious local job; fal handles it.
How it works
You provide a character image and a source video. The model detects the performer in the video and re-renders them as your character, preserving the surrounding scene and the motion they were already doing. The result is the same clip with a different person in it. That's the distinction from the Move Character sibling: Move keeps your character and borrows a motion; Replace keeps the scene and swaps the character. Choose Replace when the existing footage is what you want to preserve.
The inputs and outputs that matter
image(required, IMAGE) - the character you're swapping in.- the source video - as a
videosocket or aninput_video_urlstring. This is the footage whose person gets replaced. resolution-480p(default),580p, or720p.turbo(default on) - the fast path for iteration.
The tuning dials, fine 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), variations (1–10). Two safety toggles (enable_safety_checker, enable_output_safety_checker) and return_frames_zip for raw frames.
Outputs are video_url and frames_zip_url, both lists (one per variation), as fal URLs. Download with Fal Save Media from URL; the frames zip only fills if return_frames_zip is on.
How to install it
Ships in 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
Your character ended up in a blank scene instead of the video. You may have wanted Move Character, not Replace. Replace preserves the source footage and swaps the person; Move animates your character into a borrowed motion. Pick by what you want to keep.
The swap looks pasted-on or the edges are rough. Replacement is hardest when the person in the source video is partly occluded, moves fast, or leaves frame. A source clip with a clear, well-lit, unobstructed subject swaps far more cleanly. Raising resolution and video_quality sharpens the final render.
Identity drifts across the clip. Character consistency over a full clip is the genuinely hard part of this task. A stronger, clearer character reference helps; so does keeping the clip short.
frames_zip_url is empty. It only populates with return_frames_zip on.
Insufficient funds / credit lag. fal is pay-per-call and legit; top-ups have occasionally posted late. Wait for credits rather than repaying. fal errors print 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 | — |