Nodes/comfy-switch-samplers/CrossMultiStepKSampler
ComfyUI Node

CrossMultiStepKSampler

Three Different Models, One Generation

By azazeal04·Created about a year ago·Updated about a year ago· 4
CrossMultiStepKSampler
  • model1
  • positive1
  • negative1
  • vae1
  • model2
  • positive2
  • negative2
  • vae2
  • model3
  • positive3
  • negative3
  • vae3
  • 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 CrossStepSwitchKSampler is the two-stage cross-model node, CrossMultiStepKSampler is the three-model kitchen sink. The README's example pipeline tells you everything: SDXL for base composition → Flux for style transfer → Qwen Image for final polish. Three architectures, three VAEs, three conditioning pairs, one generation.

It's the answer to a question people have been asking since early 2024 - "is there a node that lets you schedule different models mid-generation?" - for the case where those models aren't even the same family. The author tested it against Flux, Qwen Image and Wan models, and it shows in the code.

How it works

Three chained KSampler calls. Each stage has its own model, VAE, positive/negative conditioning, step count, sampler, scheduler, CFG and denoise. Between stages, if the VAE changes, it decodes the previous latent to pixels and re-encodes it with the next stage's VAE (the latent bridge); same VAE, the latent flows straight through. The bridge snaps dimensions to multiples of 8 and has video-tensor handling for Wan-style models. Seed ticks up per stage - seed, seed + 1, seed + 2.

Because the conditioning is per-stage, each stage gets text from the right encoder for its model - SDXL's CLIP, Flux's CLIP-L + T5, Qwen's own stack. That's the thing that makes three architectures in one run actually work.

The inputs that matter

There are a lot of inputs. Buckets, not a shopping list:

  • model1/2/3, vae1/2/3, positive1/2/3, negative1/2/3 - three full stacks. This is the whole point and the whole cost.
  • steps_stage1/2/3 - how long each model works. All three stages always run (min 1 step each); you can't skip one from the UI.
  • sampler_stage1/2/3, scheduler_stage1/2/3, cfg_stage1/2/3, denoise_stage1/2/3 - per-stage recipes, and yes, the denoise rule applies again: later stages at 1.0 restart instead of refining. Keep stage 2 and 3 below 1.0 for a real progressive pipeline.
  • seed and latent_image - the usual.

Output: one LATENT, into a VAE Decode like any sampler.

Installing it

Same one-line install as the rest of the pack, and it's dependency-free - no requirements.txt, no model downloads, just ComfyUI core:

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

Restart ComfyUI, or search comfyui-switch-samplers in ComfyUI Manager. It lives under Azazeal / Switch Samplers.

The honest takes

  • This node is a lot. A huge schema, a huge wiring job, and if you don't have a real three-model recipe you're paying the complexity tax for nothing. Start with CrossStepSwitchKSampler; graduate here when the workflow actually needs a third model.
  • VRAM is the real limit. Three architectures, three VAEs, three text encoders, all resident. On consumer cards you'll want fp8 weights and to accept some offloading. This is a slow, hungry pipeline by construction - three sampling runs plus two VAE bridges.
  • Two bridges, two lossy round trips. Every VAE encode/decode costs detail, and this node does two of them per generation. The final stage does the visible work, so put the detail-oriented model last - which is presumably why "Qwen for final polish" works as a recipe (its decoder is tuned for crisp text).
  • Same seed behavior as the whole pack - each stage increments the seed, so the split points are part of your reproducibility equation.

Reach for this when you genuinely want three models collaborating - SDXL structure, Flux texture, Qwen finish, or a video pipeline ending in Wan. It's not subtle and it's not cheap, but it's the one node that keeps a three-architecture generation in a single box.

CategoryAzazeal / Switch Samplers

Inputs (29)

NameTypeDefaultDescription
model1MODEL—
positive1CONDITIONING—
negative1CONDITIONING—
vae1VAE—
model2MODEL—
positive2CONDITIONING—
negative2CONDITIONING—
vae2VAE—
model3MODEL—
positive3CONDITIONING—
negative3CONDITIONING—
vae3VAE—
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–100—
cfg_stage2FLOAT7.50–100—
cfg_stage3FLOAT7.50–100—
denoise_stage1FLOAT1.000–1—
denoise_stage2FLOAT1.000–1—
denoise_stage3FLOAT1.000–1—
latent_imageLATENT—

Outputs (1)

NameTypeDescription
LATENTLATENT—