ComfyUI Node
⬡ Polyhedron Sampler
One sampler for everything. SINGLE = superset of KSampler + KSampler (Advanced): a denoise field plus start/end_at_step + return_with_leftover_noise, full sampler/scheduler lists, add_noise. DUAL EXPERT pill = noise-split two-expert (MoE) denoising in one node (model = HIGH expert, model_low = LOW expert, switched at the boundary, with cfg_low) — used by Wan 2.2. Image and video latents; live preview.
⬡ Polyhedron Sampler
- model
- positive
- negative
- latent_image
- model_low
- sigmas
- sigmas_high
- sigmas_low
- noise
- LATENT
◄dual_moefalse►
◄boundary0.875►
◄cfg_low6.0►
◄seed0►
◄steps20►
◄cfg6.0►
◄sampler_name▾►
◄scheduler▾►
◄denoise1.00►
◄add_noisetrue►
◄start_at_step0►
◄end_at_step10000►
◄return_with_leftover_noisefalse►
◄preview_modeStill · ComfyUI►
◄sigma_shift0.00►
◄handoff_modeContinuous►
◄sampler_lowsame as high►
◄scheduler_lowsame as high►
◄sigma_shift_low-1.00►
CategoryPolyhedron/Sampling
Inputs (28)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | The model used to denoise the latent. | |
| positive | CONDITIONING | Conditioning to include. | |
| negative | CONDITIONING | Conditioning to exclude. | |
| latent_image | LATENT | The latent to denoise (image or video). | |
| dual_moe | BOOLEAN | false | Sampling architecture. Single: one model denoises every step. High + Low: a noise-split mixture-of-experts (MoE) -- the HIGH-noise expert ('model') handles the early, high-sigma steps (structure/motion); the LOW-noise expert ('model_low') the later, low-sigma steps (detail); they hand off at the Handoff noise level. Used by Wan 2.2 (Handoff 0.875 T2V / 0.900 I2V) and by any model family that ships a high/low expert pair. In High + Low the manual start/end_at_step controls are replaced by the automatic Handoff split. |
| boundary | FLOAT | 0.8750–1 | Handoff — the noise level where the run passes from the HIGH-noise expert to the LOW-noise expert. Steps whose sigma is >= Handoff run on the HIGH expert ('model'), the rest on the LOW expert ('model_low'). Higher = the HIGH expert covers fewer (only the loudest) steps. Set it by hand for your task — Text→Video 0.875, Image→Video 0.900 (Wan 2.2 standard). |
| cfg_low | FLOAT | 6.00–100 | High + Low: CFG for the LOW-noise expert pass ('cfg' applies to the HIGH-noise expert). Distilled / Lightning LoRAs use 1.0. |
| seed | INT | 00–18446744073709550000 | Seed for the initial noise. |
| steps | INT | 201–10000 | Number of denoising steps. |
| cfg | FLOAT | 6.00–100 | Classifier-Free Guidance. Flow models (e.g. WAN) usually want a lower value than SD; distilled / Lightning LoRAs use 1.0. In High + Low this is the HIGH-noise expert's CFG. |
| sampler_name | COMBO | Sampling algorithm — the full list, no per-model subset. | |
| scheduler | COMBO | Sigma schedule — the full list. | |
| denoise | FLOAT | 1.000–1 | 1.0 = full generation from noise. Lower keeps the input latent's structure for img2img / v2v (e.g. 0.25). This is the field the stock KSampler (Advanced) does not expose. |
| add_noise | BOOLEAN | true | Add initial noise. Turn off for the LOW pass of a manual HIGH/LOW split (denoise an already-noised latent). |
| start_at_step | INT | 00–10000 | First sigma step to run. The LOW pass of a manual split starts where the HIGH pass ended (e.g. 19). |
| end_at_step | INT | 100000–10000 | Last sigma step to run (clamped to the schedule). The HIGH pass of a manual split ends here (e.g. 19 of 36). |
| return_with_leftover_noise | BOOLEAN | false | Leave the latent partially noised for a following pass — ON for the HIGH pass, OFF for the LOW / final pass (OFF forces a clean final denoise). Ignored in High + Low mode (the boundary drives the split there). |
| preview_mode | COMBO | Still · ComfyUI | In-node live preview decoder — visualisation only, it NEVER changes the output latent. 'Still ·' modes show a SINGLE frame that refreshes each step (like the KSampler / standard ComfyUI); 'Video ·' modes ANIMATE every frame of the predicted latent (only visible when generating video — a single image has one frame). 'Still · ComfyUI' uses ComfyUI's own previewer (honours --preview-method; models/vae_approx TAESD/TAEHV or latent2rgb). 'Still · latent2rgb' forces the model-free latent2rgb view (ignores vae_approx even when present). 'Video · latent2rgb' is the same projection animated ('smooth' LANCZOS / 'crisp' NEAREST). 'Video · TAE' animates a TAE decode: 'lighttaew2_1' is the WAN video TAE (TAEHV); 'taew2_1' the image-TAE path. Anything unavailable falls back to latent2rgb (smooth). Applies from the start of each render. |
| sigma_shift | FLOAT | 0.000–20 | Flow-matching sigma shift (ModelSamplingSD3). 0 = OFF: the model_sampling is left as-is — use an upstream ModelSamplingSD3 node, or the model's native shift. WAN 2.2 flow sampling NEEDS a shift: set 8.0 to match the Wan MoE KSampler. Without it a short run cannot converge and leaves residual noise (RGB speckle). Applied to BOTH experts in High + Low (before the schedule and the boundary split are computed) unless sigma_shift_low gives the LOW expert its own value. When driving with an external SIGMAS curve, leave this at 0 (the curve owns the schedule). Leave at 0 for non-flow models (SD/SDXL) — a flow shift only makes sense for flow-matching models like WAN. |
| handoff_mode | COMBO | Continuous | High + Low: how the HIGH-noise expert hands the latent to the LOW-noise expert at the Handoff. 'Continuous' (default) runs both experts as ONE unbroken denoise — the HIGH expert stops leaving leftover noise and the LOW expert picks it straight up (this node's original behaviour, the mathematically clean euler-continuation). 'Wan MoE parity' reproduces the Wan MoE KSampler exactly: the switch happens ONE step earlier, the HIGH expert finishes on a clean x0 estimate, and the LOW expert re-noises that x0 with the SAME seed noise before denoising to the end — use this to match Wan 2.2 res_2s output. Applies to the built-in schedule AND to external SIGMAS in High + Low (two segments on sigmas_high/sigmas_low, or ONE curve on sigmas that the sampler splits at the Handoff). Single mode ignores this. |
| sampler_low | COMBO | same as high | High + Low: sampling ALGORITHM for the LOW-noise expert ('sampler_name' drives the HIGH expert). Free in every handoff mode — a sampler only CONSUMES the sigma schedule, it does not define it. Note that ancestral / SDE samplers (*_a, *_sde) inject fresh noise every step, which changes the character of the LOW pass. |
| scheduler_low | COMBO | same as high | High + Low: sigma SCHEDULE for the LOW-noise expert. Only honoured with handoff_mode = 'Wan MoE parity', where the two segments are independent (the HIGH expert finishes on a clean x0 and the LOW expert re-noises it onto ITS OWN schedule). In 'Continuous' both experts share ONE schedule by construction (the LOW pass picks up the leftover noise at the Handoff sigma), so this is IGNORED and the console says so. Inert when an external SIGMAS curve drives the run — the curve owns the schedule. |
| sigma_shift_low | FLOAT | -1.00-1–20 | Flow-matching sigma shift for the LOW-noise expert (High + Low). -1 = same as high (default): the LOW expert follows sigma_shift. 0 = OFF for the LOW expert: its model_sampling is left untouched even when sigma_shift is set. Any positive value gives the LOW expert its OWN shift -- e.g. sigma_shift 8.0 with sigma_shift_low 5.0 replaces a graph that used two upstream ModelSamplingSD3 nodes (8 high / 5 low). Only bites with handoff_mode = 'Wan MoE parity', where the LOW segment's schedule is built from the LOW expert; in 'Continuous' both experts share ONE schedule (built from the HIGH expert) and this is inert -- the console says so. Ignored in Single mode and when an external SIGMAS curve drives the schedule. |
| model_lowopt | MODEL | High + Low: the LOW-noise expert. The 'model' input is the HIGH-noise expert. (Wan 2.2 ships these as a high/low pair.) Connect this and set the mode pill to High + Low. | |
| sigmasopt | SIGMAS | An external sigma schedule (e.g. from the Polyhedron Sigma Curve). Overrides scheduler/steps/denoise — the array IS the schedule (length = steps; last value decides a clean vs. leftover-noise finish). High + Low mode: the sampler splits this ONE curve at the Handoff and runs both experts on the slices (boundary stays active; handoff_mode decides the seam). Ignored if sigmas_high + sigmas_low are both connected. | |
| sigmas_highopt | SIGMAS | High + Low mode: the HIGH-noise expert's sigma SEGMENT (NOT a full curve — it should END where the LOW segment begins; for a full curve use the single `sigmas` input). Needs sigmas_low connected too. Together they drive the split, so boundary is ignored. | |
| sigmas_lowopt | SIGMAS | High + Low mode: the LOW-noise expert's sigma SEGMENT. Continuous: its first sigma is snapped to the HIGH segment's last (continuous handoff). Wan MoE parity: fully independent of the HIGH segment — HIGH ends on x0 and this segment re-noises it to its own first sigma. | |
| noiseopt | NOISE | Optional noise SOURCE (e.g. the Polyhedron Seed's `noise` output, or Core's RandomNoise). It replaces the sampler's own gaussian starting noise -- this is the noise the model denoises, so its character (brown, fractal, ...) reaches the result. Unwired, nothing changes. Ignored while add_noise is off. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| LATENT | LATENT | The denoised latent. |