Wan 2.2 MoE Sampler (WAS)
The whole high/low-noise pipeline as one node
- high_model
- low_model
- positive
- negative
- vae
- latent
- final_low_model
- IMAGE
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 reuseslow_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.
Inputs (35)
| Name | Type | Default | Description |
|---|---|---|---|
| high_model | MODEL | Primary high noise Wan 2.2 UNet model used for the first stage. | |
| high_model_shift | FLOAT | 3.000–100 | Sampling shift amount applied to the high model (SD3 patch). |
| high_steps | INT | 100–10000 | Number of sampling steps for the high model. |
| high_cfg | FLOAT | 4.50–64 | Classifier-free guidance for the high model. |
| high_denoise | FLOAT | 1.0000–1 | Denoise strength for the high model pass. |
| low_model | MODEL | Secondary low noise Wan 2.2 UNet model for refinement. | |
| low_model_shift | FLOAT | 3.000–100 | Sampling shift amount applied to the low model (SD3 patch). |
| low_steps | INT | 100–10000 | Number of sampling steps for the low model. |
| low_cfg | FLOAT | 1.00–64 | Classifier-free guidance for the low model. |
| low_denoise | FLOAT | 1.0000–1 | Denoise strength for the low model pass. |
| low_step_offset | FLOAT | 0.4000–1 | Start the low model at this fraction of its total steps (0–1). |
| final_low_pass | COMBO | enable | Run an extra refinement using the low model at the end. |
| final_low_shift | FLOAT | 3.000–100 | Sampling shift amount for the final low pass (SD3 patch). |
| final_pass_denoise | FLOAT | 0.5000–1 | Denoise strength for the final low pass. |
| upscale_stage | COMBO | early | When to upscale latents: before low pass, after, both, or off. |
| upscale_factor | FLOAT | 3.01–8 | Scale factor for early/both upscaling. |
| upscale_mode | COMBO | nearest-exact | Interpolation method for early/both upscaling. |
| late_upscale_factor | FLOAT | 1.01–8 | Scale factor for late/both upscaling. |
| late_upscale_mode | COMBO | bislerp | Interpolation method for late/both upscaling. |
| sampler_name | COMBO | euler | Sampler algorithm to use. |
| scheduler | COMBO | simple | Noise schedule for the sampler. |
| pipeline_mode | COMBO | moe | Mixture-of-Experts pipeline, simpler non-MoE variant, or I2V-optimized non-MoE. |
| noise_inject_strength | FLOAT | 0.2000–5 | Extra noise injected between phases (0 disables). |
| precision_mode | COMBO | auto | GPU AMP precision to use (auto selects best). |
| scene_batches | INT | 11–64 | How many scenes to generate from the same input latent. |
| store_scenes_cpu | COMBO | enable | Move intermediate tensors to CPU to save VRAM. |
| scene_transition | COMBO | cut | Transition mode when concatenating multiple scenes. |
| scene_transition_frames | INT | 00–4096 | Number of frames to overlap for transitions (0 cuts). |
| transition_softness | FLOAT | 0.1500–0.5 | Softness/feathering used in transition masks. |
| positive | CONDITIONING | Positive conditioning for the sampler (can be a list per scene). | |
| negative | CONDITIONING | Negative conditioning for the sampler (can be a list per scene). | |
| vae | VAE | VAE used to decode latents to images. | |
| latent | LATENT | Input latent to process (B,C,F,H,W or B,C,H,W). | |
| seed | INT | 00–18446744073709550000 | Base random seed; scenes use deterministic offsets. |
| final_low_modelopt | MODEL | Final low noise Wan 2.2 UNet model for refinement. If not provided, the low model is used. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |