Nodes/comfy-switch-samplers/MultiStepKSampler
ComfyUI Node

MultiStepKSampler

Three Sampler Stages, One Node

By azazeal04·Created 11 months ago·Updated 11 months ago· 4
MultiStepKSampler
  • model1
  • model2
  • model3
  • positive
  • negative
  • latent_image
  • LATENT
seed0
steps_stage110
steps_stage210
steps_stage310
sampler_stage1
sampler_stage2
sampler_stage3
scheduler_stage1
scheduler_stage2
scheduler_stage3
cfg_stage17.5
cfg_stage27.5
cfg_stage37.5
denoise_stage11.00
denoise_stage21.00
denoise_stage31.00

If StepSwitchKSampler is the two-stage version, MultiStepKSampler is the three-stage version: three sampling passes in a row, each with its own sampler, scheduler, step count, CFG and denoise, all inside one node. Same-family checkpoints, one shared conditioning pair.

Why would you want that? Because "draft, structure, polish" is a real recipe and people usually fake it with three separate KSamplers wired in sequence. This node makes the intent legible: stage 1 lays down composition with a fast converging sampler, stage 2 does the heavy structural work, stage 3 sharpens at low denoise. The README's example is exactly that - three consecutive stages with different samplers, schedulers and denoise values.

How it works

Three chained calls to ComfyUI's own KSampler, each taking the previous stage's latent. steps_stage1/2/3 (defaults 10/10/10) control how long each stage runs, and every stage gets its own sampler_stage*, scheduler_stage*, cfg_stage* and denoise_stage*. The seed ticks up per stage (seed, seed + 1, seed + 2).

Two things the schema tells you that the README doesn't:

  • All three stages always run. The step minimum is 1, so you can't skip a stage from the UI. If you only want two stages, this is the wrong node - StepSwitch is cheaper.
  • model1, model2 and model3 are all required. The code falls back to an earlier model if one's missing, but the UI won't let you leave one unwired. Since it's the same family anyway, plugging the same checkpoint into all three slots is a legitimate move.

The inputs that matter

You'll actually touch three groups:

  • steps_stage1/2/3 - how long each pass runs. Don't blindly keep the 10/10/10 defaults; a 30-step generation is slow.
  • sampler_stage / scheduler_stage** - the per-stage recipes. A common shape: Euler for the draft, DPM++ 2M Karras for structure, then a short low-denoise pass. Karras concentrates denoising effort in the middle of the run, which is exactly why it pairs with a mid-stage.
  • denoise_stage2 / denoise_stage3 - same rule as everywhere in this pack: at 1.0 each later stage re-noises from scratch, so you get three stacked generations instead of a progressive pipeline. Set stage 2 around 0.6 and stage 3 around 0.4 and you get an actual refinement chain.

Everything else - model1/2/3, positive, negative, seed, latent_image - you wire once and mostly forget. The output is a single LATENT for your VAE Decode.

Installing it

Same pack install, no dependencies, no model files:

cd ComfyUI/custom_nodes
git clone https://github.com/azazeal04/comfyui-switch-samplers.git

Restart ComfyUI, or install via ComfyUI Manager by searching comfyui-switch-samplers. The node appears under Azazeal / Switch Samplers.

Where people get burned

  • The denoise trap again. Three stages at 1.0 is three full generations stacked - slow and noisy. It's the most common way to waste time with this node.
  • Cost is real. At default step counts you're doing 30 sampling steps plus loading up to three models. This is a slow recipe by design; a single DPM++ 2M Karras run at 20 steps will beat it on wall-clock for most images.
  • You can't truly skip a stage, and the node will happily run a stage for 1 step doing basically nothing. Fine for iterating, confusing when you forget it's there.

Honest take: you could build all this with stock KSamplers and reroutes. The node's value is keeping three stages in one tidy box with per-stage settings visible at a glance. For a single-model progressive pipeline - Euler draft, Karras structure, low-denoise polish - it's a genuinely nice way to work. For everything else, the Cross variants with per-stage conditioning are the ones with the real superpower.

CategoryAzazeal / Switch Samplers

Inputs (22)

NameTypeDefaultDescription
model1MODEL
model2MODEL
model3MODEL
positiveCONDITIONING
negativeCONDITIONING
seedINT00–18446744073709550000
steps_stage1INT10
steps_stage2INT10
steps_stage3INT10
sampler_stage1COMBO44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38
sampler_stage2COMBO44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38
sampler_stage3COMBO44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38
scheduler_stage1COMBO9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3
scheduler_stage2COMBO9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3
scheduler_stage3COMBO9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3
cfg_stage1FLOAT7.50–20
cfg_stage2FLOAT7.50–20
cfg_stage3FLOAT7.50–20
denoise_stage1FLOAT1.000–1
denoise_stage2FLOAT1.000–1
denoise_stage3FLOAT1.000–1
latent_imageLATENT

Outputs (1)

NameTypeDescription
LATENTLATENT