LatentSender
Pass a latent between workflows without a save/load node
- samples
LatentSender hands a latent off to a matching LatentReceiver node somewhere else in ComfyUI, without you manually saving and reloading a file. Pick the same link_id on both ends and the receiver picks up whatever the sender last produced. It's one half of the pack's sender/receiver family - there's an image version (ImageSender/ImageReceiver) doing the same trick for pictures.
This is a genuinely niche node - it barely comes up in community discussion - but the mechanism is clever enough to be worth understanding once. LatentSender doesn't write a .latent file you have to track by hand. It's built on top of PreviewLatent, which encodes the actual latent tensor as payload data hidden inside the thumbnail image ComfyUI generates for the preview. The little preview picture you see in the UI isn't just a decorative rendering - it's carrying the real latent data in its metadata. The receiver reads that payload back out. No intermediate file management, no worrying about paths; the link_id is the only thing that has to match.
The catch worth knowing before you use it
The thumbnail you see is generated by decoding the latent to a rough preview image, and per the pack's own README: "Due to the current structure of ComfyUI, it is unable to distinguish between SDXL latent and SD1.5/SD2.1 latent. Therefore, it generates thumbnails by decoding them using the SD1.5 method." In plain terms: if you're sending an SDXL or newer-architecture latent, the little preview thumbnail may look washed-out or off-color, because it's being decoded with the wrong model's approximation. This only affects the preview image - the actual latent tensor payload embedded in it transfers correctly, so the receiver still gets the real data. Don't panic at a weird-looking thumbnail; check the receiver's actual output before assuming anything broke.
The inputs that matter
samples(LATENT, required) - the latent to send.link_id(INT, default 0) - the pairing key. Set the matching LatentReceiver to the same number and it picks this up. Different pairs in the same workflow should use different IDs so they don't collide.filename_prefix(defaultlatents/LatentSender) - where the underlying preview/payload file gets saved on disk.preview_method- which decoder approximation renders the visible thumbnail (Latent2RGB-FLUX.1,Latent2RGB-SDXL,Latent2RGB-SD15, TAESD variants, and others). Match this to your actual model family to get a more accurate-looking preview - though as noted above, this only fixes the thumbnail's color, not the underlying data.
There's no LATENT output on this node - it's a terminal, output-only node (is_output_node: true), same shape as a Save node. The value only comes back out on the paired LatentReceiver elsewhere in your graph.
How to install it
Via ComfyUI Manager: search ComfyUI Impact Pack, install, restart. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/ltdrdata/ComfyUI-Impact-Pack comfyui-impact-pack
cd comfyui-impact-pack
python -m pip install -r requirements.txt # ComfyUI's python; python_embeded on portable
then restart. No extra models - this is pure plumbing, riding on ComfyUI's own preview mechanism.
Common issues & troubleshooting
Nothing arrives at the receiver. Double-check the link_id matches on both nodes exactly - a mismatch (even by one digit) means the receiver is listening for a different pairing and gets nothing.
The preview thumbnail looks wrong / discolored. As covered above, that's the SD1.5-decode limitation on SDXL and other latents - a display-only quirk, not a data problem. Set preview_method to the closest match for your model family to at least get a cleaner-looking preview.
Why not just use a normal Save/Load Latent node? You can - that's the more common, more discoverable path, and for most people it's the better default because it's explicit about what file went where. LatentSender/Receiver exists for a narrower case: passing a latent between two ComfyUI graphs (or two parts of a complex graph) live, during execution, without you manually managing the file. If you're not already reaching for it, a plain Save Latent → Load Latent pair is simpler and easier to reason about.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| samples | LATENT | — | |
| filename_prefix | STRING | latents/LatentSender | — |
| link_id | INT | 00–9223372036854776000 | — |
| preview_method | COMBO | 13 options: Latent2RGB-FLUX.1, Latent2RGB-SDXL, Latent2RGB-SD15, Latent2RGB-SD3, Latent2RGB-SD-X4, Latent2RGB-Playground-2.5, +7 |
Outputs (0)
No outputs