Nodes/JSON Dynamic Loader/Image Receiver (Channel)
ComfyUI Node

Image Receiver (Channel)

Pass an image between two ComfyUI tabs without touching disk

By ethanfel·Created 7 months ago·Updated 2 months ago· 2
Image Receiver (Channel)
    • image
    • mask
    • filename
    channeldefault
    activetrue

    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.

    CategoryJSON Dynamic/image

    Inputs (2)

    NameTypeDefaultDescription
    channelSTRINGdefault
    activeBOOLEANtrue

    Outputs (3)

    NameTypeDescription
    imageIMAGE
    maskMASK
    filenameSTRING