Nodes/AUN ComfyUI Nodes/Wan2.2 MoE KSampler
ComfyUI Node

Wan2.2 MoE KSampler

Sampler Handoff for Wan 2.2, in One Node

By loz2754·Created 9 months ago·Updated a day ago· 6
Wan2.2 MoE KSampler
  • model_high_noise
  • model_low_noise
  • positive
  • negative
  • latent_image
  • vae
  • LATENT
  • IMAGE
boundary0.875
seed0
steps20
cfg_high_noise4.0
cfg_low_noise3.0
sampler_name
scheduler
sigma_shift8.00
denoise1.00
latent_upscalefalse
ratio1.50
upscale_method
upscaling_denoise0.50

Wan 2.2 denoises with two models - a high-noise expert for motion and composition, a low-noise expert for detail - and vanilla ComfyUI makes you build that handoff yourself: two KSamplers, step-math nodes to decide where the first one stops, ModelSamplingSD3 on both, a pile of converted inputs. Get the split wrong and the second pass re-noises your latents or leaves noise in the final image.

Wan2.2 MoE KSampler (AUNWan22MoE) is that handoff as a single node, plus an optional upscale tail. It's newly added in pack version 2.31.0, so treat it as the author's port rather than a battle-tested community standard - worth knowing before you rebuild your main workflow around it.

How the handoff actually works

The node computes its sigma schedule from the high-noise expert's sampling object using your chosen scheduler and step count, converts those sigmas to timesteps, and walks them to find the first step where the timestep drops below boundary. That index is the switch point. Then it runs comfy.sample.sample twice against the same noise tensor:

  • High expert: start_step=0 to the switch, with noise injection disabled when the low expert is going to continue - so no fresh noise is thrown at your latent mid-flight.
  • Low expert: from the switch to the end of the schedule.

One seed, one noise trajectory, two CFGs. If you've ever wondered why Wan workflows show CFG 4 for the first pass and 3 for the second, this is why: cfg_high_noise and cfg_low_noise are separate guidance values on separate sub-passes. The 4/3 defaults are the sane starting point.

sigma_shift patches both experts on a clone - same purpose as ModelSamplingSD3's shift - and the tooltip's -1 really does bypass it and leave the models unpatched. Use that if you're already shifting upstream.

Inputs that matter, and the preview VAE

model_high_noise and model_low_noise take the two experts - a loader like the pack's own AUNInputsWan22Basic hands them over. positive, negative and latent_image are the usual trio, denoise drops below 1 for img2img/i2v, and steps, sampler_name, scheduler and seed are shared by both experts.

Then there's vae. It isn't used for sampling at all - it exists so the node can hand you a decoded IMAGE preview alongside the LATENT. It's required, so you pay for one decode even if you only want the latent.

boundary is the value people misread as a percentage of steps. It isn't: it's a timestep threshold on the schedule, so where the switch lands depends on your steps, scheduler and sigma_shift together. 0.875 is the recommendation for t2v, 0.9 for i2v. The node prints switching model at step N to the console - read it.

The latent upscale tail

Flip latent_upscale on and, after the MoE pass, the node scales the latent by ratio (default 1.5) using upscale_method, adds fresh noise, and resamples with the low-noise expert. The step count for that pass is derived, not typed: upscaling_denoise times your total steps - 0.5 at 20 steps means roughly 10 steps of resample. Note the author's own framing: with latent_upscale off, the output matches the Wan MoE KSampler trajectory.

Install

ComfyUI Manager → search the pack title, or:

cd ComfyUI/custom_nodes
git clone https://github.com/loz2754/AUN-ComfyUI-Nodes

Restart. The pack's runtime deps are tiny - piexif, opencv-python-headless, imageio-ffmpeg, requests - and Manager runs install.py for you. Manual cloners who hit a missing module should run:

pip install -r custom_nodes/AUN-ComfyUI-Nodes/requirements.txt

Nothing extra is needed for this node; the VRAM cost is what it is, since both 14B experts sit resident at once.

Where people get burned

  • switching model at step 0. If the boundary lands before your first scheduled step - very possible with short schedules and heavy sigma shift - the high expert never runs at all (the high pass only runs when the switch index is greater than zero). You get a render from the low expert alone, and any high-noise LoRA or CFG 4 you configured was decoration.
  • Don't double-shift. If you left a ModelSamplingSD3 in front of this node and kept sigma_shift at 8, both apply a shift. Use -1 here, or drop the other node.
  • Speed-LoRA numbers. With lightx2v/CausVid distillation LoRAs the community rule is CFG 1.0 and a handful of steps, and best practice per the Wan ecosystem threads is to apply those LoRAs to the low-noise pass only. Set both CFG widgets to 1.0 for that; leaving 4 and 3 on a 4-step distilled schedule is where the plastic-skin complaints come from.
  • Full quality is slow. 20–30 steps at 1280x720 on a 5090 is around 25 minutes. That's the model, not the node.
  • It's brand new - pack version 2.31.0, one day old as of writing - so if the trajectory looks off, check that console line and file it upstream rather than assuming your workflow is broken.
CategoryAUN Nodes/KSampler

Inputs (19)

NameTypeDefaultDescription
model_high_noiseMODELHigh-noise expert (first stage) for Wan2.2 MoE sampling.
model_low_noiseMODELLow-noise expert (second stage) for Wan2.2 MoE sampling.
boundaryFLOAT0.8750–1Boundary (t_moe): timestep at which experts switch. Recommended: 0.875 for t2v, 0.9 for i2v.
seedINT00–18446744073709550000Random seed shared by both experts (single noise trajectory).
stepsINT201–10000Total steps for the single MoE schedule.
cfg_high_noiseFLOAT4.00–100CFG for the high-noise expert.
cfg_low_noiseFLOAT3.00–100CFG for the low-noise expert.
sampler_nameCOMBOSampler algorithm shared by both experts.
schedulerCOMBOScheduler shared by both experts.
sigma_shiftFLOAT8.00-1–100Shift applied to both experts (same purpose as ModelSamplingSD3 shift). Use -1 to bypass and leave models unpatched.
positiveCONDITIONINGPositive conditioning.
negativeCONDITIONINGNegative conditioning.
latent_imageLATENTInput latent to denoise.
denoiseFLOAT1.000–1Denoise amount. Lower values preserve input structure (img2img / i2v).
vaeVAEVAE used to decode the final latent for the IMAGE preview output.
latent_upscaleBOOLEANfalseOptional latent upscale pass after MoE sampling, resampled with the low-noise expert.
ratioFLOAT1.501–4Latent upscale ratio for the optional pass.
upscale_methodCOMBOLatent upscale algorithm.
upscaling_denoiseFLOAT0.500.01–1Denoise strength for the optional upscale resample pass.

Outputs (2)

NameTypeDescription
LATENTLATENTDenoised latent (upscaled if enabled).
IMAGEIMAGEDecoded preview image.