Image Receiver (Channel)
Pass an image between two ComfyUI tabs without touching disk
- image
- mask
- filename
Image Receiver is the receiving end of the pack's channel system: a named "channel" holds a single image filename, and this node loads whatever file the channel currently points at. Its job is to be the far side of a handoff - you send an image to a channel in one workflow, drop a receiver on the same channel in another, and the second workflow gets the image as if it were its own.
How it works
The mechanism is deliberately simple and it's worth knowing because it explains the failure modes. When you "send" to a channel, the pack writes a tiny channels.json file in the node's own directory, mapping channel name → filename. The receiver reads that file, looks up its channel, and then loads the referenced image from ComfyUI's input/ folder - it doesn't store pixels in the JSON, just the name of a file that lives in the normal input directory.
That design means the handoff survives restarts (the file persists), but it also means the receiving side only works if the image file is actually still in input/. The send side is the pack's Preview to Load Image node - its Send to Channel button writes the channel entry after a run. The receiver then returns the image as IMAGE, its mask (for images with alpha), and the filename string it resolved.
The inputs that matter
channel(STRING, default"default") - which named channel to read. Keep it identical on sender and receiver; the default is just a convention, not magic.active(BOOLEAN, default true) - the same switch trick as the pack's Load Image: when false, the node returns execution blockers and skips the downstream branch.
Where people get burned
- "Receiver outputs nothing." The channel is empty (nothing sent yet) or the filename it holds no longer exists in
input/. In both cases the receiver returns an execution blocker, so downstream silently doesn't run. Send from the other workflow first, then run this one. - "It loaded an old image." Each channel holds exactly one filename - whatever was sent most recently. There's no history; if you expected a queue, this isn't it.
- I moved the image file and it broke. Right - the receiver depends on the file staying in
input/.
Install
Part of ComfyUI-JSON-Dynamic. ComfyUI Manager → search JSON Dynamic Loader, or:
cd ComfyUI/custom_nodes
git clone https://github.com/ethanfel/ComfyUI-JSON-Dynamic.git
# restart ComfyUI
No dependencies beyond the bundled JS and ComfyUI core.
Verdict
The classic pattern is a two-tab pipeline: workflow A generates and pushes a preview to a channel, workflow B consumes it as its reference or init image. If that sounds like your setup, the receiver is the missing half. If you only ever work in one workflow, you can skip it - though the same channel mechanism can route images between nodes in one graph too.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| channel | STRING | default | — |
| active | BOOLEAN | true | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| mask | MASK | — |
| filename | STRING | — |