LC Image Ref Pipe Out 🖼️
Unpack your references right where the encoder is
- pipe
- pipe
- 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
This is the other half of LC123's reference-image pair. LC Image Ref Pipe Out 🖼️ takes the LC_IMAGE_REF_PIPE that LC Image Ref Pipe In 🖼️ produced and hands you back image_1 through image_16 as individual IMAGE sockets. Put it next to the encoder, unpack there, and the four or six reference loads at the top of your graph never have to reach across the canvas.
That's the whole value of a bundle: the graph stays readable in the middle, and the messy fan-out happens in one small place next to the consumer instead of along the entire wire path. It's the same trade rgthree's Context makes, and it carries the same tax - when a reference goes missing you're debugging pipe contents rather than tracing a link.
How it works
The node unpacks a fixed-size list: whatever arrived gets padded out to sixteen slots, and each slot becomes an output. Slots that went in empty come out empty, and they stay in position - if you wired image_1 and image_5, you get output sockets where 1 and 5 are live and 2 through 4 are not. Nothing shifts up to fill the gap, which is exactly what you want, because the Qwen 2.1-style encoder you're feeding thinks in slot positions.
The socket list itself is managed from the frontend. The visible image_N outputs are worked out as the larger of: one, the last wired output plus one, or the last wired input on the Pipe In node feeding it. It only ever removes unwired sockets from the tail, so a saved link keeps its slot index across a reload, and it follows plain Reroute nodes when counting.
There's also a pipe output that comes first and passes the bundle straight through. That's not decoration: it lets you tap images off at one point in the graph and still keep carrying the same pipe somewhere else - a second unpack later, or into another node that wants reference media.
The inputs and outputs that matter
One required input, pipe, typed LC_IMAGE_REF_PIPE. It only connects to LC123's Pipe In node (or to a pipe passed along from elsewhere in the pack), which is the node telling you it's a closed pair, not a general-purpose type.
Seventeen outputs: the pass-through pipe, then image_1 … image_16. In the common case you wire two or three of them into the reference sockets of your edit model's text encoder and leave the rest alone.
Installing it
No requirements.txt, no pip step, one clone for the entire pack.
cd ComfyUI/custom_nodes
git clone https://github.com/lonecatone23/ComfyUI_LC123_nodes.git
Manager users can search ComfyUI LC123 Nodes instead. Restart ComfyUI and check for the [LC123] loading from … line and the node count that follows it.
Common issues
Where did my output sockets go? They grow on demand. You start with image_1, wire it, and the next appears - that's the designed behaviour, matching the Pipe In node's autogrow. If the growth stops happening after an update, hard-refresh the browser: this is JavaScript, and ComfyUI doesn't pick up changed frontend files on its own.
Empty outputs are None, not blank images. Anything downstream with an optional image input will skip them quietly, which is the intended flow into a Qwen-Image-Edit-style encoder. Wire an empty slot into a node that requires an image and you'll get a failure at queue time, not a warning on the canvas - so leave the unused slots unwired.
The inputs have to come from the Pipe In node. Not "a pipe-shaped dict" - the typed socket. Mixed up as a source of "won't connect" confusion with the pack's other pipe (LC_PIPE, the general context object used by LC Aspect Ratio Pipe and friends). The two types are not interchangeable.
Sockets disappeared after a reload. They're rebuilt from what's actually wired, so a pipe that arrives unconnected shows a single image_1 and you re-grow from there. Nothing was lost from the workflow; there's just nothing to count yet.
The install trap worth knowing for the whole pack: a zip that unpacks one level too deep (ComfyUI_LC123_nodes/ComfyUI_LC123_nodes/) registers nothing at all, and the pack helpfully prints a warning naming the ignored path. __init__.py has to sit directly inside ComfyUI/custom_nodes/ComfyUI_LC123_nodes/.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| pipe | LC_IMAGE_REF_PIPE | — |
Outputs (17)
| Name | Type | Description |
|---|---|---|
| pipe | LC_IMAGE_REF_PIPE | — |
| 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 | — |