Nodes/KSampler for Wan 2.2 MoE for ComfyUI/Wan MoE KSampler (Advanced)
ComfyUI Node

Wan MoE KSampler (Advanced)

The auto-swap sampler with the extra knobs

By stduhpf·Created 12 months ago·Updated 10 months ago· 247
Wan MoE KSampler (Advanced)
  • model_high_noise
  • model_low_noise
  • positive
  • negative
  • latent_image
  • LATENT
boundary0.875
add_noise
noise_seed0
steps20
cfg_high_noise8.0
cfg_low_noise8.0
sampler_name
scheduler
sigma_shift8.00
start_at_step0
end_at_step10000
return_with_leftover_noise

This is the same trick as the plain Wan MoE KSampler, with the extra controls from ComfyUI's KSampler (Advanced) bolted on. Same core job: Wan 2.2 A14B is a two-expert model, a high-noise expert for motion and composition and a low-noise expert for detail, and this node runs both and swaps between them automatically at the signal-to-noise crossover instead of at a step number you had to guess. What "Advanced" buys you is control over noise and over which slice of the schedule this node handles, which is exactly what you need when this sampler isn't the only one in the chain.

When you actually want this one

If you're doing a single, self-contained Wan generation, the basic node is simpler and you should use it. Reach for Advanced when you're building a multi-stage pipeline, a base pass that hands leftover noise to a refiner, an upscale-then-resample setup, or anything where you want to run only part of the denoising schedule in this node and the rest somewhere else. Those patterns need explicit noise control and step ranges, and that's precisely what the extra inputs give you.

The inputs that matter

Everything from the basic node is here, both experts, boundary, per-expert CFG, steps, sampler_name, scheduler, sigma_shift, and the conditioning/latent inputs. If you're new to the pack, read the basic node's page first, that's where the MoE swap and the boundary timestep (0.875 for T2V, 0.900 for I2V) are explained. The Advanced-only additions:

  • add_noise (enable/disable) - whether this node adds fresh noise to the incoming latent before sampling. Enable it for a normal from-scratch generation. Disable it when the latent already carries noise from an upstream sampler and you're continuing, not restarting.
  • start_at_step and end_at_step - the slice of the schedule this node runs. Defaults are 0 and 10000, so out of the box it runs the whole thing. Set end_at_step short to stop early and hand off; set start_at_step to pick up where another sampler left off.
  • return_with_leftover_noise (enable/disable) - whether the output latent keeps its remaining noise instead of being fully denoised. Enable it on a base pass so the next sampler has noise to work with; disable it on the final pass so you get a clean latent to decode.
  • noise_seed - the seed for the added noise (the Advanced node's name for what the basic node calls seed).

Note the CFG defaults differ from the basic node: both cfg_high_noise and cfg_low_noise default to 8 here rather than 4/3. If you're porting settings over from the simple node, don't just accept the defaults, set the CFG values deliberately. The output is a single LATENT, same as any sampler, which either decodes or feeds the next stage depending on your return_with_leftover_noise choice.

How to install it

Same pack, same two ways:

  • ComfyUI Manager - search KSampler for Wan 2.2 MoE, install, restart.
  • Manual - cd ComfyUI/custom_nodes && git clone https://github.com/stduhpf/ComfyUI-WanMoeKSampler, then restart ComfyUI.

No heavy dependencies, no bundled model files, it's ComfyUI's sampling code repackaged with the auto-swap logic. You supply the two Wan 2.2 experts. The repo includes example workflows worth cloning as a starting point.

Common issues & troubleshooting

The classic advanced-KSampler mistake: mismatched noise flags between stages. If you run a base pass with return_with_leftover_noise: enable but the next sampler has add_noise: enable, you're double-noising and the result turns to mush. The rule: the pass that ends early returns leftover noise, and the pass that continues it disables add_noise. Get those two flags consistent across the chain.

Nothing renders past a certain step. Check end_at_step. If you set it low for a handoff and then forgot to add the downstream sampler, you've only denoised part of the way and the latent is still full of noise.

Plastic skin, dead motion. Same as everywhere in Wan land: that's a speed LoRA on the high-noise pass, not this node. Put lightx2v/CausVid on the model_low_noise input only, at reduced strength. The high-noise expert is where composition and motion live, keep it clean.

Boundary tweaks feel like they do nothing. The swap point is a diffusion timestep mapped onto your step schedule, so small changes may not move the actual swap step, especially at low step counts. Use the pack's SplitSigmasAtT node if you want to read off exactly which step the swap lands on.

Categorysampling

Inputs (17)

NameTypeDefaultDescription
model_high_noiseMODELThe first expert of the model used for denoising the input latent.
model_low_noiseMODELThe second expert of the model used for denoising the input latent.
boundaryFLOAT0.8750–1
add_noiseCOMBO2 options: enable, disable
noise_seedINT00–18446744073709550000
stepsINT201–10000
cfg_high_noiseFLOAT8.00–100
cfg_low_noiseFLOAT8.00–100
sampler_nameCOMBO44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38
schedulerCOMBO9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3
sigma_shiftFLOAT8.000–100Same purpose as the a shift parameter in the ModelSamplingSD3 node (same value applied to both models)
positiveCONDITIONING
negativeCONDITIONING
latent_imageLATENT
start_at_stepINT00–10000
end_at_stepINT100000–10000
return_with_leftover_noiseCOMBO2 options: disable, enable

Outputs (1)

NameTypeDescription
LATENTLATENT