πΈ Thumbnail Saver
Update a library entry's thumbnail without touching its prompt
- image
- image
- id
The πΈ Library gallery shows every saved prompt as a thumbnail tile, and the thumbnail is what you actually recognize at a glance. So when you improve a character or find a better representation of a prompt you saved earlier, you want to swap the artwork - without disturbing the prompt text, tags, or name that live underneath it. πΈ Thumbnail Saver is exactly that: wire an IMAGE in, point it at a library entry, and it replaces that entry's thumbnail. Nothing else about the entry changes.
The mechanism is refreshingly narrow. The node takes your image (first frame of a batch, unless you set frame_index), converts the ComfyUI IMAGE tensor to a PIL image, and writes it to the same data/images/ folder the πΈ Library node reads. Entry data - name, text, tags - is left untouched; only the artwork file changes, so the tile updates on the next gallery refresh. It's the "update artwork only" sibling of πΈ Save + Thumbnail, which does entry-plus-artwork in one shot.
The neat workflow detail is the prompt_id field: it's auto-populated by the Library gallery. Select a tile in the πΈ Library node on the same canvas, and that entry's ID is automatically written into this node's prompt_id on your next interaction - you never hand-type the ID. The README walks the exact flow: add Thumbnail Saver, wire your KSampler's Image output in, click the target tile in the Library, queue. The generated image becomes that entry's thumbnail.
Inputs:
image- the image to save as the thumbnail (first frame used unlessframe_indexis set).prompt_id- the entry ID; auto-filled by the Library gallery, or wire the Library node'sidoutput here directly.frame_index- optional; which frame of a batch to use (1-based, default 1).
Outputs: image (the input, passed through unchanged, so the node can sit mid-chain without interrupting anything downstream) and id (the entry ID whose thumbnail was updated, or empty if skipped).
That passthrough is a quiet but useful design choice: Thumbnail Saver is an output node, yet it doesn't consume the image - it echoes it back out. So you can drop it anywhere in a chain and it records the thumbnail as a side effect while the image continues on to the save node. The description's advice is worth taking: it "can sit anywhere in your chain."
Installing it
Part of Frog Node Pack:
- ComfyUI Manager: search Frog Node Pack, install, restart.
- Manual:
cd ComfyUI/custom_nodes && git clone https://github.com/RabbitThatIsPink/FrogNodePack, restart, hard-refresh (Ctrl+Shift+R).
No pip dependencies - requirements.txt is empty; Pillow ships with ComfyUI. Find πΈ Thumbnail Saver under πΈ Node Pack.
Common issues
Three quiet failure modes, all visible in the debug/log output. Empty prompt_id - the node logs "prompt_id is empty - skipping" and passes the image through; this happens when you forgot to select a tile in the Library or the auto-fill didn't fire. Invalid ID - same skip behavior; the ID must match [A-Za-z0-9_-]{1,64}. No matching entry - "no entry with id=β¦ - skipping." In all three cases the image still flows through, so the workflow doesn't error - which is convenient, but also means you can silently not save a thumbnail and not notice. If tiles aren't updating, check the ComfyUI console for the skip message and hard-refresh the browser afterward.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | Image to save as the entry's thumbnail. The first frame of a batch is used unless frame_index is set. | |
| prompt_id | STRING | ID of the library entry to update. Auto-populated by the πΈ Library gallery widget. | |
| frame_indexopt | INT | 11β4096 | When the IMAGE is a batch, which frame to use as the thumbnail (1-based). |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | The input image, passed through unchanged. |
| id | STRING | The entry ID whose thumbnail was updated, or empty if skipped. |