Checkpoint Loader with Name (Citron Image Saver)
Stop typing your model name into the metadata by hand
- MODEL
- CLIP
- VAE
- model_name
ComfyUI's stock Load Checkpoint gives you three wires: MODEL, CLIP, VAE. This one gives you four - the same three plus model_name, a string containing the checkpoint you just loaded. That fourth wire is the entire point, and it's a small, genuinely useful idea.
Here's the problem it kills. Your save node needs to know which checkpoint made the image so it can write Model: and Model hash: into the metadata. Typing it into a text field means two places to keep in sync, and the day you swap checkpoints and forget the text field, your files start lying. The tooltip on the fourth output is just "checkpoint name" - it's the raw ckpt_name string from the dropdown, and you wire it straight into the saver's modelname input. Now the metadata follows the loader automatically.
How it works
The loading path is ComfyUI's own load_checkpoint_guess_config, so behaviour matches the core loader: it guesses the config, returns MODEL/CLIP/VAE and drops the CLIP-vision model that some checkpoints carry. Then it appends ckpt_name to the tuple. Nothing is hashed here - the saver does that when it resolves the name to a file.
Because it takes the name with its extension and any subfolder, the filename template variables behave the way you'd expect: %model gives you the filename with extension, %basemodelname gives you the filename with the extension stripped (dots inside the model name survive). So %time_%basemodelname_%seed produces clean names like 2026-10-24-141530_juggernautXL_v9_447190557.png instead of dragging .safetensors into the filename.
The one input is ckpt_name, a dropdown fed from your checkpoints folder. Outputs: MODEL (the denoiser), CLIP (the text encoder), VAE, and model_name (the string).
That folder restriction is the catch. If you're running Flux, Wan, Qwen-Image or an SD3-style setup where the denoiser lives in diffusion_models as a separate file, this loader will not list it - those aren't checkpoints. That's what the pack's UNet loader with Name is for. Worth knowing: the saver resolves model names against both checkpoints and diffusion_models (and tolerates .gguf) when it goes looking for a file to hash, so a UNet-style filename still gets a correct Model hash: as long as the string matches what's on disk.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/citronlegacy/ComfyUI-CitronNodes
# restart ComfyUI
Manager search may not find it - the README lists Manager support as "coming soon" and the packaging metadata is still placeholder - so the clone is the dependable route. The pack's sole pip dependency is piexif; if it's missing, every node in the pack fails to import:
pip install piexif
No models ship with this. It reads whatever's already in your checkpoints folder.
Common issues
- My model isn't in the dropdown. It's not in
checkpoints. UNet-only releases belong underdiffusion_modelsand need the UNet loader variant. Model hash:is empty in the saved file. Either the name didn't resolve to a file, or the saver's own metadata input never got themodel_namewire. Check the string actually arrived - a text-preview node onmodel_nameconfirms it in one run.- First save after swapping checkpoints takes a while. That's the SHA-256 pass over the new file, printed as a progress bar and cached in a
.sha256sidecar next to the model. It doesn't repeat. - The whole pack is missing from the node list. Missing
piexif, not a problem with this node - look for the import error in the startup console.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| ckpt_name | COMBO | checkpoint |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | U-Net model (denoising latents) |
| CLIP | CLIP | CLIP (Contrastive Language-Image Pre-Training) model (encoding text prompts) |
| VAE | VAE | VAE (Variational autoencoder) model (latent<->pixel encoding/decoding) |
| model_name | STRING | checkpoint name |