WanAnimateToVideo
Turn a still character into an animated Wan video
- positive
- negative
- vae
- clip_vision_output
- reference_image
- face_video
- pose_video
- background_video
- character_mask
- continue_motion
- positive
- negative
- latent
- trim_latent
- trim_image
- video_frame_offset
This is the node at the heart of every Wan Animate workflow, and Wan Animate is where character animation actually works in ComfyUI. Feed it a still of your character plus a pose video (or a reference image), and it builds the positive/negative conditioning and the latent that the KSampler will denoise. It's the dedicated prep node for Wan2.2-Animate-14B, Alibaba's task model for character animation and replacement - the same one the SCAIL family was built to beat.
The name is a little misleading, honestly. The node doesn't animate anything itself. It packs every input you give it into conditioning bundles and a noise target, and the sampler + checkpoint do the moving. Everything before it (CLIP text encode, the Wan VAE, loading the Animate checkpoint) is standard; this node is the glue.
What goes in
You'll set a handful of these and ignore the rest:
positive/negative- your text conditioning from the Wan text-encode node.vae- the Wan VAE. Required.width/height/length- output frame size and count. Defaults are 832×480×77.reference_image- the still of your character. If you leave it out, the node substitutes a black frame, which is a trap: the output will look like a broken first frame.pose_video- the motion driver. This is the magic one: the node VAE-encodes the pose video and stuffs the latent into the conditioning aspose_video_latent, so the character follows the motion.face_video- optional facial-expression driver; it gets resized to 512×512 and normalized to [-1, 1].character_mask/background_video- for compositing and selective generation.video_frame_offset- the chunking knob. The tooltip says it best: seek into your input videos so you can generate longer clips piece by piece, connecting the output of one node to the next.continue_motion+continue_motion_max_frames- continue an existing clip's motion instead of starting fresh.
What comes out
Four outputs, and two of them are easy to trip over:
positive/negative- the augmented conditioning, now carrying the pose latent, face pixels, and reference image. These go straight into the KSampler.latent- the noise target to sample. Also into the KSampler.trim_latent/trim_image- how many frames at the start of the latent/image correspond to the reference frames, not real motion. Decode the raw output and you'll see a frozen lead-in of the reference image. Respect the trims when you decode.video_frame_offset- the updated offset for the next chunk.
A note on experimental status: the node is marked experimental in the source, so expect the odd sharp edge. The big one people hit is forgetting that latent includes the reference frames - trim before you save, or every clip starts with a stuck frame. And keep length and your pose video's frame count in the same ballpark; mismatches are the usual cause of "it animated for two seconds then died."
The checkpoint is loaded like any Wan model, and the whole chain ships with ComfyUI core - no install. If you're new to video, start with the official Animate example workflow and change one input at a time.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| vae | VAE | — | |
| width | INT | 83216–16384 | — |
| height | INT | 48016–16384 | — |
| length | INT | 771–16384 | — |
| batch_size | INT | 11–4096 | — |
| continue_motion_max_frames | INT | 51–16384 | — |
| video_frame_offset | INT | 00–16384 | The amount of frames to seek in all the input videos. Used for generating longer videos by chunk. Connect to the video_frame_offset output of the previous node for extending a video. |
| clip_vision_outputopt | CLIP_VISION_OUTPUT | — | |
| reference_imageopt | IMAGE | — | |
| face_videoopt | IMAGE | — | |
| pose_videoopt | IMAGE | — | |
| background_videoopt | IMAGE | — | |
| character_maskopt | MASK | — | |
| continue_motionopt | IMAGE | — |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |
| latent | LATENT | — |
| trim_latent | INT | — |
| trim_image | INT | — |
| video_frame_offset | INT | — |