Simple Checkpoint Rotation
The set-and-forget rotation loader (its counter never sleeps)
- model
- clip
- vae
- info
The one that hides the counter from you
Simple Checkpoint Rotation is the pack's answer to "I don't want to learn Primitive nodes and control_after_generate, I just want models to rotate." It has a built-in counter, so the setup is a single node: point it at a folder, tell it to change every N images, and it hands back model, clip, and vae. No external wiring, no batch_index to feed it, no seed to pick.
It's the right starting point, and honestly the one I'd hand a beginner who wants the effect without the machinery. The trade is that the counter lives on the node's Python class rather than in your graph, which buys convenience and costs you control.
How it works
Each time the node executes, it reads an internal counter, picks the checkpoint, and bumps the counter by one. The selection is the pack's standard formula: checkpoint = (current_index // change_every) % num_checkpoints. So with change_every: 4, images 0–3 come from the first checkpoint, 4–7 from the second, and it wraps when it reaches the end of the sorted list.
Two inputs control everything:
- subfolder - empty for the root
models/checkpoints/, or a relative path like"sdxl"to narrow it. - change_every - images per checkpoint, default 4.
- auto_increment - on by default, which is where the internal counter kicks in. Turn it off and the node instead reads manual_index, letting you drive the position yourself.
There's an info string output that tells you the image number, which checkpoint of how many is active, and when it changes - genuinely useful as a readout.
The trap: that counter is global and it never resets
Here's what the README glosses over. The counter is a class-level variable, which means two copies of this node in the same workflow share one counter, and it survives across runs. Restart ComfyUI and it keeps counting from wherever it stopped; change change_every mid-way and you'll start mid-cycle because the counter didn't. There's a reset_counter() method in the source, but it's not exposed in the UI - you can't click a button to zero it.
Practical consequences: don't expect it to start from checkpoint 1 every time you hit Queue, and if you use two of these in one graph, they'll interfere. If you need predictable, resettable rotation, the pack's Checkpoint Rotation (Batch) node with its explicit reset_on_next toggle is the one to move to. This node is the training wheels - fine, until the wheels start deciding the route.
Also note the same execution reality as every loader here: it rotates once per graph execution. One queue with batch_size: 20 is 20 images from a single checkpoint. Per-image rotation means batch_size: 1 inside a loop, or queueing one image at a time - the author's own README says the batch-size-1 loop setup is "critical for rotation."
Install
cd ComfyUI/custom_nodes/
git clone https://github.com/trunksn1/comfyui-change-checkpoint-randomly
Restart and confirm [ComfyUI] Checkpoint Rotation Node loaded successfully! in the console. There are no pip dependencies and no models to fetch - the only requirement for the node to do anything interesting is at least two checkpoints sitting in models/checkpoints/ or a subfolder. You'll find it under Add Node → loaders → Simple Checkpoint Rotation.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| subfolder | STRING | Checkpoint subfolder (leave empty for all checkpoints) | |
| change_every | INT | 41–1000 | Change checkpoint every N images |
| auto_increment | BOOLEAN | true | Automatically increment counter (turn OFF for manual control) |
| manual_indexopt | INT | 00–100000 | Manual index (only used if auto_increment is OFF) |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| clip | CLIP | — |
| vae | VAE | — |
| info | STRING | — |