toobusy Wan Animate 2 Long Sampler
Long Wan Animate 2 clips without hand-wiring the chunking
- model
- positive
- negative
- sampler
- sigmas
- vae
- reference_image
- pose_video
- positive_pose
- clip_vision_output
- clip_vision_output_pose
- continue_video
- images
- frame_count
- chunk_count
Wan Animate 2 is a motion-transfer model: you give it a reference image of a character and a driving video of someone else's motion, and it animates your character through that motion. The catch is that Wan's video latent is built on a strict 4k+1 frame grid - 65, 81, 121 frames and so on - so long driving videos have to be chopped into chunks, sampled, stitched, and cropped to the length you actually wanted. Doing that by hand means a half-dozen nodes and a seam-matching headache. toobusy Wan Animate 2 Long Sampler folds the whole chunk-and-stitch loop into one node.
The mechanism is straightforward under the hood: the node plans valid Wan chunk lengths on the 4k+1 grid, rounds your frames_per_sampler to the grid, runs each chunk through the core WanAnimate2ToVideo node with a one-frame overlap for continuity, then trims the result to exactly total_frames. Each chunk gets seed + chunk index, so the noise stays deterministic per segment.
The inputs that matter
The node takes the final sockets, not the whole chain. Model loader, LoRA, attention, cache and conditioning are all built outside the node and connected as finished pieces:
model,positive,negative,sampler,sigmas,vae- your completed conditioning and sampling stack.reference_image- the character you're animating.pose_video- the driving motion, as an IMAGE batch.total_frames- the exact output length. Wire a runtime-computed INT like VHS'sloaded_frame_counthere; that's the intended use, andtotal_frames_inputis the optional linked override.frames_per_sampler- frames per chunk. The README's starting points are 81 for 24GB, 49 for 16GB, 33 for 12GB. Start there and tune for your card.reference_image_strength,pose_strength, pluspose_start_percent/pose_end_percentif you want the pose to kick in partway.color_match- on by default, and you'll generally want it; chunk-to-chunk color drift is the #1 artifact in long animated clips.
Three outputs: images (the finished clip), frame_count, and chunk_count (useful for knowing how many samplers you actually burned).
What it needs
This is the node that demands you're on a recent ComfyUI. It relies on the core's experimental WanAnimate2ToVideo node with continuation outputs - the README explicitly calls this out. If you're on a stale install you'll hit a runtime error about missing continuation outputs, and the fix is updating ComfyUI, not this pack. You also need the Wan Animate 2 model files yourself; nothing is bundled.
Installing it
As with everything in the pack:
cd ComfyUI/custom_nodes
git clone https://github.com/nicekriss/toobusy.git toobusy
or search "toobusy" in ComfyUI Manager, then restart. No extra Python dependencies for this node.
There's a continue_video input worth knowing about: feed it an existing Animate 2 result and the node treats it as the opening, counts it into total_frames, and anchors the first new chunk on its last frame - so you can extend a render you already liked instead of re-rolling the whole thing. Between that and color_match, the long-clip workflow this node replaces was genuinely fiddly. If you've ever stared at a 900-frame Animate 2 graph and reconsidered your life choices, this is the node toobly built for you.
Inputs (25)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| sampler | SAMPLER | — | |
| sigmas | SIGMAS | — | |
| vae | VAE | — | |
| reference_image | IMAGE | — | |
| pose_video | IMAGE | — | |
| width | INT | 48264–8192 | — |
| height | INT | 85464–8192 | — |
| total_frames | INT | 2411–100000 | Exact final output length. The last valid Wan chunk is cropped when necessary. |
| frames_per_sampler | INT | 815–1024 | Frames rendered by each sampler chunk. Use 81 for 24 GB, 49 for 16 GB, or 33 for 12 GB as a starting point. |
| seed | INT | 10–18446744073709550000 | Each following chunk uses seed + chunk index. |
| cfg | FLOAT | 1.00–30 | — |
| reference_image_strength | FLOAT | 1.000–10 | — |
| pose_strength | FLOAT | 1.000–10 | — |
| pose_start_percent | FLOAT | 0.000–1 | — |
| pose_end_percent | FLOAT | 1.000–1 | — |
| color_match | BOOLEAN | false | — |
| color_match_strength | FLOAT | 1.000–1 | — |
| positive_poseopt | CONDITIONING | Final motion-branch conditioning. When omitted, positive is used. | |
| clip_vision_outputopt | CLIP_VISION_OUTPUT | — | |
| clip_vision_output_poseopt | CLIP_VISION_OUTPUT | — | |
| continue_videoopt | IMAGE | An existing Animate 2 result to continue. It is included in total_frames and its last frame anchors the first new chunk. | |
| total_frames_inputopt | INT | Optional linked override for total_frames. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| frame_count | INT | — |
| chunk_count | INT | — |