Nodes/Frog Node Pack/🐸 Thumbnail Saver
ComfyUI Node

🐸 Thumbnail Saver

Update a library entry's thumbnail without touching its prompt

By RabbitThatIsPinkΒ·Created 3 months agoΒ·Updated 24 days agoΒ· 1
🐸 Thumbnail Saver
  • image
  • image
  • id
β—„prompt_idβ–Ί
β—„frame_index1β–Ί

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 unless frame_index is set).
  • prompt_id - the entry ID; auto-filled by the Library gallery, or wire the Library node's id output 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.

Category🐸 Node Pack

Inputs (3)

NameTypeDefaultDescription
imageIMAGEImage to save as the entry's thumbnail. The first frame of a batch is used unless frame_index is set.
prompt_idSTRINGID of the library entry to update. Auto-populated by the 🐸 Library gallery widget.
frame_indexoptINT11–4096When the IMAGE is a batch, which frame to use as the thumbnail (1-based).

Outputs (2)

NameTypeDescription
imageIMAGEThe input image, passed through unchanged.
idSTRINGThe entry ID whose thumbnail was updated, or empty if skipped.