Nodes/FeiHou WanAnimate2 Plus/FeiHou-WanAnimate2ToVideo
ComfyUI Node

FeiHou-WanAnimate2ToVideo

One click past the five-second clip, with real continuity between segments

By FX-FeiHou·Created 2 days ago·Updated 2 days ago· 1
FeiHou-WanAnimate2ToVideo
  • model
  • positive
  • negative
  • vae
  • reference_image
  • pose_video
  • clip_vision_output
  • positive_pose
  • clip_vision_output_pose
  • continue_motion
  • model
  • positive
  • negative
  • latent
  • trim_latent
  • trim_image
  • video_frame_offset
width832
height480
length81
frame_window_size81
batch_size1
video_frame_offset0
pose_strength1.00
pose_start_percent0.00
pose_end_percent1.00
reference_image_strength1.00

Every Wan user ends up here eventually: your pose video runs 30 seconds, the model's native context is 81 frames, and your GPU can't hold the whole latent in one go. The stock answer is manual chaining - render a chunk, grab its tail, feed it into the next chunk - which is fiddly, error-prone, and lets continuity drift at every handoff. FeiHouWanAnimate2ToVideo automates that whole loop: you tell it the total length you want and the biggest segment your VRAM fits, and it samples the video as sequential short segments with native pixel-space continuation between them.

It's the flagship node of ComfyUI-FeiHou-WanAnimate2-Plus (v0.6.0, first public release September 2026 - a young pack, so expect to iterate on settings rather than inherit community-tuned ones). The design bet is worth understanding before you use it: this node is a drop-in replacement for the stock WanAnimate2ToVideo node only. Your existing SamplerCustom, TrimVideoLatent, and VAEDecode stay in the graph.

How it works

Under the hood it clones your model and attaches an outer-sampling wrapper. When SamplerCustom runs, the wrapper intercepts that one call and re-issues it once per segment instead. The clever bit is the handoff: at every segment boundary the node decodes the previous segment's last five pixel frames and VAE-encodes them into a two-latent continue_motion condition for the next segment. That's pixel-space continuation - the same representation the stock node trains on - not a raw-latent transplant, which is why continuity holds up as well as it does. The first segment is kept intact; later segments drop their two newly-sampled warm-up latents so you don't get doubled-up frames. The whole assembled latent is decoded exactly once, by your existing downstream VAEDecode.

Wiring it

Per the README, keep the rest of the stock Animate2 graph and only swap the sampler-facing node:

ModelSamplingSD3 ──> FeiHou-WanAnimate2ToVideo (model output) ──> BasicScheduler + SamplerCustom model
                        └── positive / negative / latent ──────> original SamplerCustom inputs
SamplerCustom ──> original TrimVideoLatent (trim_amount = 0) ──> original VAEDecode

The inputs that matter

  • length - total output frames for the completed video. This is your target; the node figures out the windowing.
  • frame_window_size (81) - frames per internal segment. Must be 4*n + 1. Set it to the largest segment that fits in VRAM - 81 is the recommended starting point.
  • video_frame_offset (0) - starting frame in your pose_video. Later segment offsets are handled automatically.
  • width / height (832×480) - must be divisible by 8.
  • batch_size - locked to 1. The loop is strictly sequential; this is not a batch pipeline.

The optional inputs mirror the stock node: reference_image, pose_video (the driving pose clip), clip_vision_output, positive_pose, clip_vision_output_pose, and continue_motion - an external handoff image if you want to start from a specific tail rather than the default. Pose controls (pose_strength, pose_start_percent, pose_end_percent, reference_image_strength) pass through untouched per segment.

The outputs are the stock contract: model, positive, negative, and latent feed BasicScheduler/SamplerCustom. The trim_latent and trim_image INT outputs report that trimming is already handled internally (keep your TrimVideoLatent at trim_amount = 0), and video_frame_offset reports the end position in the pose video - useful if you're chaining another run.

Install

The pack carries no Python dependencies - it builds on ComfyUI's native Wan Animate2 and context modules - so install is just:

cd ComfyUI/custom_nodes
git clone https://github.com/FX-FeiHou/ComfyUI-FeiHou-WanAnimate2-Plus

Restart ComfyUI after cloning (ComfyUI Manager: search "FeiHou WanAnimate2 Plus"). You need a current ComfyUI - this pack imports comfy.ldm.wan.model_animate2 and the context-window modules, which don't exist on older builds.

Where people get burned

  • You cannot stack this with WanAnimate2ContextOptions. The node raises an error if the incoming model already carries a context handler - bypass or delete the context node, pick one long-video strategy, and stick with it.
  • Chose the segment size by VRAM, not ambition. frame_window_size must also be long enough for the loop handoff - the node throws if it's too short (min 9 frames, and don't fight it).
  • A residual low-frequency colour/exposure pulse can remain at each seam even with good continuation. That's what the pack's third node, FeiHou-WanAnimate2 Seam Color Match, is for: put it right after VAEDecode with the same frame_window_size.

If a single short segment fits in VRAM but the whole Animate2 video doesn't, this is the node you want - it turns hours of manual chain-and-restitch babysitting into one parameter.

CategoryFeiHou/WanAnimate2

Inputs (20)

NameTypeDefaultDescription
modelMODEL
positiveCONDITIONING
negativeCONDITIONING
vaeVAE
widthINT83216–16384
heightINT48016–16384
lengthINT811–100000Total output frames for the completed video.
frame_window_sizeINT819–100000Frames per internal Animate2 segment. Must be 4*n+1; 81 is the recommended starting point.
batch_sizeINT11–1Loop handoff is sequential and supports batch size 1 only.
video_frame_offsetINT00–100000Starting frame in pose_video. Later segment offsets are handled automatically.
pose_strengthFLOAT1.000–10
pose_start_percentFLOAT0.000–1
pose_end_percentFLOAT1.000–1
reference_image_strengthFLOAT1.000–10
reference_imageoptIMAGE
pose_videooptIMAGE
clip_vision_outputoptCLIP_VISION_OUTPUT
positive_poseoptCONDITIONING
clip_vision_output_poseoptCLIP_VISION_OUTPUT
continue_motionoptIMAGEOptional external first-segment handoff. Later handoffs use the last five prior pixels as a two-latent native continuation window.

Outputs (7)

NameTypeDescription
modelMODEL
positiveCONDITIONING
negativeCONDITIONING
latentLATENT
trim_latentINT
trim_imageINT
video_frame_offsetINT