Image Receiver
Pull in an image (and its mask) sent by link_id
- IMAGE
- MASK
ImageReceiver is the catching end of Impact Pack's wireless image handoff. An ImageSender somewhere saves an image tagged with a link_id; a Receiver set to the same number picks it up, no wire crossing the canvas. From the README: "The images generated in ImageSender are automatically sent to the ImageReceiver with the same link_id." So the whole trick is one number matching on both ends.
Where it really pays off is anywhere a wire would be ugly or impossible. Split a sprawling workflow into a generation half and a processing half and connect them by link_id. Or - the use that shows up in the wild - build feedback loops across runs, like feeding the last AnimateDiff frame back into the next batch, since the handoff goes through disk rather than a live connection. A bonus most people miss: the Receiver also hands you a MASK, so it's a tidy way to bring a masked image in from elsewhere.
How it works
The Sender writes the image to the ComfyUI output directory keyed by link_id; the Receiver reads it back. The image widget on the node is a picker for the received file (it shows the incoming image), and the node decodes both the picture and any alpha as a separate mask output. It's a file-backed channel, which is exactly why it can bridge separate queue runs and not just separate corners of one graph.
The inputs and outputs
link_id(default 0) - the channel number. Match it to the Sender you want to receive from. This is the input that matters.image- the received-file selector.save_to_workflow(default false) - embed the received image into the saved workflow so it travels with the file.trigger_always(default false) - re-fetch every run rather than only when the input changes, which is what you want for a live feedback loop.image_data- the carried image payload (string), used internally for the save-to-workflow behavior.
Two outputs: IMAGE (the received picture) and MASK (its alpha, if any). Wire them into whatever comes next - a detailer, a compositor, another sampler.
How to install it
ComfyUI Manager: search ComfyUI Impact Pack, install, restart. Manual: cd ComfyUI/custom_nodes && git clone https://github.com/ltdrdata/ComfyUI-Impact-Pack, install requirements into ComfyUI's Python (pip install -r requirements.txt, or ..\..\..\python_embeded\python.exe -m pip install -r requirements.txt on Windows portable), then restart. Auto-install ended at v7.6, so run the requirements yourself. A small SAM model downloads to ComfyUI/models/sams on first run.
Common issues
Nothing comes through. Mismatched link_ids. A Receiver on link_id 0 only sees Senders on link_id 0 - the single most common mistake with this pair. Confirm both numbers match.
It's showing a stale image. The Receiver reads what the Sender last wrote to disk, so if the Sender hasn't run this session, you get the previous file. For feedback loops where you want a fresh fetch every queue, turn on trigger_always so it re-reads instead of caching the input.
You need latents, not images. This pair moves images. For passing a latent between graph regions or runs, the pack ships LatentSender / LatentReceiver - same link_id idea, latent payload. Note the README's caveat there: LatentSender can't tell SDXL latents from SD1.5, so its thumbnails are decoded the SD1.5 way.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| image | COMBO | 1 options: example.png | |
| link_id | INT | 00–9223372036854776000 | — |
| save_to_workflow | BOOLEAN | false | — |
| image_data | STRING | — | |
| trigger_always | BOOLEAN | false | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |
| MASK | MASK | — |