Loom Image Out
The other half of your image-routing stream
- loom
- LOOM
- IMAGE
- exists
You've pushed an image into the loom with Loom Image In - now you need it back. Loom Image Out is the matching pull node: it grabs the image stored under a label and hands it to whatever's next, while passing the loom through so the rest of your stream keeps flowing.
Why you'd reach for it
Every subgraph that consumes an image ends with one of these. The img2img stage, the edit stage, the preview stage - each one starts with Loom Image Out pulling the current image out of the stream. If a stage modifies the image, it feeds the result back through Loom Image In (same label), and everything downstream sees the updated version. That loop is the entire c4f-wire-loom concept, and Loom Image Out is the read side of it.
Because it reads without removing, you can also branch: one image in the loom, three subgraphs each pulling their own copy through Loom Split. The original stays put, so every branch gets a consistent starting point.
How it works
A lookup, not a removal:
key = f"IMAGE_{label}" if label else "IMAGE"
if key not in loom:
return (loom, None, False)
return (loom, loom[key], loom[key] != None)
The loom is passed through untouched - multiple readers can pull the same image, and nothing disappears from the stream when you read it.
The outputs that matter
- IMAGE: the image under that label, or
Noneif absent. - exists (BOOLEAN):
Truewhen the key exists. This is your debug light - wire it to aPrimitiveor use it to gate a branch ("only run this stage if the image made it into the loom"). - LOOM: the unchanged loom, passed onward.
Inputs are loom (LOOM, required) and label (string), which must match the Loom Image In that stored the image.
Installing
Part of c4f-wire-loom. ComfyUI Manager → search "c4f-wire-loom" → install → restart, or:
cd ComfyUI/custom_nodes
git clone https://github.com/Codes4Fun/c4f-wire-loom
No models, no extra deps - restart and it's available.
Where it bites
Same label-mismatch trap as every loom out node: exists returns False when the label doesn't match anything, and the cause is almost always a typo or an IMAGE_ prefix mismatch (Loom Image In with label image2 stores under IMAGE_image2 - use the same image2 on the out node, not IMAGE_image2). Second trap: the stream is one-directional. If the image is stored after this node in the execution order, the loom hasn't seen it yet, so you get None. Check node order before debugging anything else. The pack-wide Nodes 2.0 arrow-drag collapse quirk applies, with the built-in workaround.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| loom | LOOM | — | |
| labelopt | STRING | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| LOOM | LOOM | — |
| IMAGE | IMAGE | — |
| exists | BOOLEAN | — |