📼 Scail2 (OreX)
The one-node SCAIL-2 motion transfer that handles long clips
- model
- positive
- negative
- vae
- pose_video
- pose_video_mask
- reference_image
- reference_image_mask
- clip_vision_output
- images
- frames_numb
- iteration_numb
SCAIL-2 is Z.ai's Apache-2.0 motion transfer model - the one that ditched the stick-figure pose skeleton entirely and lets you throw a reference image, a driving video, and masks straight at it, which is why it handles multi-character and even animals where Wan Animate broke down. It shipped directly into ComfyUI core, so you don't need a custom node pack to run it. What you do need is patience with its hard 81-frame native window and its appetite for VRAM - and that's the gap Scail2 (OreX) fills. It wraps the core SCAIL-2 sampler, chunks long driving videos into overlapping segments, and assembles the result into one continuous clip. In short: SCAIL-2's length problem, solved in a single node.
How it works
Under the hood this node is a driver for WanSCAILToVideo from comfy_extras.nodes_scail - the ComfyUI-core SCAIL-2 implementation - so it only works on a recent ComfyUI that has SCAIL-2 support built in. It plans your driving video into chunks of chunk_length frames (default 81, which is SCAIL-2's native window) with overlap frames shared between chunks so motion carries across the boundary instead of snapping. Each chunk goes through the standard sampling path (sampler + scheduler + denoise), gets decoded through your VAE, and - the part that makes long clips feasible - finished tensors are moved to CPU RAM between chunks with a VRAM cache clear, so a 300-frame drive doesn't blow up an 8 GB card in one go. Between chunks it runs a Reinhard color transfer so the lighting doesn't visibly jump, and the noise seed increments per chunk for consistent noise.
Outputs: images (the full stitched IMAGE tensor - wire it to a video save node), plus frames_numb (total frames generated) and iteration_numb (how many chunks it ran).
The inputs that matter
This node looks like a KSampler crossed with a video node, and the wiring is: model/positive/negative/vae from your SCAIL-2 model setup, pose_video from your driving video (frames as IMAGE), plus width/height/steps/cfg/sampler/scheduler like any sampler. Three SCAIL-specific ones to know:
pose_strength,pose_start,pose_end- how hard the driving video's motion is applied and over which part of the clip.replacement_mode- on (default) for replacing the subject with your reference; off for character-driven animation.reference_image+reference_image_mask,clip_vision_output- optional but this is where cross-identity replacement happens.chunk_length/overlap- the length controls; keep chunk at 81 unless you know what you're doing.
Install and the real requirements
The pack itself is trivial (Manager or git clone https://github.com/orex2121/comfyui-OreX), but this node's actual dependencies are SCAIL-2 itself: the model weights (use the scaled Comfy-Org/SCAIL-2 download or a GGUF quant, not the 65 GB raw zai-org repo), a matching VAE and text encoder, and a ComfyUI version new enough to include comfy_extras.nodes_scail. If the node throws an import error on that module, update ComfyUI first - the pack can't fix a missing core feature.
The honest truth about cost
SCAIL-2 is quality-over-speed by a wide margin: community numbers are ~5–6 minutes for 81 frames on a 4070 Ti, ~19 minutes for a 14-second clip on a 16 GB 5060 Ti, and 8 GB cards only at Q4 GGUF and low resolution. Chunking makes long clips possible, not fast - it doesn't reduce total compute, it just stops your card from dying mid-run. Identity drift across chunk boundaries is also still a thing, so check your seams on long drives. If that's acceptable, this is the easiest way to get SCAIL-2's no-skeleton magic on clips longer than 81 frames.
Inputs (23)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| vae | VAE | — | |
| pose_video | IMAGE | — | |
| width | INT | 51232–8192 | — |
| height | INT | 89632–8192 | — |
| noise_seed | INT | 00–18446744073709550000 | — |
| steps | INT | 61–10000 | — |
| cfg | FLOAT | 1.00–100 | — |
| sampler_name | COMBO | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 | |
| scheduler | COMBO | 9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3 | |
| denoise | FLOAT | 1.000–1 | — |
| chunk_length | INT | 819–1024 | — |
| overlap | INT | 51–81 | — |
| pose_video_maskopt | IMAGE | — | |
| reference_imageopt | IMAGE | — | |
| reference_image_maskopt | IMAGE | — | |
| clip_vision_outputopt | CLIP_VISION_OUTPUT | — | |
| pose_strengthopt | FLOAT | 1.000–10 | — |
| pose_startopt | FLOAT | 0.000–1 | — |
| pose_endopt | FLOAT | 1.000–1 | — |
| replacement_modeopt | BOOLEAN | true | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| frames_numb | INT | — |
| iteration_numb | INT | — |