SCAIL-2 Segment Plan Builder
Write your SCAIL-2 shot list without touching JSON
- segment_plan
- summary
SCAIL-2's native long-video workflow is powerful and also the worst part of using it: you split your clip into segments, then hand-write the plan as text that lists frame counts, reference numbers, prompts, and overlaps. Get a pipe or a column wrong and the whole run silently re-times itself. The SCAIL-2 Segment Plan Builder is the node that turns that chore into a form you fill in once.
It's the front end of this whole pack. You set how many segments you want with segment_count, and the node shows you one block of controls per segment - segment_N_frames, segment_N_reference, segment_N_prompt, segment_N_negative, and segment_N_boundary_overlap. The reference number points at a reference_N image on the scheduler, the prompt is that segment's positive prompt, and boundary_overlap is how much continuation you want right after a reference switch (more on that in a second). The boundary_overlap on the very first segment is ignored - there's nothing before it to overlap with.
A couple of UI details worth knowing. The node has a dynamic-UI button, Update segment inputs, that hides the controls for segments beyond your segment_count. If you bump the count from 2 to 5, you must click that button for segments 3–5 to reappear. If the button never shows up, hard-refresh the browser and check the console for [SCAIL Multi Cond] dynamic UI extension loaded - that's the pack's JS not loading, and it breaks this node's entire point. Also note every segment is required in the schema, so this is one of those nodes you wire up inside a form, not a text box.
The output you actually care about is segment_plan, a STRING you plug straight into SCAIL-2 Scheduled Long Video (or the internal-SAM variant) as its segment_plan input. There's also a summary JSON you can shove into the planner if you want to inspect what it built. The plan is pipe-delimited, one segment per line:
# frames | reference | prompt | negative | boundary_overlap
77 | 1 | character enters the room wearing a coat | | 5
141 | 2 | character removes the coat | | 5
Which translates to: frames 1–77 use reference_1, frames 78–218 use reference_2, and the transition into reference 2 gets 5 frames of overlap. Frame counts are cumulative - each segment starts where the last one ended.
The setting that trips people is boundary_overlap. It only applies to the first chunk after a reference change, and it overrides the global overlap_frames for that one chunk: -1 means "use the global value", 0 means a hard cut with no previous-frame anchor, and 5 is the strong-continuity default the author recommends. There is deliberately no reference_strength input anywhere in this pack, because SCAIL-2 doesn't expose a true reference weight and pixel-blending a reference into the previous frames just creates ghosting. Overlap control is the intended substitute.
Installing it is the same story as the rest of the pack: ComfyUI Manager, search for comfyui_scail2_multi_cond, or:
cd ComfyUI/custom_nodes
git clone https://github.com/TTPlanetPig/comfyui_scail2_multi_cond
then restart ComfyUI. No model files ship with it - this node just writes text. The heavier lifting is upstream: the pack expects a recent ComfyUI with WanSCAILToVideo, SamplerCustom, VAEDecode, and ColorTransfer in core, which any SCAIL-2-capable install already has.
One trap: your segment frame counts need to respect SCAIL-2's 81-frame native window and its 4n+1 frame-count rule once they get chunked. The builder doesn't stop you from writing a 300-frame segment that then splits into awkward little stubs - use max_chunk_frames - overlap_frames (81 − 5 = 76) as your safe per-segment sizing guide, or check the output through the Segment Planner before you spend GPU minutes finding out.
Inputs (41)
| Name | Type | Default | Description |
|---|---|---|---|
| segment_count | INT | 21–8 | — |
| segment_1_frames | INT | 491–100000 | — |
| segment_1_reference | INT | 11–8 | — |
| segment_1_prompt | STRING | segment 1 prompt | — |
| segment_1_negative | STRING | — | |
| segment_1_boundary_overlap | INT | 5-1–33 | — |
| segment_2_frames | INT | 1211–100000 | — |
| segment_2_reference | INT | 21–8 | — |
| segment_2_prompt | STRING | segment 2 prompt | — |
| segment_2_negative | STRING | — | |
| segment_2_boundary_overlap | INT | 5-1–33 | — |
| segment_3_frames | INT | 731–100000 | — |
| segment_3_reference | INT | 31–8 | — |
| segment_3_prompt | STRING | segment 3 prompt | — |
| segment_3_negative | STRING | — | |
| segment_3_boundary_overlap | INT | 5-1–33 | — |
| segment_4_frames | INT | 1571–100000 | — |
| segment_4_reference | INT | 41–8 | — |
| segment_4_prompt | STRING | segment 4 prompt | — |
| segment_4_negative | STRING | — | |
| segment_4_boundary_overlap | INT | 5-1–33 | — |
| segment_5_frames | INT | 731–100000 | — |
| segment_5_reference | INT | 51–8 | — |
| segment_5_prompt | STRING | segment 5 prompt | — |
| segment_5_negative | STRING | — | |
| segment_5_boundary_overlap | INT | 5-1–33 | — |
| segment_6_frames | INT | 731–100000 | — |
| segment_6_reference | INT | 61–8 | — |
| segment_6_prompt | STRING | segment 6 prompt | — |
| segment_6_negative | STRING | — | |
| segment_6_boundary_overlap | INT | 5-1–33 | — |
| segment_7_frames | INT | 731–100000 | — |
| segment_7_reference | INT | 71–8 | — |
| segment_7_prompt | STRING | segment 7 prompt | — |
| segment_7_negative | STRING | — | |
| segment_7_boundary_overlap | INT | 5-1–33 | — |
| segment_8_frames | INT | 731–100000 | — |
| segment_8_reference | INT | 81–8 | — |
| segment_8_prompt | STRING | segment 8 prompt | — |
| segment_8_negative | STRING | — | |
| segment_8_boundary_overlap | INT | 5-1–33 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| segment_plan | STRING | — |
| summary | STRING | — |