Nodes/WAS_Extras/Wan 2.2 MoE Sampler (WAS)
ComfyUI Node

Wan 2.2 MoE Sampler (WAS)

The whole high/low-noise pipeline as one node

By WASasquatch·Created 3 years ago·Updated 17 days ago· 43
Wan 2.2 MoE Sampler (WAS)
  • high_model
  • low_model
  • positive
  • negative
  • vae
  • latent
  • final_low_model
  • IMAGE
high_model_shift3.00
high_steps10
high_cfg4.5
high_denoise1.000
low_model_shift3.00
low_steps10
low_cfg1.0
low_denoise1.000
low_step_offset0.400
final_low_passenable
final_low_shift3.00
final_pass_denoise0.500
upscale_stageearly
upscale_factor3.0
upscale_modenearest-exact
late_upscale_factor1.0
late_upscale_modebislerp
sampler_nameeuler
schedulersimple
pipeline_modemoe
noise_inject_strength0.200
precision_modeauto
scene_batches1
store_scenes_cpuenable
scene_transitioncut
scene_transition_frames0
transition_softness0.150
seed0

Wan 2.2 splits generation across two experts: a high-noise model that handles motion and scene composition, and a low-noise model that refines detail. The normal way to run that in ComfyUI is two KSamplers with a model swap in between, plus whatever upscaling and refinement passes you want stitched on manually. This node collapses that whole pipeline - high pass, low pass, optional final refinement, optional upscaling stages, even multi-scene batching - into one enormous, single node.

How it works

You load both experts (high_model, low_model) and the node runs them in sequence: the high-noise model samples first (high_steps, high_cfg, high_denoise), then the low-noise model takes over for detail (low_steps, low_cfg, low_denoise), starting partway through its own step count if you set low_step_offset above zero - useful for skipping redundant early low-noise steps rather than re-doing work the high pass already settled. Optionally, final_low_pass runs a third, lighter refinement at the end (final_pass_denoise), and you can hand it a separate final_low_model if you don't want to reuse the same low-noise checkpoint for that closing pass.

Everything else layered on top is genuinely optional power-user territory: upscaling can happen early, late, both, or not at all (upscale_stage, upscale_factor/upscale_mode and their late_ counterparts), pipeline_mode switches between the full MoE pipeline and simpler non-MoE / I2V-oriented variants, noise_inject_strength adds extra noise between phases, and scene_batches with scene_transition can generate multiple scenes from the same input latent and stitch them together with cuts, crossfades, or wipes. sampler_name and scheduler are the same 44-sampler / 9-scheduler lists as a standard KSampler. Leave all of this at default until the basic high/low pass is working - it's a lot of surface area to debug at once.

One thing to know before you wire it up: the output is IMAGE, not LATENT. This node decodes internally using the vae input you give it, so it hands back finished pixels, not a latent for you to decode yourself downstream.

The inputs and outputs that matter

  • high_model / low_model (MODEL) - your Wan 2.2 high-noise and low-noise checkpoints. Both are required; this is a two-expert pipeline by design.
  • positive / negative (CONDITIONING), latent (LATENT), vae (VAE), seed - the usual sampler inputs.
  • high_cfg (default 4.5) / low_cfg (default 1) - note these defaults aren't the same number. The low-noise refinement pass wanting a much lower CFG than the high-noise composition pass is a known Wan 2.2 quirk, not a typo - don't set them equal without a reason.
  • final_low_model (optional, MODEL) - use a different checkpoint for the closing refinement pass; if you leave it blank, the node reuses low_model.

Single output: IMAGE - already decoded, ready for a Save/Preview node.

How to install it

Via ComfyUI Manager: search "WAS_Extras", install, restart. Manually:

cd ComfyUI/custom_nodes
git clone https://github.com/WASasquatch/WAS_Extras

Restart ComfyUI. The node itself has no extra Python dependencies, but you do need both Wan 2.2 UNet checkpoints (high-noise and low-noise) downloaded and in your model folders before this will run - that's real VRAM for two large models loaded at once, not a small ask.

Common issues & troubleshooting

Out of VRAM. You're holding two Wan 2.2 UNets in memory simultaneously (three if you supply final_low_model separately), plus whatever scene_batches and upscaling stages you've enabled. If you're stacking multiple scene_batches, turn on store_scenes_cpu to move intermediate tensors off the GPU between scenes.

Output looks over-cooked or plastic. Check low_cfg first - the community-documented convention for Wan 2.2's low-noise pass is to run it close to CFG 1, not the same CFG you'd use for the high-noise pass. Cranking low_cfg up to match high_cfg is a common way to over-guide the detail pass.

Motion or composition looks wrong but detail is fine. That's a high-noise-pass problem - adjust high_steps/high_cfg/high_denoise, not the low-noise settings, since the high pass is what's responsible for scene layout and motion.

Scene transitions look abrupt despite setting scene_transition. Increase scene_transition_frames - a transition mode with zero overlap frames still cuts hard regardless of which mode you picked; the frame count is what actually creates the blend window.

Categorysampling/moe

Inputs (35)

NameTypeDefaultDescription
high_modelMODELPrimary high noise Wan 2.2 UNet model used for the first stage.
high_model_shiftFLOAT3.000–100Sampling shift amount applied to the high model (SD3 patch).
high_stepsINT100–10000Number of sampling steps for the high model.
high_cfgFLOAT4.50–64Classifier-free guidance for the high model.
high_denoiseFLOAT1.0000–1Denoise strength for the high model pass.
low_modelMODELSecondary low noise Wan 2.2 UNet model for refinement.
low_model_shiftFLOAT3.000–100Sampling shift amount applied to the low model (SD3 patch).
low_stepsINT100–10000Number of sampling steps for the low model.
low_cfgFLOAT1.00–64Classifier-free guidance for the low model.
low_denoiseFLOAT1.0000–1Denoise strength for the low model pass.
low_step_offsetFLOAT0.4000–1Start the low model at this fraction of its total steps (0–1).
final_low_passCOMBOenableRun an extra refinement using the low model at the end.
final_low_shiftFLOAT3.000–100Sampling shift amount for the final low pass (SD3 patch).
final_pass_denoiseFLOAT0.5000–1Denoise strength for the final low pass.
upscale_stageCOMBOearlyWhen to upscale latents: before low pass, after, both, or off.
upscale_factorFLOAT3.01–8Scale factor for early/both upscaling.
upscale_modeCOMBOnearest-exactInterpolation method for early/both upscaling.
late_upscale_factorFLOAT1.01–8Scale factor for late/both upscaling.
late_upscale_modeCOMBObislerpInterpolation method for late/both upscaling.
sampler_nameCOMBOeulerSampler algorithm to use.
schedulerCOMBOsimpleNoise schedule for the sampler.
pipeline_modeCOMBOmoeMixture-of-Experts pipeline, simpler non-MoE variant, or I2V-optimized non-MoE.
noise_inject_strengthFLOAT0.2000–5Extra noise injected between phases (0 disables).
precision_modeCOMBOautoGPU AMP precision to use (auto selects best).
scene_batchesINT11–64How many scenes to generate from the same input latent.
store_scenes_cpuCOMBOenableMove intermediate tensors to CPU to save VRAM.
scene_transitionCOMBOcutTransition mode when concatenating multiple scenes.
scene_transition_framesINT00–4096Number of frames to overlap for transitions (0 cuts).
transition_softnessFLOAT0.1500–0.5Softness/feathering used in transition masks.
positiveCONDITIONINGPositive conditioning for the sampler (can be a list per scene).
negativeCONDITIONINGNegative conditioning for the sampler (can be a list per scene).
vaeVAEVAE used to decode latents to images.
latentLATENTInput latent to process (B,C,F,H,W or B,C,H,W).
seedINT00–18446744073709550000Base random seed; scenes use deterministic offsets.
final_low_modeloptMODELFinal low noise Wan 2.2 UNet model for refinement. If not provided, the low model is used.

Outputs (1)

NameTypeDescription
IMAGEIMAGE