Nodes/comfyui-rapidfire/MultiModelAdvancedKsampler
ComfyUI Node

MultiModelAdvancedKsampler

Chain Three Checkpoints Into One Image

By Zeks·Created 2 years ago·Updated 10 months ago· 3
MultiModelAdvancedKsampler
  • latent_image
  • LATENT
  • prompt
  • seed
  • lora
  • settings
used_model_count2
ckpt_name1
ckpt_name2
ckpt_name3
positive
negative
lora_name
noise_seed0
rescaled_steps8
rescale_multiplier0.70
total_steps_original25
total_steps_shift_second0
total_steps_shift_third0
sampler_name
scheduler
starting_cfg8.0
cfg_shift0.0
steps_end_first15
steps_shift_second0
steps_end_second0
steps_shift_third0
token_normalization
weight_interpretation
detached_seedfalse
stop_at_step0
load_settings

The whole rapidfire pack exists for this node. Where a normal KSampler runs one checkpoint from noise to image, MultiModelAdvancedKsampler hands the latent off between up to three checkpoints mid-sampling: model A paints the early steps that set composition, model B takes over for the middle, model C finishes the details. Same seed, same prompt, one image - but three models each did the part they're best at.

This is the "model chaining" trick from the advanced-sampler scene, and if you've ever wished the composition model were different from the detail model, this is that wish made into a node. The catch: it's the fiddliest node in the pack, with about two dozen knobs. Start from the defaults, change one thing at a time.

How it works

It loads each checkpoint once, caches them per node instance, and purges any that aren't used this run to keep VRAM in check. The sampling pipeline is deliberately staged:

  1. Rescaled CFG pass - if rescaled_steps > 0, it first runs the first model for a few steps with a high-CFG rescaled pass (via ComfyUI's RescaleCFG at rescale_multiplier, default 0.7). This is the trick that nails composition before detail work begins - a handful of high-guidance steps to set the scene, then back off.
  2. Model 1's main pass - samples from rescaled_steps up to steps_end_first (default 15).
  3. Model 2's pass - continues the latent from steps_end_first + steps_shift_second onward, at starting_cfg + cfg_shift, ending at steps_end_second (or the shifted total if 0).
  4. Model 3's pass - if enabled, finishes the run.

Every pass uses the pack's AdvancedCLIPTextEncodeWithBreak encoder, so prompts support A1111/compel-style weighting via weight_interpretation (comfy, A1111, compel, comfy++, down_weight) and token_normalization. LoRA support is tag-based: the lora_name field takes <lora:name:strength> tags, and you can even pass a list of them.

The inputs that matter

  • used_model_count (1–3) - how many of the three checkpoint slots are active.
  • ckpt_name1 / 2 / 3 - the checkpoints, in chain order.
  • rescaled_steps / rescale_multiplier - the high-CFG warm-up; leave at defaults until you understand the effect.
  • steps_end_first / steps_shift_second / steps_end_second - where each model hands off. These are the real tuning knobs for the chain.
  • noise_seed - the seed, with a detached_seed toggle so a loaded settings string can't overwrite it.
  • load_settings - paste a settings string back in and the node replays an entire configuration, then writes it back out. That round-trip is how you share or reproduce a chain setup exactly.

Outputs: LATENT (decode it normally), plus prompt, seed, lora, and settings - the last is the serialized config to feed into a MultiModelPromptSaver so every image is self-documenting.

Install and where it hurts

Ships with comfyui-rapidfire; no models or extra Python deps (torch, PIL, psutil all ship with ComfyUI). Install via ComfyUI Manager (search "comfyui-rapidfire") or:

cd ComfyUI/custom_nodes
git clone https://github.com/Zeks/comfyui-rapidfire

then restart.

Honest warnings. First, if you install this alongside Inspire Pack, ComfyUI Manager may warn about node-name conflicts - the pack vendors copies of a couple of Inspire sampler node classes in its source. The community consensus on that warning is that it's harmless; it just means two packages define similar nodes. Second, this node is overkill for one-model work - a stock KSampler is simpler and the two knobs this adds (model handoff, rescaled CFG) are only worth their complexity when you're actually chaining models. And third: chain length costs. Two full checkpoints resident plus all the conditioning means your VRAM budget matters, which is exactly why the node aggressively purges unused checkpoints between runs.

Categorysampling

Inputs (27)

NameTypeDefaultDescription
used_model_countINT21–3
ckpt_name1COMBO0 options:
ckpt_name2COMBO0 options:
ckpt_name3COMBO0 options:
positiveSTRING
negativeSTRING
lora_nameSTRING
noise_seedINT00–18446744073709550000
rescaled_stepsINT80–100
rescale_multiplierFLOAT0.700–1
total_steps_originalINT251–100
total_steps_shift_secondINT0-50–100
total_steps_shift_thirdINT0-50–100
sampler_nameCOMBO44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38
schedulerCOMBO9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3
starting_cfgFLOAT8.00–100
cfg_shiftFLOAT0.0-10–100
steps_end_firstINT150–100
steps_shift_secondINT0-20–100
steps_end_secondINT00–100
steps_shift_thirdINT0-20–100
token_normalizationCOMBO4 options: none, mean, length, length+mean
weight_interpretationCOMBO5 options: comfy, A1111, compel, comfy++, down_weight
detached_seedBOOLEANfalse
stop_at_stepINT00–100
latent_imageLATENT
load_settingsoptSTRING

Outputs (5)

NameTypeDescription
LATENTLATENT
promptSTRING
seedINT
loraSTRING
settingsSTRING