MultiModelAdvancedKsampler
Chain Three Checkpoints Into One Image
- latent_image
- LATENT
- prompt
- seed
- lora
- 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:
- 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'sRescaleCFGatrescale_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. - Model 1's main pass - samples from
rescaled_stepsup tosteps_end_first(default 15). - Model 2's pass - continues the latent from
steps_end_first + steps_shift_secondonward, atstarting_cfg + cfg_shift, ending atsteps_end_second(or the shifted total if 0). - 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_seedtoggle so a loaded settings string can't overwrite it. - load_settings - paste a
settingsstring 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.
Inputs (27)
| Name | Type | Default | Description |
|---|---|---|---|
| used_model_count | INT | 21–3 | — |
| ckpt_name1 | COMBO | 0 options: | |
| ckpt_name2 | COMBO | 0 options: | |
| ckpt_name3 | COMBO | 0 options: | |
| positive | STRING | — | |
| negative | STRING | — | |
| lora_name | STRING | — | |
| noise_seed | INT | 00–18446744073709550000 | — |
| rescaled_steps | INT | 80–100 | — |
| rescale_multiplier | FLOAT | 0.700–1 | — |
| total_steps_original | INT | 251–100 | — |
| total_steps_shift_second | INT | 0-50–100 | — |
| total_steps_shift_third | INT | 0-50–100 | — |
| sampler_name | COMBO | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 | |
| scheduler | COMBO | 9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3 | |
| starting_cfg | FLOAT | 8.00–100 | — |
| cfg_shift | FLOAT | 0.0-10–100 | — |
| steps_end_first | INT | 150–100 | — |
| steps_shift_second | INT | 0-20–100 | — |
| steps_end_second | INT | 00–100 | — |
| steps_shift_third | INT | 0-20–100 | — |
| token_normalization | COMBO | 4 options: none, mean, length, length+mean | |
| weight_interpretation | COMBO | 5 options: comfy, A1111, compel, comfy++, down_weight | |
| detached_seed | BOOLEAN | false | — |
| stop_at_step | INT | 00–100 | — |
| latent_image | LATENT | — | |
| load_settingsopt | STRING | — |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| LATENT | LATENT | — |
| prompt | STRING | — |
| seed | INT | — |
| lora | STRING | — |
| settings | STRING | — |