Nodes/comfyui-rapidfire/MultiModelAdvancedKsampler
ComfyUI Node

MultiModelAdvancedKsampler

Chain Three Checkpoints Into One Image

By Zeks·Created 2 years ago·Updated 11 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—