XB-BOX - 🎬 Animate 动作迁移总线
One node to configure a whole motion-transfer run — the Animate parameter bus
- model
- clip
- vae
- clip_vision
- global_ref_image
- pose_video
- face_video
- background_video
- character_mask
- 📦 WAN_ANIMATE_BUS
In the XB_ToolBox Animate pipeline, there are exactly two kinds of nodes: a bus that holds all the shared settings, and relay nodes that consume it to generate segments. XB_WanAnimate_ParamBus is the bus. It's the single place you configure a whole Wan Animate motion-transfer run - model, prompts, resolution, VAE chunking, sampler settings, seed, and the reference/pose/face inputs - and it packs all of that into one WAN_ANIMATE_BUS object that every downstream relay node reads. Change the seed or the resolution in one place and every segment picks it up.
The mechanism is exactly what the README's "unified parameters" philosophy promises: the node's pack_bus function bundles every input into a dict, adds a current_offset counter that tracks how far through the driving video the pipeline has advanced, and - the one genuinely clever bit - if you provide both a clip_vision model and a global_ref_image, it runs the CLIP vision encode right there in the bus and stores the result, so downstream relays don't each re-encode the reference.
What you'll actually set
The big ones, in order of how often you'll touch them:
- model / clip / vae - the Wan Animate model stack.
- negative_prompt, width (default 480), height (default 832) - portrait is the Animate default.
- total_frames - 0 means "auto: take the full source video length"; a positive number forces a cutoff. That's the author's own tooltip.
- fps (default 16), steps (default 20), cfg (default 5), sampler_name, scheduler, seed.
- vae_encode_tile_size / vae_decode_tile_size (320), spatial_overlap (32), temporal_chunk_size (64), temporal_overlap (8) - the VRAM tiling knobs. Drop the tile sizes if you're close to OOM.
- continue_motion_max_frames (default 5) - how many tail frames of the previous segment bleed into the next, which is what hides seams.
- cleanup - the pack's cache-cleanup level; defaults to "双次缓存清理" (double cache cleanup), which tells you the author considers this pipeline VRAM-hungry enough to warrant it.
Optional inputs: global_ref_image, pose_video, face_video, background_video, character_mask, plus concat_mode (自动/GPU/CPU - where segments get accumulated), and the usual scale_method / crop_mode.
The single output is 📦 WAN_ANIMATE_BUS.
The honest framing
This is a pipeline-context node, the kind comfyui-node-plumbing.md warns you about: a bus hides its contents behind one wire, so when a segment comes out wrong, the debugging tax is real - you can't see which of the forty bundled values is off. Its biggest trap is exactly that: the relay reads values at generation time from the bus snapshot, so if you change the seed on the bus after the run started... actually no, ComfyUI re-runs the bus first. The real trap is that negative_prompt, positive_prompt lives on the relays, not the bus - the bus only holds the negative. Miss that and every segment shares the negative you set once, while each relay has its own positive. It's a deliberate split (each segment has a different scene description), but it surprises people the first time.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/WJLUOXIAO/XB_ToolBox.git
then restart, or install via ComfyUI Manager ("XB_ToolBox"). No extra dependencies beyond the pack's; you still need the Wan 2.2 Animate weights, a clip_vision model for the reference, and the relay nodes to actually generate.
Inputs (29)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| clip | CLIP | — | |
| vae | VAE | — | |
| negative_prompt | STRING | vivid colors, overexposed, static, blurry details... | — |
| width | INT | 480 | — |
| height | INT | 832 | — |
| total_frames | INT | 00–999999 | 0=自动从源视频取长度;>0=强制截断到此帧数 |
| fps | FLOAT | 16.00 | — |
| vae_encode_tile_size | INT | 320 | — |
| vae_decode_tile_size | INT | 320 | — |
| spatial_overlap | INT | 32 | — |
| temporal_chunk_size | INT | 64 | — |
| temporal_overlap | INT | 8 | — |
| steps | INT | 201–100 | — |
| cfg | FLOAT | 5.0 | — |
| sampler_name | COMBO | 41 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +35 | |
| scheduler | COMBO | 9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3 | |
| seed | INT | 123456789 | — |
| continue_motion_max_frames | INT | 50–16 | — |
| cleanup | COMBO | 双次缓存清理 | 4 options: 不做任何清理, 单次缓存清理, 双次缓存清理, 卸载显存模型 |
| clip_vision | CLIP_VISION | — | |
| global_ref_imageopt | IMAGE | — | |
| pose_videoopt | IMAGE | — | |
| face_videoopt | IMAGE | — | |
| background_videoopt | IMAGE | — | |
| character_maskopt | MASK | — | |
| concat_modeopt | COMBO | 自动 | 视频累积拼接位置 |
| scale_methodopt | COMBO | lanczos | 5 options: lanczos, bilinear, bicubic, nearest-exact, area |
| crop_modeopt | COMBO | center | 2 options: center, disabled |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| 📦 WAN_ANIMATE_BUS | WAN_ANIMATE_BUS | — |