Nodes/Comfy Contact Sheet Image Loader/Contact Sheet Image Loader
ComfyUI Node

Contact Sheet Image Loader

Stop hunting through ComfyUI's file picker — pick your best gen from a numbered contact sheet

By benstaniford·Created about a year ago·Updated about a year ago· 10
Contact Sheet Image Loader
  • load_trigger
  • contact_sheet
  • image
  • mask
  • filename
folder_path/tmp/ComfyUI/output
selected_image1
thumbnail_size256
rows1

The standard ComfyUI Load Image node is a wall of filenames. You generate thirty variants, two are keepers, and then you squint at timestamps in a file dialog trying to remember which one was the good one. Contact Sheet Image Loader exists to kill that workflow: it scans a folder, renders the most recent images as a numbered thumbnail grid right on your canvas, and lets you pick by number. The name is literal - it's a contact sheet, like the prints film photographers used to pin up.

What it actually does

This is a single-node pack (category image/loaders), so there's nothing else to learn. It globs a folder for JPG, JPEG, PNG, BMP, TIFF, TIF, and WEBP, sorts by modification time newest-first, and builds an 8-column grid of thumbnails. Each thumbnail is LANCZOS-downscaled into a padded square with its number badge in the bottom-right corner, and the whole grid is returned as one IMAGE tensor - feed that straight into ComfyUI's Preview Image node and you've got your visual index.

The useful part is the second output: image, the full-resolution selected file, already normalized to a float tensor. So this isn't just a preview widget - it's a genuine loader that slots into the middle of a workflow. It also hands you a mask (a fully-white MASK the same size as the image, i.e. "everything visible") and filename as a STRING if you want the name for a save path or a text display.

The inputs that matter

Only a few things to touch:

  • folder_path - defaults to ComfyUI's output directory automatically. Point it anywhere else if your gens land elsewhere.
  • selected_image - the one number you actually set: 1–64, matching the badges on the sheet.
  • rows - grid height. 1 row = 8 images, up to 8 rows = 64. More rows means a bigger preview and a longer list to hunt through.
  • thumbnail_size - 64–512 px per thumb, default 256. Bump it if you want to actually judge detail before picking.
  • load_trigger - a wildcard * input. It's marked optional in the schema, but you want it connected: it's the refresh signal.

The catch (and it's by design)

Here's where people get burned. The sheet re-sorts by modification time every time it refreshes, so "newest is #1" is a moving target. Run the workflow again, generate a new image, and your old #3 is now #4. The node watches the folder's modification time and the trigger value, and re-scans when either changes - so if new gens aren't showing up, it's usually that you haven't wired load_trigger to anything, or you've pointed it at the wrong folder (an empty path returns a gray placeholder with filename = "no_image"). One gotcha in the code's history: an early version only refreshed when the trigger changed, which missed files saved between runs - fixed by tracking folder mtime, but it's why you should connect the trigger anyway.

Also know what it isn't: a batch loader. It's one deliberate pick per run. The author said as much in the release thread - multi-select ("1,3,7,10-14") is a v2 idea, not this. For batch processing the whole folder, reach for the batch loader nodes instead; use this when you've eyeballed the grid and want that one image sent into an upscale or inpaint stage.

Install

Easiest via ComfyUI Manager → "Install via Git URL":

https://github.com/benstaniford/comfy-contact-sheet-image-loader.git

Or manually:

cd ComfyUI/custom_nodes
git clone https://github.com/benstaniford/comfy-contact-sheet-image-loader

Then restart ComfyUI. No model downloads, no heavy deps - it only needs torch, torchvision, Pillow, and numpy, which every ComfyUI install already has (opencv is listed optional and the code doesn't require it). You'll be looking at thumbnails a minute after install.

Categoryimage/loaders

Inputs (5)

NameTypeDefaultDescription
folder_pathSTRING/tmp/ComfyUI/outputPath to folder containing images
selected_imageINT11–64Select image 1-64 from the contact sheet
thumbnail_sizeINT25664–512Size of thumbnails in pixels
rowsINT11–8Number of rows (1=8 images, 2=16, ..., 8=64)
load_triggeropt*Connect any output here to refresh thumbnails (optional)

Outputs (4)

NameTypeDescription
contact_sheetIMAGE
imageIMAGE
maskMASK
filenameSTRING