IAMCCS SCAIL Multi-Reference (experimental)
Stack six characters into one SCAIL-2 shot (experimental, with a caveat)
- positive
- negative
- vae
- image_1
- mask_1
- image_2
- mask_2
- image_3
- mask_3
- image_4
- mask_4
- image_5
- mask_5
- image_6
- mask_6
- positive
- negative
IAMCCS_ScailMultiReference is an experimental node for pushing SCAIL-2 past its normal single-character limit: it stacks up to six single-character reference images as separate reference frames, using color-based identity binding (image_1 → palette color 0, image_2 → color 1, and so on), so each character in a driving video can be bound to its own source. If SCAIL-2 is the open motion-transfer model that finally dropped the pose skeleton (Z.ai's Apache-2.0 Wan 2.1 fine-tune that took the community by storm in 2026), this node is an attempt to do multi-character identity on top of it.
Read the word experimental in the title carefully, because the author's own description is unusually candid about it: this is for testing color-based identity binding, and the note at the end says composited single-reference layouts are usually higher fidelity. Translation: if your shot has six characters, the higher-quality path is usually to composite them into one reference image and use SCAIL's normal single-reference mode - this node is the experiment for when you genuinely need them bound separately.
How it works
It extends the base SCAIL-2 multi-reference node. Each of the up to six image_N inputs maps to one palette color, and the order must match the driving colors - the tooltip hammers this because it's the #1 way to get scrambled identity. Each image can take an optional mask_N (a silhouette, e.g. from RMBG background removal); without a mask it defaults to the whole frame. The node then builds positive/negative conditioning for the SCAIL-2 sampler.
Two settings must match what's downstream, per the tooltips: length (frames) must equal the WanSCAILToVideo length, and replacement_mode must match it too - when true, each ref is composited on black (replacement); when false, the full frame is used for animation. Wire this node after WanSCAILToVideo (with its reference left empty) and before SamplerCustom.
Inputs and outputs
Required: positive, negative, vae, width (512), height (896), length (81), replacement_mode (true). Optional: image_1–image_6 and matching mask_1–mask_6. Outputs: conditioned positive and negative.
Installing it
Part of the IAMCCS-nodes pack. ComfyUI Manager → search IAMCCS, or:
cd ComfyUI/custom_nodes
git clone https://github.com/IAMCCS/IAMCCS-nodes.git
Restart ComfyUI; it's under IAMCCS/video/SCAIL-2. No pip requirements - but it builds on the SCAIL-2 model and its ComfyUI integration, which you must already have working (SCAIL-2 ships in ComfyUI core, so "have the model downloaded and the core workflow running" is the real prerequisite). README floor: ComfyUI ≥ 0.3.0, Python ≥ 3.12, Torch ≥ 2.8.
Where people get burned
- Order mismatch: image order and driving color order must line up, or character A gets character B's motion. Re-read the tooltips; this is the entire ballgame for this node.
lengthandreplacement_modemismatched with WanSCAILToVideo - the node produces conditioning, and if those disagree with the video node, identity binding falls apart or frames don't line up.- SCAIL-2 is compute-hungry; six references plus a long driving video is a heavy render. If it OOMs, that's the model's cost, not the node - drop length or resolution before blaming the wiring.
- Taking the author's own caveat to heart: for a final deliverable with multiple characters, the composited single-reference approach is usually cleaner. Treat this node as the experiment it's labeled.
Inputs (19)
| Name | Type | Default | Description |
|---|---|---|---|
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| vae | VAE | — | |
| width | INT | 51232–8192 | — |
| height | INT | 89632–8192 | — |
| length | INT | 811–1024 | Generation length in frames. Must match the WanSCAILToVideo length. |
| replacement_mode | BOOLEAN | true | Must match WanSCAILToVideo. Replacement composites each ref on black; animation uses the full frame. |
| image_1opt | IMAGE | Single character -> palette colour 0. Order must match the driving colours. | |
| mask_1opt | MASK | Silhouette for image_1 (e.g. RMBG mask). Optional; defaults to the whole frame. | |
| image_2opt | IMAGE | Single character -> palette colour 1. Order must match the driving colours. | |
| mask_2opt | MASK | Silhouette for image_2 (e.g. RMBG mask). Optional; defaults to the whole frame. | |
| image_3opt | IMAGE | Single character -> palette colour 2. Order must match the driving colours. | |
| mask_3opt | MASK | Silhouette for image_3 (e.g. RMBG mask). Optional; defaults to the whole frame. | |
| image_4opt | IMAGE | Single character -> palette colour 3. Order must match the driving colours. | |
| mask_4opt | MASK | Silhouette for image_4 (e.g. RMBG mask). Optional; defaults to the whole frame. | |
| image_5opt | IMAGE | Single character -> palette colour 4. Order must match the driving colours. | |
| mask_5opt | MASK | Silhouette for image_5 (e.g. RMBG mask). Optional; defaults to the whole frame. | |
| image_6opt | IMAGE | Single character -> palette colour 5. Order must match the driving colours. | |
| mask_6opt | MASK | Silhouette for image_6 (e.g. RMBG mask). Optional; defaults to the whole frame. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |