Nodes/ComfyUI-WanAnimate-Enhancer/Wan Animate To Video Enhanced
ComfyUI Node

Wan Animate To Video Enhanced

The Wan Animate node with dials — motion, expression, pose and background you can actually steer

By wallen0322·Created 11 months ago·Updated 11 months ago· 45
Wan Animate To Video Enhanced
  • 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
width832
height480
length77
batch_size1
continue_motion_max_frames5
video_frame_offset0
motion_strength1.00
expression_strength1.00
pose_adherence1.00
background_blend1.00
enabletrue

If you've ever run ComfyUI's built-in WanAnimateToVideo, you know the frustration: you feed it a character reference, a pose video and a face crop, and you get whatever the model decides to do with them. There's no dial for "move more" or "settle down." This node is that dial. It's a drop-in reimplementation of the stock Wan Animate node with four strength controls - motion_strength, expression_strength, pose_adherence, and background_blend - tacked onto the exact same inputs and outputs, so it slots into any workflow that already uses the core node.

Why you'd reach for it: Wan 2.2 Animate is Alibaba's character-animation model - the thing behind the viral "Wan-Animate is wild" showcases, where a character inherits a dancing person's motion. Its weakness is control. The stock node is binary - the character either follows the driving video or drifts off it. This pack gives you a way to push motion toward exaggerated, pull expressions back to subtle, or loosen the pose lock when the transfer looks like the character is being puppeted too hard.

How it actually works

Under the hood it's a re-write of the core node's plumbing, not a new model. It VAE-encodes your reference_image into a concat_latent_image plus a concat_mask - the motion/reference channel that Wan 2.2 Animate conditions on - and stuffs the whole bundle into your conditioning via conditioning_set_values. The optional inputs get the same treatment: pose_video is encoded to pose latents, face_video pixels are scaled by expression_strength, and background_video gets mixed toward a neutral gray by background_blend before it's spliced into the image stack. That's the "data layer" the README talks about - expression, pose and background are real, applied before sampling.

Here's the trap the README buries: motion_strength does nothing on its own. It only tags the conditioning with a motion_strength_scale value, and nothing reads that tag unless you also chain in the pack's other node, WanAnimateModelEnhancer, between your model loader and this node. That patcher is what actually applies the scale inside the model's face adapter during denoising. So "full control" means the two-node chain:

[Model] -> [Wan Animate Model Enhancer] -> [Wan Animate To Video Enhanced] -> [Sampler]

Run this node without the enhancer and motion_strength is a placebo. Worth knowing before you blame your seed.

The inputs that matter

  • The four dials - motion_strength (0–3), expression_strength (0–3), pose_adherence (0–2), background_blend (0–1). 1.0 is "original" for all of them. The README's guide is a decent starting point: 1.2–1.8 for enhanced motion, 0.8 for subtle expressions, 1.2–1.8 for strict pose following.
  • reference_image - the character still. Everything hangs off this.
  • pose_video, face_video, background_video - the driving inputs; typically fed from an input video you've split into pose frames, a face crop, and a background plate.
  • character_mask - lets you mask out regions (useful for "surgical" edits where you keep the original scene).
  • enable - the master switch; everything passes through untouched when off.

The six outputs are the core node's set: positive, negative and latent (the last goes to your sampler), plus three frame-count outputs - trim_latent, trim_image and video_frame_offset - that tell you how many leading frames are reference scaffolding you should trim off, and where to chain the next clip via continue_motion. Ignore them for a single clip; wire them up when you start chaining.

Installing it

The pack ships no Python dependencies at all - its requirements.txt is literally comments, and the code just imports ComfyUI's own modules. The real requirements are on the model side: a recent ComfyUI (one that already has the core Wan 2.2 Animate support) and the Wan2.2-Animate-14B weights from Wan-AI/Wan2.2-Animate-14B on Hugging Face. Grab the pack via ComfyUI Manager (search "ComfyUI-WanAnimate-Enhancer") or:

cd ComfyUI/custom_nodes
git clone https://github.com/wallen0322/ComfyUI-WanAnimate-Enhancer
# restart ComfyUI

Heads up: the README's own install snippet still has YOUR_REPO_URL as a placeholder and a folder name with hyphens that doesn't match the actual repo. Manager handles it correctly; if you clone by hand, use the URL above.

Troubleshooting

"No effect" is almost always one of three things: enable is off, motion_strength is set without the Model Enhancer in the chain (see above), or you're not actually running the Animate model. The patcher checks for the model's face_adapter and silently passes through with a console warning otherwise - if you loaded a plain Wan 2.2 checkpoint instead of Animate-14B, none of this does anything. Artifacts? The README's advice is right: drop all four dials to 1.0 and move one at a time, because they multiply each other. The defaults are sensible; the exaggerated presets (motion 1.8, expression 2.5) are for cartoon looks, not your first pass.

CategoryWan2.2AnimateEnhancer

Inputs (21)

NameTypeDefaultDescription
positiveCONDITIONING
negativeCONDITIONING
vaeVAE
widthINT83216–16384
heightINT48016–16384
lengthINT771–16384
batch_sizeINT11–4096
continue_motion_max_framesINT51–16384
video_frame_offsetINT00–16384
motion_strengthFLOAT1.000–3
expression_strengthFLOAT1.000–3
pose_adherenceFLOAT1.000–2
background_blendFLOAT1.000–1
enableBOOLEANtrue
clip_vision_outputoptCLIP_VISION_OUTPUT
reference_imageoptIMAGE
face_videooptIMAGE
pose_videooptIMAGE
background_videooptIMAGE
character_maskoptMASK
continue_motionoptIMAGE

Outputs (6)

NameTypeDescription
positiveCONDITIONING
negativeCONDITIONING
latentLATENT
trim_latentINT
trim_imageINT
video_frame_offsetINT