Load Image (Gallery)
The gallery grid that lives on the node
- image
- mask
- path
ComfyUI's native LoadImage dropdown is an alphabetical, single-column list with no search. Fine when you have twelve images in input/. A torture device when you have four hundred, or when you're on a tablet and the LiteGraph dropdown won't even stay open under your finger. GalleryLoadImage (shown as Load Image (Gallery)) is the fix that ships in the comfyui-gallery-loader pack: a drop-in LoadImage replacement that renders a card-grid picker right on the node body - thumbnails, fuzzy search, sorted by mtime instead of alphabet - and scrolls independently of the canvas, which is what makes it actually usable on touch screens.
It's a pure quality-of-life node. Same load semantics as core, zero new models, zero API calls, nothing to configure. You swap it in for LoadImage and immediately stop hunting through a dropdown you can't even search.
How it works
The node's only widget is a text field that stores what the README calls an annotated path: either a bare name like subdir/foo.png or a form with a root tag like foo.png [output]. On load, the backend resolves that string with folder_paths.get_annotated_filepath - the exact same resolution core LoadImage uses - so [output] and [temp] references load straight from output/ and temp/ without you copying files back into input/ first (the KB's image-io-metadata.md essay explains why that three-directory convention trips people up: a "can't find the image" workflow is almost always pointing at a file that isn't in input/). Absolute paths work too, if you want to type one.
The actual pixel loading mirrors core LoadImage line for line: EXIF-transposed, converted to RGB, alpha channel pulled out and inverted into the mask. It even ships an IS_CHANGED that hashes mtime + size, so overwriting a file with the same name re-runs the node instead of serving you the stale cached tensor.
The input and outputs that matter
Only one input exists, image (STRING) - you pick through the gallery grid rather than typing into it, though you can paste a path if you're feeling brave. The three outputs:
image(IMAGE) - same tensor coreLoadImagegives you. Wire it into yourVAE EncodeorLoad Image Batchreplacement and you're done.mask(MASK) - the inverted alpha channel, matching core. Feed it into an inpaint setup exactly like you would the stock node.path(STRING) - the resolved on-disk path, which is the sleeper feature. Hand it to aSaveImagefilename template or a metadata node and you can name outputs after whatever you actually loaded.
Install
Easiest route, ComfyUI Manager → "Install Custom Nodes" → search Gallery Loader. Or by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/laurigates/comfyui-gallery-loader
# restart ComfyUI
No Python dependencies beyond what ComfyUI core already ships - nothing to download, no model files. One real requirement: your frontend needs to be at least 1.40, since the pack hooks the widget's onPointerDown event to open the grid.
Common issues
- The picker never appears - you're on a frontend older than 1.40. Update ComfyUI, restart, done.
- The node goes red with "file not found" - the file the widget points at was moved, renamed, or deleted. Re-pick it. (The validation is deliberate: it fails loudly instead of silently loading a stale path.)
- A bare filename doesn't resolve - a relative name falls back to
input/just like core, so if the file lives elsewhere, use the annotated[output]/[temp]forms or an absolute path.
The same pack also upgrades the stock LoadImage combo and the VHS loaders with a modal picker and an Input / Output / Temp tab bar, and it can pin favourites server-side across devices - but if all you want is a thumbnailed, searchable LoadImage that works with a fat finger, this one node does it on its own.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| image | STRING | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| mask | MASK | — |
| path | STRING | — |