WanMoEScheduler
Let this node find your Wan 2.2 sigma boundary
- model
- shift
- steps
- steps_high
- steps_low
- sigmas
- sigmas_high
- sigmas_low
If you've run Wan 2.2 for more than a weekend, you've met its split personality. Wan 2.2 is a two-expert MoE: a high-noise expert that handles motion and composition, and a low-noise expert that handles detail. The community runs them as separate sampling passes, split at a sigma boundary - often with a speed LoRA applied to the low-noise pass only, because a full-strength speed LoRA will quietly kill everything good about the model. That split-stage workflow is standard by now. The fiddly part is the shift parameter that decides where the boundary lands.
That's the problem this node exists to delete. WanMoEScheduler is a small scheduler node that hunts for the shift value that puts your high/low boundary exactly where you asked, so you can mix and match steps_high and steps_low without reaching for a calculator or a session of trial-and-error.
How it works
The mechanism is refreshingly honest about what it's doing. The node patches your model's model_sampling with a candidate shift, computes the sigma sequence with ComfyUI's own calculate_sigmas, and checks whether the sigma at the boundary index is at or above your target boundary. If not, it bumps shift up by interval and tries again - a straight greedy search from 0 upward, not a closed-form solve. The first shift that lands the boundary is the winner, rounded to two decimals, and the original model_sampling gets restored afterward so nothing leaks into the rest of your graph.
That search is why the scheduler dropdown is shorter than usual. karras, exponential, linear_quadratic, kl_optimal, and bong_tangent are filtered out because shift has little to no effect on their sigma distributions - and with bong_tangent specifically, the KB's own lore agrees: it applies its own sigma shift and ignores the one in your workflow. Removing it isn't a bug, it's the feature working as intended.
The inputs and outputs that matter
Five inputs do the real work. boundary (default 0.875) is your target sigma threshold - the official Wan values are 0.90 for I2V and 0.875 for T2V, and the author reports good results pushing to 0.930+ with a few extra high-noise steps. steps_high and steps_low are exactly what they sound like; interval is the search precision (0.01 is precise but a touch slower, 0.1 is fast and sloppier); denoise lets partial-denoise workflows stay correct.
Outputs: shift and steps for the KSampler route, plus three SIGMAS outputs - sigmas_high, sigmas_low, and the combined sigmas. You wire sigmas_high/sigmas_low straight into a custom sampler for the two-pass approach, or feed shift into a ModelSamplingSD3 node and steps/steps_high into KSampler Advanced's start_at_step/end_at_step. Whichever route, keep the scheduler in your samplers matching the one you picked here.
Install and gotchas
Nothing heavy here - no model downloads, no requirements.txt, no runtime deps beyond ComfyUI's own comfy.samplers. Install via ComfyUI Manager (search "ComfyUI-WanMoEScheduler") or:
cd ComfyUI/custom_nodes
git clone https://github.com/cmeka/ComfyUI-WanMoEScheduler.git
Then restart. Two real gotchas, both in the README: the "Could not find shift" error means your boundary is unreachable for those step counts - drop interval, keep boundary in the 0.875–0.93 band; and if you're using Kijai's WanVideoWrapper with custom sigmas, only unipc, dpm++, and dpm++_sde actually work there. The rest are disabled by design or by bug.
Honest take: this is a narrow utility, and its own launch post got basically no traction. But if you actually run split-stage Wan sampling - and if you're on Wan 2.2, you probably should be - it converts the most annoying part of that workflow from guesswork into a node. That's worth the install.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | The model used for calculating sigmas. | |
| scheduler | COMBO | The scheduler to use for sigma calculation. NOTE: If you do not use sigmas for sampling don't forget to match the scheduler values. | |
| steps_high | INT | 41–99 | Number of steps for high noise sampling. |
| steps_low | INT | 41–99 | Number of steps for the low noise sampling. NOTE: Higher steps require lower speed lora strength. |
| boundary | FLOAT | 0.8750–0.999 | The target sigma value for the boundary between high and low steps. Usually 0.930-0.875. Offical WAN values are 0.90 (I2V) and 0.875 (T2V). |
| interval | FLOAT | 0.010.01–1 | The step size to increment the shift while searching for the optimal value. Lower is more precise. |
| denoise | FLOAT | 1.000–1 | The amount of noise to remove. A value of 1.0 is full denoising (default). |
Outputs (7)
| Name | Type | Description |
|---|---|---|
| shift | FLOAT | — |
| steps | INT | — |
| steps_high | INT | — |
| steps_low | INT | — |
| sigmas | SIGMAS | — |
| sigmas_high | SIGMAS | — |
| sigmas_low | SIGMAS | — |