XB-BOX - 🆕 SCAIL 总线 (New)
One control panel for a whole SCAIL relay chain
- model
- clip
- vae
- clip_vision
- global_ref_image
- reference_image_mask
- pose_video
- pose_video_mask
- 📦 WAN_SCAIL_BUS
SCAIL is Wan's pose-driven character animation - you feed it a character reference image and a pose/motion video, and it makes the character perform that motion. XB's SCAIL pipeline turns that into an infinite-length video by chaining relay segments, and this node ("🆕 SCAIL 总线 (New)") is the control panel for the whole thing. Everything the relay nodes need downstream - model, CLIP, VAE, pose video, reference image, all the sampling and VRAM knobs - gets bundled here into one WAN_SCAIL_BUS wire, so your downstream relay nodes only ask for a prompt and a segment length.
How it works
pack_bus() does two jobs. First it encodes your global_ref_image with the clip_vision model, scaled to the video's width/height - that's the identity conditioning that keeps the character looking like the reference across every segment. Then it bundles every input into a dict and stamps a current_offset of 0, which is where in the pose video the first segment starts. Downstream relay nodes read from the bus and advance that offset as they go.
The inputs that matter
There are a lot, but they fall into a few groups:
- model / clip / vae / clip_vision - the whole generation stack, required.
clip_visionis the one people forget; without it the reference identity is weak. - pose_video - the motion you're driving from.
total_framesof 0 means "take the length from the pose video"; set it above 0 to force a cut.fpsdefault 16, which is SCAIL's native rate. - pose_strength / pose_start / pose_end - how hard the pose drives the generation, and over which fraction of each segment (e.g. 0.3–0.8 applies it only in the middle). This is your dial for "follow the pose exactly" vs "interpret it loosely."
- replacement_mode - off is "animation mode" (character performs the pose); on is "replacement mode," where the reference character replaces the subject, and you can isolate it with
reference_image_maskso only that region is replaced. - concat_mode - where the accumulated video lives: auto switches to CPU when VRAM gets tight (over 30% used), or force GPU/CPU.
- VAE tile / temporal knobs -
vae_encode_tile_size,vae_decode_tile_size,spatial_overlap,temporal_chunk_size,temporal_overlap. These keep encode/decode from OOMing on long videos. - steps / cfg / sampler_name / scheduler / seed - the sampling config, applied to every segment.
- cleanup - up to "卸载显存模型" (unload the GPU model) after the run.
Output: a single WAN_SCAIL_BUS socket.
Install
Standard XB_BOX install - ComfyUI Manager search XB_ToolBox, or clone into custom_nodes, restart. Then you need a SCAIL-capable Wan model (Wan 2.1 14B SCAIL; the fp8 scaled version from kijai's WanVideo_comfy_fp8_scaled repo is what most people run on 16GB cards), plus a pose/driving video and a character reference image.
Common issues
The default negative_prompt is a long Chinese quality-negative list - works fine, but you'll probably want your own. If identity drifts between segments, check clip_vision is wired and pose_strength isn't cranked so high the pose overrides the character. And if the chain stops early, your pose video ran out of frames before the relays finished.
Inputs (31)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| clip | CLIP | — | |
| vae | VAE | — | |
| clip_vision | CLIP_VISION | — | |
| negative_prompt | STRING | 色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走 | — |
| width | INT | 51216–8192 | — |
| height | INT | 89632–8192 | — |
| total_frames | INT | 00–999999 | 0=自动从姿态视频取长度;>0=强制截断到此帧数 |
| fps | FLOAT | 161–120 | — |
| pose_strength | FLOAT | 1.000–10 | — |
| pose_start | FLOAT | 0.000–1 | — |
| pose_end | FLOAT | 1.000–1 | — |
| replacement_mode | BOOLEAN | false | — |
| concat_mode | COMBO | 自动 | 视频累积拼接位置: 自动=显存>30%切CPU | 强制GPU=始终GPU | 强制CPU=始终CPU |
| vae_encode_tile_size | INT | 25664–3840 | — |
| vae_decode_tile_size | INT | 19264–3840 | — |
| spatial_overlap | INT | 320–3840 | — |
| temporal_chunk_size | INT | 640–8192 | — |
| temporal_overlap | INT | 80–8192 | — |
| steps | INT | 201–100 | — |
| cfg | FLOAT | 5.00–10 | — |
| 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 | — |
| cleanup | COMBO | 双次缓存清理 | 4 options: 不做任何清理, 单次缓存清理, 双次缓存清理, 卸载显存模型 |
| global_ref_imageopt | IMAGE | — | |
| reference_image_maskopt | IMAGE | 参考图遮罩 (替换模式: 隔离角色区域) | |
| pose_videoopt | IMAGE | 姿态/驱动视频 | |
| pose_video_maskopt | IMAGE | SCAIL-2 彩色遮罩视频 | |
| scale_methodopt | COMBO | lanczos | 5 options: bilinear, bicubic, lanczos, nearest-exact, area |
| crop_modeopt | COMBO | center | 2 options: center, disabled |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| 📦 WAN_SCAIL_BUS | WAN_SCAIL_BUS | — |