Nodes/A5 Custom Nodes/A5 Multi Image Load
ComfyUI Node

A5 Multi Image Load

Six Reference Images Without Six Load Image Nodes

By A5Projects·Created about a month ago·Updated 2 days ago· 2
A5 Multi Image Load
    • image_1
    • image_2
    • image_3
    • image_4
    • image_5
    • image_6
    • image_list
    ◄state{"version":1,"slots":[{"file":"","enabled":true},{"file":"","enabled":true},{"file":"","enabled":true},{"file":"","enabled":true},{"file":"","enabled":true},{"file":"","enabled":true}],"extras":[],"resize":false,"megapixels":1.0,"downscale_only":false}►

    Multi-reference editing is where ComfyUI still feels like an Erector set. Klein's KV edit workflow wants four references chained through four separate Reference Conditioning nodes, and the standard advice for adding a fifth is literally "copy Load Image + ImageScaleToTotalPixels + Reference Conditioning and relink them." Qwen-Image-Edit-2509 takes one to three input images; Bernini takes five. Every one of those graphs is a tower of identical loaders you rewire by hand the day you want more references.

    A5 Multi Image Load is one node that replaces that tower. It's a 2×3 grid of six independent loaders with per-slot bypass, plus an image_list output for the "run this once per reference" pattern. For reference-heavy edit workflows that's a genuinely good pitch.

    What it actually does

    Each slot decodes through core Load Image - the source really does call LoadImage().load_image() - so EXIF, color and alpha behave like the node you already trust. Animated files give you their first frame.

    The six image_1 … image_6 outputs are your references. They're IMAGE, non-list, and each one is None when its slot is empty or unchecked. That last part is the feature, not a bug: bypass a slot and the numbering never shifts, so image_4 stays image_4 and you never rewire the graph. The author tested every bypass position against the Qwen multi-reference handler for exactly that reason. Feed a None into a required image input and you'll get an error, so bypass is for receivers that treat images as optional, like the multi-reference encoders.

    The seventh output, image_list, is different in kind. It's an IMAGE output with list semantics: one item per active slot in numerical order, then extras, each a single-image tensor at its original size and aspect. Wire it into anything and ComfyUI's list mapping runs that branch once per image. Nothing in the list is ever resized.

    Resizing applies only to image_1…image_6: turn it on with a megapixel target and references come back at that total pixel count, Lanczos, aspect kept. There's a Downscale only option in the node menu so you don't upscale a 0.5MP reference to 1MP for no reason. Rounding is to whole pixels, not multiples of 8 or 16 - unlike this pack's other nodes. Fine for reference conditioning; don't drag a reference output into a latent-shaped input.

    Inputs and outputs

    There's exactly one input socket: state, a STRING holding the serialized grid - six {file, enabled} slots, the extras array, and the resize settings. The custom UI replaces that widget with the tile grid, so you never type in it. Don't hand-edit it: the frontend is the interface, the string is plumbing.

    The seven outputs are what you'll actually wire: image_1 through image_6 into whatever the model wants per reference, and image_list into a per-image branch - an upscaler, a captioner, a Save Image.

    Installing it

    No Python packages. The repo's pyproject.toml declares an empty dependencies list and there's no requirements.txt, so this is a clone-and-restart, not a "hope pip resolves" install.

    cd ComfyUI/custom_nodes
    git clone https://github.com/A5Projects/ComfyUI-A5Nodes
    

    Restart ComfyUI and refresh the browser. Or search A5 Custom Nodes in ComfyUI Manager - the README's own words are to pick the numbered release rather than the Nightly version.

    One pack-specific gotcha: that single __init__.py registers ten nodes and raises RuntimeError on duplicate IDs - so delete any standalone copy of an A5 node before you install this, or startup fails.

    Where people get burned

    Files have to live inside ComfyUI. resolve_file() rejects anything outside the input, output or temp directory, so a pasted absolute path from your Downloads folder won't work - upload through the slot.

    The workflow doesn't carry the images. Selections are stored in the workflow JSON as filenames pointing at your ComfyUI input storage, so send it to a friend and they open six empty slots.

    Empty collection skips its branch, on purpose. With no active slots and no extras, image_list is an execution blocker rather than an empty list, so the per-image branch is skipped instead of erroring. The six reference outputs still pass through.

    Every reference costs VRAM. Six 1500px references won't be fun on an 8GB card - the same limit that has people collaging images by hand for KV edit. That's what the resize toggle is for.

    Frontend weirdness. The grid is a custom DOM widget, and the README recommends Classic node mode, saying Firefox has unresolved issues under Nodes 2.0. Given that the Nodes 2.0 rewrite has been breaking third-party rendering for months, believing the author is cheap insurance.

    Verdict

    The pack is obscure - a single-commit repo, no community discussion - but it ships a real regression suite and adds zero dependencies, which is more diligence than most packs you've installed. If you build multi-reference edit graphs, one purpose-made loader beats five pasted copies of Load Image. If you only ever feed one image, core Load Image still does the job.

    CategoryA5/image

    Inputs (1)

    NameTypeDefaultDescription
    stateSTRING{"version":1,"slots":[{"file":"","enabled":true},{"file":"","enabled":true},{"file":"","enabled":true},{"file":"","enabled":true},{"file":"","enabled":true},{"file":"","enabled":true}],"extras":[],"resize":false,"megapixels":1.0,"downscale_only":false}—

    Outputs (7)

    NameTypeDescription
    image_1IMAGEReference 1: optionally resized; None when empty or bypassed.
    image_2IMAGEReference 2: optionally resized; None when empty or bypassed.
    image_3IMAGEReference 3: optionally resized; None when empty or bypassed.
    image_4IMAGEReference 4: optionally resized; None when empty or bypassed.
    image_5IMAGEReference 5: optionally resized; None when empty or bypassed.
    image_6IMAGEReference 6: optionally resized; None when empty or bypassed.
    image_listIMAGEOriginal images, one per list item: active slots then extras. Never resized.