MoE Sigma Split (CCN)
Where Exactly Do the Wan 2.2 Experts Hand Off? MoE Sigma Split (CCN)
- sigmas
- sigmas_high
- sigmas_low
- high_steps
- low_steps
- switch_sigma
- info
Wan 2.2's two-expert setup has one awkward question: at exactly which step does the high-noise expert hand off to the low-noise one? The official answer is a sigma boundary (0.875 for t2v, 0.900 for i2v, from Wan's own configs), but ComfyUI samples Wan as flow matching with sigma in [0, 1], and which step crosses that boundary depends on your scheduler, step count, shift, and denoise. It is not a fixed step ratio - the community thread on this is explicit that the split is "only partially knowable," and the index shifts around a lot between configs. MoE Sigma Split (CCN) computes it for you, deterministically, from the actual schedule you're using.
Feed it a sigmas tensor - the flow-matching schedule from an upstream scheduler, e.g. BasicScheduler reading your shift-patched Wan model - plus a boundary (t2v 0.875, i2v 0.900, or custom with custom_boundary). It finds the first step whose sigma drops below the boundary and splits the schedule there: sigmas_high gets the high-noise segment (including the shared hand-off sigma), sigmas_low gets the rest. The two schedules share that boundary sigma, which is the subtle detail that makes the hand-off lossless - the low phase starts from exactly where the high phase ended.
The outputs are generous because debugging this is half the battle:
- sigmas_high / sigmas_low - the per-expert schedules, wire them into two SamplerCustomAdvanced nodes (high with add_noise on, low with add_noise off, latent chained between).
- high_steps / low_steps - how many steps each phase gets. If either is 0, that phase is empty and the node hands you an inert stub schedule instead of crashing.
- switch_sigma - the sigma value where the switch happens, as a number.
- info - a full text report: boundary, schedule stats, step counts, the hand-off line, and any warnings (like a schedule that crosses the boundary multiple times - it uses the first crossing only).
Two guardrails matter. It validates that the input is actually a flow-matching schedule (sigma in [0,1]) and refuses EDM/eps-style schedules from SD-family models, where the boundary concept is meaningless - that's a deliberate error, not a bug. And it handles degenerate schedules explicitly: all-high or all-low runs get stub schedules and clear warnings about where noise must enter. The one thing to remember in the all-low case: enable add_noise on the LOW phase sampler, because noise normally enters through the high phase and the inert stub can't carry it.
Install
WIP pack member, git clone:
cd ComfyUI/custom_nodes
git clone https://github.com/valkymaera/ComfyCollectorNodes
Restart ComfyUI; "MoE Sigma Split (CCN)" is in the "CCN" category. Stock deps only (torch, ComfyUI's SIGMAS type), no model downloads, MIT, WIP-label caveat applies.
Common issues
If you see the sigma-range refusal, you're feeding it a non-flow schedule - check you're sampling Wan (flow) and not accidentally passing an SD-style Karras schedule. If high_steps or low_steps is 0, read the info output and follow its noise-placement advice rather than assuming the node is broken. And if the boundary landing spot feels wrong for your aesthetic, don't fight the node - change boundary to custom and sweep. The community genuinely doesn't agree on the "best" split, and this node hands you the lever to test it.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| sigmas | SIGMAS | Flow-matching sigma schedule, e.g. from BasicScheduler reading a shift-patched Wan model. | |
| boundary | COMBO | i2v (0.900) | Trained expert boundary in timestep space (t = sigma * 1000). Steps evaluated at sigma >= boundary run on the high-noise expert. |
| custom_boundary | FLOAT | 0.8750–1 | Boundary used only when 'boundary' is set to custom. |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| sigmas_high | SIGMAS | — |
| sigmas_low | SIGMAS | — |
| high_steps | INT | — |
| low_steps | INT | — |
| switch_sigma | FLOAT | — |
| info | STRING | — |