WanAnimate2ToVideo
Steal the motion from a driving video and put it on your character
- positive
- negative
- vae
- reference_image
- pose_video
- clip_vision_output
- positive_pose
- clip_vision_output_pose
- continue_motion
- positive
- negative
- latent
- trim_latent
- trim_image
- video_frame_offset
This is the heart of Wan Animate 2: character animation from a reference image plus a driving video. Give it a picture of your character, hand it a video of someone moving, and it generates your character doing that performance - facial animation, body motion, hand gestures. Alibaba's motion-transfer model, wired straight into ComfyUI core in August 2026, and the kind of thing that used to require a separate pose-conversion pipeline.
How it works
It's a conditioning builder, not a generator. The reference image gets VAE-encoded into a reference latent - that's the character, the thing to preserve. The driving video gets VAE-encoded into the pose branch. Both are concatenated along the time axis with a mask that marks "known" vs "to-generate" frames, and the whole package is stapled onto your positive/negative conditioning. A CLIP-vision pass on the reference anchors identity; the pose branch feeds the model's attention on every step. Notably, the driving video goes in raw - no stick-figure or skeleton preprocessing in this node, the model reads motion straight from the frames.
The pose branch runs a single pass per sampling step, outside the CFG loop (it never sees the negative prompt). It's still recomputed every step - which is exactly why the sibling WanAnimate2Cache node can roughly halve your render by memoizing it. Use both.
Inputs that matter
- reference_image - the character to animate. Omit it and you get a black placeholder; don't omit it.
- pose_video - the motion source.
- length - frames to generate (default 81).
- pose_strength - how hard the motion is enforced. 1.0 is the trained behavior; lower loosens adherence, higher amplifies it. 0.0 mutes it without fully removing it.
- reference_image_strength - identity vs drift. Below 1.0 lets the prompt restyle the character; above 1.0 tightens it against drift.
- pose_start_percent / pose_end_percent - a window for the pose influence. Motion is mostly established early, so ending at ~0.7 frees the model to add fine detail while keeping the choreography - and outside the window the pose branch is skipped entirely, which also speeds those steps up.
- positive_pose - a separate prompt for the pose branch describing the motion rather than the character.
- continue_motion / video_frame_offset - the extension loop, below.
The extension loop (the signature move)
The outputs include three ints that look like noise until you're generating longer than one context:
- trim_latent - latent frames to cut before decoding (the reference frame is part of the latent; you don't want it in the video).
- trim_image - overlapping image frames to drop when extending.
- video_frame_offset - where to seek into the pose video next.
The pattern: run once, trim the latent, feed the tail back into continue_motion, feed video_frame_offset into the next node's offset, repeat. The node is built for chaining, and it tells you exactly what to do at each step.
Gotchas
- Wire the CLIP first. Positive/negative conditioning come from a CLIPTextEncode on the Wan Animate 2 CLIP (model on HF as
Wan-AI/Wan2.2-Animate-2-14B). This node has no MODEL input - the model flows to the sampler separately. - Pose video shorter than length → the last frame is held to fill, which can freeze motion at the tail. Match your lengths.
- video_frame_offset past the end of the pose video → hard error, "nothing left to read".
- It's
is_experimental, and the naming shuffle means older guides call the previous model "Wan Animate 2.2". If a workflow saysAnimate-14Bwith face/pose/background streams, that's the older v1 node - different node, different wiring.
If you've watched a character video where the face stays frozen while the body moves, this is the fix: real motion, transferred, with dials to tune how much of it you keep.
Inputs (18)
| Name | Type | Default | Description |
|---|---|---|---|
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| vae | VAE | — | |
| width | INT | 83216–16384 | Output video width in pixels. |
| height | INT | 48016–16384 | Output video height in pixels. |
| length | INT | 811–16384 | Number of frames to generate. |
| batch_size | INT | 11–4096 | Number of videos to generate simultaneously. |
| video_frame_offset | INT | 00–16384 | Frames to seek into the pose video. Connect to the video_frame_offset output of the previous node when extending. |
| pose_strength | FLOAT | 1.000–10 | Scales the pose video's influence on the motion. 1.0 is the trained behavior; below weakens adherence, above amplifies. 0.0 mutes it but does not fully remove it. |
| pose_start_percent | FLOAT | 0.000–1 | Sampling percent at which the pose influence starts. Outside the window the pose branch is skipped entirely, which also speeds those steps up. |
| pose_end_percent | FLOAT | 1.000–1 | Sampling percent at which the pose influence ends. Motion is mostly established early, so e.g. 0.7 can loosen fine detail while keeping the choreography. |
| reference_image_strength | FLOAT | 1.000–10 | Scales how strongly generated frames attend to the reference image's latent frame. Below 1.0 loosens identity/appearance adherence (e.g. to let the prompt restyle), above tightens it against drift. |
| reference_imageopt | IMAGE | The character to animate. | |
| pose_videoopt | IMAGE | The video whose motion is transferred to the reference character. | |
| clip_vision_outputopt | CLIP_VISION_OUTPUT | CLIP vision of the reference image. | |
| positive_poseopt | CONDITIONING | Prompt for the pose-video branch, describing the motion rather than the character. Defaults to positive. Used for both the cond and uncond passes. | |
| clip_vision_output_poseopt | CLIP_VISION_OUTPUT | CLIP vision of the pose video's first frame. Defaults to clip_vision_output. | |
| continue_motionopt | IMAGE | Previous motion sequence to continue from for temporal consistency. |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |
| latent | LATENT | — |
| trim_latent | INT | Number of latent frames that should be trimmed before decoding. |
| trim_image | INT | Number of overlapping image frames when extending a video. |
| video_frame_offset | INT | Frames to seek into the pose video. |