Nodes/comfyui-rapidfire/MultiModelCheckpointIterator
ComfyUI Node

MultiModelCheckpointIterator

Sweep Every Model in Your Folder, One Run at a Time

By Zeks·Created 2 years ago·Updated 10 months ago· 3
MultiModelCheckpointIterator
  • latent_image
  • LATENT
  • settings
used_model_count2
ckpt_name1
ckpt_name2_list
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
detached_checkpointfalse
reset_rngfalse
random_checkpointfalse
load_settings

MultiModelAdvancedKsampler lets you chain three checkpoints. This is the version that automates the boring part: instead of picking a second checkpoint by hand and queueing runs, you paste a whole list of checkpoints into ckpt_name2_list and each queue run uses the next one. Model 1 and model 3 stay fixed; the middle of the chain is the sweep variable.

If you've ever found yourself manually swapping a checkpoint between every queue run while testing "which anime merge works with my base?", this node removes the hands. It's the grid-search sampler - the tool for building a model comparison sheet without touching the workflow between runs.

How it works

Same chaining machinery as the Advanced sampler: optional rescaled-CFG warm-up, model 1 samples up to steps_end_first, then the selected model 2 takes over, then model 3 finishes. The difference is the iterator. ckpt_name2_list takes one checkpoint filename per line, and on each execution the node picks the next entry (cycling with % len), holding its position in node state so the next run continues down the list. Two toggles shape the sweep:

  • detached_checkpoint - required for iterating at all; it's the switch that says "use the list, not a fixed model."
  • random_checkpoint - when on, it picks a random entry instead of sequential. There's also reset_rng to reset the iteration index back to the start.

The chosen checkpoint is baked into the settings output (serialized as ckpt_name2), so your saver records exactly which model produced each image. Note the settings output is the only model-identity signal here - unlike the "First" variant, this node doesn't expose a used_ckpt_name string, so route the settings into MultiModelPromptSaver to keep the mapping honest.

The inputs that matter

  • ckpt_name1 / ckpt_name3 - the fixed bookends of the chain (dropdowns).
  • ckpt_name2_list - one checkpoint per line; the sweep list.
  • detached_checkpoint / random_checkpoint / reset_rng - iteration behavior.
  • load_settings - replay a full configuration from a previous settings output, exactly like the Advanced node.

Outputs: LATENT (decode as usual) and settings (the serialized config for this run).

Install and the trap

Part of comfyui-rapidfire, no extra dependencies. Install via ComfyUI Manager (search "comfyui-rapidfire") or:

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

then restart.

The trap: iteration state lives on the node instance. If you reload the workflow or restart ComfyUI, the index resets and your sweep starts over - and if the list changes length mid-sweep, % len silently skips or repeats. For reproducible sweep runs, either leave random_checkpoint on (order stops mattering) or plan to run the sweep in one sitting. Also remember this is a chaining sampler: if you only want to compare single models, a plain KSampler batch is the simpler tool, and this node only earns its complexity when model 2 is genuinely the middle of a three-model chain.

Categorysampling

Inputs (29)

NameTypeDefaultDescription
used_model_countINT21–3
ckpt_name1COMBO0 options:
ckpt_name2_listSTRING
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
detached_checkpointBOOLEANfalse
reset_rngBOOLEANfalse
random_checkpointBOOLEANfalse
latent_imageLATENT
load_settingsoptSTRING

Outputs (2)

NameTypeDescription
LATENTLATENT
settingsSTRING