Nodes/ComfyUI Extra Samplers/SamplerCustomModelMixtureDuo
ComfyUI Node

SamplerCustomModelMixtureDuo

Two checkpoints trading turns, step by step

By Clybius·Created 3 years ago·Updated 2 years ago· 104
SamplerCustomModelMixtureDuo
  • model
  • model2
  • positive
  • negative
  • sampler
  • sampler2
  • sigmas
  • sigmas2
  • latent_image
  • output
  • denoised_output
add_noisetrue
add_noise_pass2true
return_noisy_pass1false
noise_type
noise_seed0
cfg8.0
cfg28.0
hr_upscale1.0

SamplerCustomModelMixtureDuo is the wild one in the pack: it runs two different checkpoints on the same latent, alternating which one does the work every step. From ComfyUI Extra Samplers by Clybius, it's the "two chefs in the kitchen, taking turns at the stove" node - and like real kitchens, it can be great or a mess depending on who's cooking.

The mechanism is genuinely unusual, and it's all visible in the source. The sampler loop walks the sigmas schedule and checks if (i % 2) == 0: even steps run through model with its own sampler, sigmas, and cfg; odd steps run through model2 with its own sampler2, sigmas2, and cfg2. So model A does step 1, model B does step 2, A does step 3, and so on - each model gets its own full set of sampling parameters, and the two can even sit on different devices (the code routes each model to its own load_device). On top of the alternation, the "Duo" part means it inherits the two-pass high-res structure from the other Duo node: a hr_upscale second pass with its own sampler and cfg.

The inputs that matter:

  • model / model2 - the two checkpoints alternating per step. They don't need to match in style; mismatched styles are exactly what this node is for (and often a disaster).
  • sampler / sampler2, cfg / cfg2, sigmas / sigmas2 - each model's independent sampling config.
  • hr_upscale - the second-pass hires multiplier (1.0 = off).
  • noise_type, noise_seed, add_noise, add_noise_pass2, return_noisy_pass1 - the same custom-noise controls as SamplerCustomNoiseDuo.
  • positive / negative - shared conditioning for both models.

Outputs: output (final LATENT → VAEDecode) and denoised_output (clean pass-1 prediction).

What is this actually for? People use model-mixing to blend character - say, one model for composition and lighting, another for faces or texture - or to steal the strengths of a specialized finetune without loading it for the whole run. It's also an expensive experiment: two checkpoints resident in VRAM and both computing at every other step. The README's one explicit troubleshooting note is VRAM: if you hit out-of-memory errors, try adding or removing --disable-smart-memory when launching ComfyUI. That flag changes how aggressively ComfyUI swaps models around, and with two models in play it genuinely matters.

Honest take: this is the most "I know what I'm doing" node in the pack, and it's where beginners get hurt. Alternating models per step produces texture neither model would make alone, and the result is hard to predict - expect to burn a lot of fixed-seed sweeps. Start with two models that are close in style, matching cfg values, and a modest step count. And remember the whole thing is ancestral-ish by construction: the alternation is not a converging process, so reproduce habits are out the window.

Install is the shared pack routine - ComfyUI Manager → "ComfyUI Extra Samplers", or:

cd ComfyUI/custom_nodes
git clone https://github.com/Clybius/ComfyUI-Extra-Samplers

then restart. No model downloads; dependency kornia.

Categorysampling/custom_sampling

Inputs (17)

NameTypeDefaultDescription
modelMODEL
model2MODEL
add_noiseBOOLEANtrue
add_noise_pass2BOOLEANtrue
return_noisy_pass1BOOLEANfalse
noise_typeCOMBO4 options: gaussian, uniform, pyramid, power
noise_seedINT00–18446744073709550000
cfgFLOAT8.00–100
cfg2FLOAT8.00–100
positiveCONDITIONING
negativeCONDITIONING
samplerSAMPLER
sampler2SAMPLER
sigmasSIGMAS
sigmas2SIGMAS
hr_upscaleFLOAT1.01–9
latent_imageLATENT

Outputs (2)

NameTypeDescription
outputLATENT
denoised_outputLATENT