Wan2.2 MoE KSampler
Sampler Handoff for Wan 2.2, in One Node
- model_high_noise
- model_low_noise
- positive
- negative
- latent_image
- vae
- LATENT
- IMAGE
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=0to 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
ModelSamplingSD3in front of this node and keptsigma_shiftat 8, both apply a shift. Use-1here, 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.
Inputs (19)
| Name | Type | Default | Description |
|---|---|---|---|
| model_high_noise | MODEL | High-noise expert (first stage) for Wan2.2 MoE sampling. | |
| model_low_noise | MODEL | Low-noise expert (second stage) for Wan2.2 MoE sampling. | |
| boundary | FLOAT | 0.8750–1 | Boundary (t_moe): timestep at which experts switch. Recommended: 0.875 for t2v, 0.9 for i2v. |
| seed | INT | 00–18446744073709550000 | Random seed shared by both experts (single noise trajectory). |
| steps | INT | 201–10000 | Total steps for the single MoE schedule. |
| cfg_high_noise | FLOAT | 4.00–100 | CFG for the high-noise expert. |
| cfg_low_noise | FLOAT | 3.00–100 | CFG for the low-noise expert. |
| sampler_name | COMBO | Sampler algorithm shared by both experts. | |
| scheduler | COMBO | Scheduler shared by both experts. | |
| sigma_shift | FLOAT | 8.00-1–100 | Shift applied to both experts (same purpose as ModelSamplingSD3 shift). Use -1 to bypass and leave models unpatched. |
| positive | CONDITIONING | Positive conditioning. | |
| negative | CONDITIONING | Negative conditioning. | |
| latent_image | LATENT | Input latent to denoise. | |
| denoise | FLOAT | 1.000–1 | Denoise amount. Lower values preserve input structure (img2img / i2v). |
| vae | VAE | VAE used to decode the final latent for the IMAGE preview output. | |
| latent_upscale | BOOLEAN | false | Optional latent upscale pass after MoE sampling, resampled with the low-noise expert. |
| ratio | FLOAT | 1.501–4 | Latent upscale ratio for the optional pass. |
| upscale_method | COMBO | Latent upscale algorithm. | |
| upscaling_denoise | FLOAT | 0.500.01–1 | Denoise strength for the optional upscale resample pass. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| LATENT | LATENT | Denoised latent (upscaled if enabled). |
| IMAGE | IMAGE | Decoded preview image. |