ComfyUI Node

WanMoEScheduler

Let this node find your Wan 2.2 sigma boundary

By cmeka·Created 11 months ago·Updated 10 months ago· 9
WanMoEScheduler
  • model
  • shift
  • steps
  • steps_high
  • steps_low
  • sigmas
  • sigmas_high
  • sigmas_low
scheduler
steps_high4
steps_low4
boundary0.875
interval0.01
denoise1.00

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.

Categorysampling/custom_sampling/schedulers

Inputs (7)

NameTypeDefaultDescription
modelMODELThe model used for calculating sigmas.
schedulerCOMBOThe scheduler to use for sigma calculation. NOTE: If you do not use sigmas for sampling don't forget to match the scheduler values.
steps_highINT41–99Number of steps for high noise sampling.
steps_lowINT41–99Number of steps for the low noise sampling. NOTE: Higher steps require lower speed lora strength.
boundaryFLOAT0.8750–0.999The 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).
intervalFLOAT0.010.01–1The step size to increment the shift while searching for the optimal value. Lower is more precise.
denoiseFLOAT1.000–1The amount of noise to remove. A value of 1.0 is full denoising (default).

Outputs (7)

NameTypeDescription
shiftFLOAT
stepsINT
steps_highINT
steps_lowINT
sigmasSIGMAS
sigmas_highSIGMAS
sigmas_lowSIGMAS