Save Image (with Checkpoint Info)
The saver that stamps which checkpoint made each image
- images
If you rotate checkpoints, you need this
Here's the problem SaveImageWithCheckpoint solves: when you're churning out a batch where every image comes from a different model, the stock Save Image node records exactly one thing about the model - and it's the wrong one, or none at all. A week later you're staring at a folder of PNGs and have no idea which checkpoint made which shot. This node is the fix: it saves images exactly like the built-in saver, then writes the actual checkpoint name into the PNG's metadata so each file carries its own provenance.
It ships in the same pack as the rotation loaders, and honestly it's the piece that makes them usable. Rotating models without recording which one fired per image is how you end up with untraceable output.
How it works
Under the hood it's a fork of ComfyUI's own Save Image. It routes through folder_paths.get_save_image_path(), so your output folder, counter, and subfolder behavior are identical to stock. What's added is PNG metadata: it embeds the checkpoint_name string you feed in as both checkpoint and model text chunks, alongside the standard ComfyUI prompt and extra_pnginfo that every saved PNG carries. The checkpoint field is the one most gallery tools and image viewers will show you; the model copy is there for the tools that look for that name instead.
There's no output socket because it's an output node - it's the end of the line, like Save Image. It returns its results through ComfyUI's UI images mechanism.
The inputs that matter
Only three, and you'll set all of them:
- images - the IMAGE tensor from your VAE Decode, same as any saver.
- checkpoint_name - the author's tooltip says it plainly: "Connect from Checkpoint Rotation node." Don't type it by hand; wire the
checkpoint_nameoutput from one of the rotation loaders (CheckpointRotation,CheckpointRotationSimple) into here. If you leave it empty, you've got a plain Save Image with extra steps. - filename_prefix - default
ComfyUI, same as stock. It pairs neatly with the pack'sCheckpoint to Filenamenode if you want the model name in the filename too.
There's an optional checkpoint_info multiline string for embedding extra text per image. It's just a blob dumped into metadata - handy for batch tags or notes.
One honest caveat
The metadata is only as accurate as the checkpoint_name it's handed, which means the loader has to actually re-execute per image. Inside a single batch queue (batch_size > 1), ComfyUI loads one checkpoint and renders the whole batch with it, so every PNG in that queue gets the same tag. For genuinely per-image metadata you want the loop setup the pack's README pushes: KSampler batch_size: 1, wrapped in a loop or queued one image at a time. The metadata machinery is right - the execution model is the part you have to respect.
Install
Same as the rest of the pack - there's no separate install for this node.
cd ComfyUI/custom_nodes/
git clone https://github.com/trunksn1/comfyui-change-checkpoint-randomly
Restart ComfyUI and look for [ComfyUI] Checkpoint Rotation Node loaded successfully! in the console. No requirements.txt, no pip installs, no model downloads - it only uses ComfyUI's own internals plus PIL, which you already have. If you're using ComfyUI Manager, the README lists Manager integration as a roadmap item rather than something shipped, so the reliable route is the clone above (or Manager's "Install via Git URL" with the same link).
You'll find it under Add Node → image → Save Image (with Checkpoint Info). If images come out and the metadata looks empty, check that you actually connected checkpoint_name rather than leaving the default blank string.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| checkpoint_name | STRING | Connect from Checkpoint Rotation node | |
| filename_prefix | STRING | ComfyUI | Prefix for saved files |
| checkpoint_infoopt | STRING | Additional info to embed |
Outputs (0)
No outputs