Nodes/ComfyUI Checkpoint Rotation Node/Simple Checkpoint Rotation
ComfyUI Node

Simple Checkpoint Rotation

The set-and-forget rotation loader (its counter never sleeps)

By trunksn1·Created 10 months ago·Updated 3 months ago· 1
Simple Checkpoint Rotation
    • model
    • clip
    • vae
    • info
    subfolder
    change_every4
    auto_incrementtrue
    manual_index0

    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.

    Categoryloaders

    Inputs (4)

    NameTypeDefaultDescription
    subfolderSTRINGCheckpoint subfolder (leave empty for all checkpoints)
    change_everyINT41–1000Change checkpoint every N images
    auto_incrementBOOLEANtrueAutomatically increment counter (turn OFF for manual control)
    manual_indexoptINT00–100000Manual index (only used if auto_increment is OFF)

    Outputs (4)

    NameTypeDescription
    modelMODEL
    clipCLIP
    vaeVAE
    infoSTRING