Nodes/Gallery Loader/Load Image (Gallery)
ComfyUI Node

Load Image (Gallery)

The gallery grid that lives on the node

By laurigates·Created 4 months ago·Updated 3 days ago· 5
Load Image (Gallery)
    • image
    • mask
    • path
    image

    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 core LoadImage gives you. Wire it into your VAE Encode or Load Image Batch replacement 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 a SaveImage filename 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.

    Categoryimage

    Inputs (1)

    NameTypeDefaultDescription
    imageSTRING

    Outputs (3)

    NameTypeDescription
    imageIMAGE
    maskMASK
    pathSTRING