Checkpoint Preset Manager
Save Per-Model Steps, CFG, Sampler and Resolution
- steps
- cfg
- sampler_name
- scheduler
- width
- height
- memo
Every checkpoint has a sweet spot. DreamShaper wants 30 steps at CFG 7; that Pony build you keep around wants CFG 5 and a different resolution; a distilled Turbo model hates anything above CFG 1.5. If you swap models often, you either memorize all of it or re-type it into KSampler and Empty Latent Image every time. Checkpoint Preset Manager is a single node that stops that: it remembers the steps, CFG, sampler, scheduler, width, height and even your trigger-word notes for each checkpoint, keyed by model name, and restores them the moment you switch.
The name overpromises slightly - it's one node, not a dashboard - but the thing it does, it does well. No API, no key, no model downloads, just a tiny local JSON file.
How it works
The mechanism is refreshingly simple. Under the hood there's no magic: the node keeps a presets.json file in its own folder inside custom_nodes, keyed by the exact checkpoint name you give it. When you set save to true and queue the prompt, it writes whatever's in the widget boxes into that file. When mode is use_preset and you've got a saved entry for the current ckpt_name, it reads the stored values back out and uses those instead of whatever's sitting in the UI.
Because it's an output node, it always executes, and it renders a little black "Status Board" onto itself - a green monospace console - that tells you whether it loaded a preset, is passing through UI values, or just saved. Cyan on save, orange in "UI" passthrough, green when a preset is active. A nice touch for a utility this small.
One honest gotcha before you start: the README says to "connect your Load Checkpoint node to the ckpt_name input," but that input is a plain STRING - you can't drag a MODEL wire onto it. Type the checkpoint filename in, or feed it from a text node. The code doesn't care where the string comes from, just that it matches a saved key exactly.
The inputs and outputs that matter
You'll set a handful of these once and mostly ignore them after:
ckpt_name- the string that keys your preset. Case-sensitive, must match exactly or you get a silent second entry.mode-use_preset(load stored values) oruse_ui(just pass through the widget values). Defaults touse_preset.save- set to true and queue to write the current settings to disk. Flip it back off afterwards.memo- optional multiline notes. This is the sleeper feature: paste trigger words or prompt fragments per model, and it survives alongside the settings.steps,cfg,sampler_name,scheduler,width,height- the values themselves. The sampler and scheduler dropdowns are pulled live from your installed ComfyUI (44 samplers, 9 schedulers), so they always match your version.
The seven outputs - steps, cfg, sampler_name, scheduler, width, height, memo - are the values the node resolved (stored preset, or UI passthrough). Wire the first four into a KSampler, width/height into an Empty Latent Image, and if you like, memo into your positive prompt. Because it's an output node it runs every queue, so your KSampler always gets the right numbers for the model that's loaded.
Installing it
Easiest path is ComfyUI Manager: search for Checkpoint Preset Manager (published under the takkun registry ID) and install. Or the manual route:
cd ComfyUI/custom_nodes
git clone https://github.com/TakkunRed/comfyui_checkpoint_preset_manager.git
Restart ComfyUI. That's it - there are zero Python dependencies (the pyproject.toml lists an empty dependencies array) and no models to fetch. It's as light an install as custom nodes get.
Common issues & troubleshooting
- Preset never loads. Either the
ckpt_namestring doesn't exactly match the saved key (spelling, capitalization, or the.safetensorssuffix), or you're inuse_uimode. The Status Board shows which one you're in - read it. - You saved with an empty
ckpt_name. It happily writes to a""key and will then "match" every empty field forever. Set the name before you save. - Settings don't survive a reinstall.
presets.jsonlives inside the node folder, so wipingcustom_nodesnukes your library. Back it up alongside your workflows if you've built up real trigger-word notes. - Nothing happened when I queued. It's an output node, so it always runs - but the Status Board only refreshes on an actual execution, not when you drag it in. Queue once.
It won't change your image quality - the sweet-spot knowledge itself is still yours (when in doubt for SD 1.5/SDXL, DPM++ 2M Karras, and check each architecture's recommended CFG). What it saves you is the re-typing, and the "which model was this again?" panic. For a workflow where you audition checkpoints all day, that's worth the two minutes it takes to install.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| ckpt_name | STRING | — | |
| mode | COMBO | use_preset | 2 options: use_preset, use_ui |
| steps | INT | 201–10000 | — |
| cfg | FLOAT | 7.00–100 | — |
| sampler_name | COMBO | euler | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 |
| scheduler | COMBO | normal | 9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3 |
| width | INT | 51264–8192 | — |
| height | INT | 51264–8192 | — |
| save | BOOLEAN | false | — |
| memoopt | STRING | — |
Outputs (7)
| Name | Type | Description |
|---|---|---|
| steps | INT | — |
| cfg | FLOAT | — |
| sampler_name | * | — |
| scheduler | * | — |
| width | INT | — |
| height | INT | — |
| memo | STRING | — |