Checkpoint Selector
Stop scrolling the checkpoint dropdown — pick from a searchable 20-slot board instead
- model
- clip
- vae
If you've ever loaded a workflow that should use realisticVision and quietly run it on whatever was left in the dropdown, this node is for you. The stock ComfyUI Load Checkpoint gives you one giant dropdown of every model in your checkpoints folder, no preview, no search, and no way to quickly flip between the three or four checkpoints you actually rotate through. Craftgear's Checkpoint Selector replaces that with a board of up to 20 slots, each with a radio button, a searchable picker, and a hover-zoom preview. Pick the active slot, and the node loads that checkpoint for you.
How it works
Under the hood it's not doing anything clever with the model - that's the point. It's a wrapper around the exact same load_checkpoint_guess_config call ComfyUI's standard loader uses, so you get model, clip, and vae outputs that wire straight into your KSampler. The cleverness is all in the UI.
Each of the 20 slots is a pair of hidden widgets: ckpt_name_N (the actual dropdown) and slot_active_N (a boolean that's true when that slot's radio is selected). Slot 1 is active by default; clicking a radio flips the active flag. Click a slot's label and a dialog opens with every checkpoint in folder_paths.get_filename_list("checkpoints"), a search box that filters instantly, arrow-key navigation, Enter to select, Esc to close. The selected checkpoint's preview image - any .png/.jpg/.jpeg/.webp sitting beside the model file - shows on the right of the node, with hover zoom when enabled.
There's also an optional model_json input. Feed it the model json output from this pack's A1111 Metadata Reader and the node resolves the checkpoint by name from that JSON instead of using the radio slots, matching on filename or stem if needed. That's the start of a "pull a Civitai image's exact settings back into your graph" loop.
The inputs and outputs that matter
ckpt_name_1…ckpt_name_20- hidden dropdowns, one per slot. You normally never touch these; the dialog writes to them.slot_active_1…slot_active_20- the radio state. Only one is true.model_json(optional) - a JSON string with a checkpoint name, from the reader node above.
Outputs are model, clip, vae - same as the stock loader, wired the same way.
Two settings live under Settings > craftgear > Checkpoint Selector: fontSize (default 16) for the dialog and row labels, and previewZoomScale (default 2, minimum 1) for the hover zoom.
Install
Search craftgear in ComfyUI Manager's Custom Nodes Manager and install a numbered version - the README warns that picking nightly in the version screen fails on security restrictions. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/craftgear/comfyui-craftgear-nodes
Restart ComfyUI. No model downloads, no pip dependencies - the pack ships zero Python deps and a prebuilt frontend, so this is about as clean an install as custom nodes get.
Where people get burned
- "Checkpoint not found" on load. The node validates every slot against your current
checkpointsfolder. If you deleted a model after saving the workflow, a slot still pointing at it fails validation. Click the slot, pick something that exists, or clear it. - "No preview." It can only show a preview if there's an image next to the model file. Name it to match the checkpoint stem -
mymodel.preview.png,mymodel_01.jpg- and files withprevieworthumbin the name win. If you don't keep previews beside your checkpoints, the row UI still works; you just get placeholder text. - Huge checkpoint lists take a moment to render in the dialog. Annoying, not broken.
Inputs (41)
| Name | Type | Default | Description |
|---|---|---|---|
| ckpt_name_1 | COMBO | 1 options: | |
| slot_active_1 | BOOLEAN | true | — |
| ckpt_name_2 | COMBO | 1 options: | |
| slot_active_2 | BOOLEAN | false | — |
| ckpt_name_3 | COMBO | 1 options: | |
| slot_active_3 | BOOLEAN | false | — |
| ckpt_name_4 | COMBO | 1 options: | |
| slot_active_4 | BOOLEAN | false | — |
| ckpt_name_5 | COMBO | 1 options: | |
| slot_active_5 | BOOLEAN | false | — |
| ckpt_name_6 | COMBO | 1 options: | |
| slot_active_6 | BOOLEAN | false | — |
| ckpt_name_7 | COMBO | 1 options: | |
| slot_active_7 | BOOLEAN | false | — |
| ckpt_name_8 | COMBO | 1 options: | |
| slot_active_8 | BOOLEAN | false | — |
| ckpt_name_9 | COMBO | 1 options: | |
| slot_active_9 | BOOLEAN | false | — |
| ckpt_name_10 | COMBO | 1 options: | |
| slot_active_10 | BOOLEAN | false | — |
| ckpt_name_11 | COMBO | 1 options: | |
| slot_active_11 | BOOLEAN | false | — |
| ckpt_name_12 | COMBO | 1 options: | |
| slot_active_12 | BOOLEAN | false | — |
| ckpt_name_13 | COMBO | 1 options: | |
| slot_active_13 | BOOLEAN | false | — |
| ckpt_name_14 | COMBO | 1 options: | |
| slot_active_14 | BOOLEAN | false | — |
| ckpt_name_15 | COMBO | 1 options: | |
| slot_active_15 | BOOLEAN | false | — |
| ckpt_name_16 | COMBO | 1 options: | |
| slot_active_16 | BOOLEAN | false | — |
| ckpt_name_17 | COMBO | 1 options: | |
| slot_active_17 | BOOLEAN | false | — |
| ckpt_name_18 | COMBO | 1 options: | |
| slot_active_18 | BOOLEAN | false | — |
| ckpt_name_19 | COMBO | 1 options: | |
| slot_active_19 | BOOLEAN | false | — |
| ckpt_name_20 | COMBO | 1 options: | |
| slot_active_20 | BOOLEAN | false | — |
| model_jsonopt | STRING | {} | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| clip | CLIP | — |
| vae | VAE | — |