FeiHou-WanAnimate2ToVideo
One click past the five-second clip, with real continuity between segments
- 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
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_sizemust 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 afterVAEDecodewith the sameframe_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.
Inputs (20)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| vae | VAE | — | |
| width | INT | 83216–16384 | — |
| height | INT | 48016–16384 | — |
| length | INT | 811–100000 | Total output frames for the completed video. |
| frame_window_size | INT | 819–100000 | Frames per internal Animate2 segment. Must be 4*n+1; 81 is the recommended starting point. |
| batch_size | INT | 11–1 | Loop handoff is sequential and supports batch size 1 only. |
| video_frame_offset | INT | 00–100000 | Starting frame in pose_video. Later segment offsets are handled automatically. |
| pose_strength | FLOAT | 1.000–10 | — |
| pose_start_percent | FLOAT | 0.000–1 | — |
| pose_end_percent | FLOAT | 1.000–1 | — |
| reference_image_strength | FLOAT | 1.000–10 | — |
| reference_imageopt | IMAGE | — | |
| pose_videoopt | IMAGE | — | |
| clip_vision_outputopt | CLIP_VISION_OUTPUT | — | |
| positive_poseopt | CONDITIONING | — | |
| clip_vision_output_poseopt | CLIP_VISION_OUTPUT | — | |
| continue_motionopt | IMAGE | Optional external first-segment handoff. Later handoffs use the last five prior pixels as a two-latent native continuation window. |
Outputs (7)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |
| latent | LATENT | — |
| trim_latent | INT | — |
| trim_image | INT | — |
| video_frame_offset | INT | — |