Nougan Multi Load Image πΌοΈβ
Six Load Image nodes? One node with a plus button instead
- image_1
- image_2
- image_3
- image_4
- image_5
- image_6
- image_7
- image_8
- image_9
- image_10
- image_11
- image_12
- image_13
- image_14
- image_15
- image_16
Character work makes you load a lot of images. Four references, a pose, a background, a mask - that's seven Load Image nodes, each with its own little preview thumbnail, each one a separate box you have to drag around and re-point when you swap reference sets. The graph gets wide before it gets interesting.
Nougan Multi Load Image πΌοΈβ is the boring fix that saves real time: one node, press + to add a slot, each slot picks a file and gets its own IMAGE output.
How it works
ComfyUI nodes have a fixed output list - you can't add sockets at runtime from Python. So the node declares sixteen outputs, image_1 through image_16, and the frontend JS only shows as many as you've actually added. Add three slots, you see three outputs. The unused ones still exist in the schema, which is why the node's brief looks like a wall of outputs and the canvas shows a tidy little node.
Your file selections live in one hidden widget, images_json, a JSON list of filenames. That's what makes it save and reload like any other node - the picks are workflow data, not browser state. It's also why the node re-runs when you change a selection: the loader hashes that value to decide whether it needs to reload.
images_json is the only input, and you're not supposed to touch it by hand. The + button writes to it.
What it's genuinely good for
Reference stacks. Whether you're baking characters into a refmod, feeding a Flux 3 encode node an extra_image, or building a small batch for a comparison grid, the pattern "I need N images as N separate wires" shows up constantly and this is the shortest path to it.
It also dodges a real annoyance: each Load Image node carries a saved preview, and a graph with eight of them recomputes/reloads eight nodes' worth of state on every run. One loader with one hash is cheaper.
Plumbing-wise this is the same category as ComfyUI's primitive and value nodes - it exists to fight repetition and illegibility, and it does that by consolidating rather than by adding cleverness. The KB's point about that layer holds: it's invisible in every tutorial because it never touches pixels, and it's the difference between a graph you can read and one you can't.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/Winnougan/Nougan_Nodes
# restart ComfyUI
Or ComfyUI Manager β "Nougan". No dependencies, no models, nothing to download. Restart and hard-refresh the browser (Ctrl+F5) - the + button is JS, so with a stale bundle you get a node with one hidden text widget and no way to add slots, which looks broken and isn't.
Where people get burned
Files must already be in ComfyUI/input. The slot picker browses the input folder exactly like Load Image does. Dropping a file somewhere else and expecting the picker to find it is the classic complaint; drop it in input (or a subfolder of it) first.
Deleting a slot doesn't delete the wire. If you added four slots, wired them, then removed slot 2, check what's now dangling. Outputs shift meaning by index - the JS hides sockets, it doesn't renumber the file selections for you in every case.
Grabbing image_9 when you added two slots. Unused sockets hand downstream a black 64Γ64 placeholder, not an error. A phantom wire into a sampler gives you a 64Γ64 generation or a confusing shape complaint, so count your slots.
An empty slot. It emits a black 64Γ64 placeholder too - the console tells you which slot, and it'll sail straight into your workflow looking like a bug in something else. Expecting a batch. Each output is one image, not a joined batch. If you want an IMAGE batch of all slots, run them through a batch-image node downstream - this node's job is separate wires.
Editing images_json by hand. You can, and the format is plain JSON of filenames, but a typo silently gives you an empty slot. Use the button.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| images_json | STRING | [] | β |
Outputs (16)
| Name | Type | Description |
|---|---|---|
| image_1 | IMAGE | β |
| image_2 | IMAGE | β |
| image_3 | IMAGE | β |
| image_4 | IMAGE | β |
| image_5 | IMAGE | β |
| image_6 | IMAGE | β |
| image_7 | IMAGE | β |
| image_8 | IMAGE | β |
| image_9 | IMAGE | β |
| image_10 | IMAGE | β |
| image_11 | IMAGE | β |
| image_12 | IMAGE | β |
| image_13 | IMAGE | β |
| image_14 | IMAGE | β |
| image_15 | IMAGE | β |
| image_16 | IMAGE | β |