ImpactValueReceiver
A typed value slot fed by a matching sender elsewhere
- *
Impact Pack has a small family of sender/receiver node pairs - ImageSender/ImageReceiver for pictures, LatentSender/LatentReceiver for latents - that pass a value between parts of a workflow (or between separate workflows) without a direct wire connecting them, matched instead by a shared link_id. ImpactValueReceiver is the same pattern applied to plain typed values: strings, ints, floats, booleans. It's paired with ImpactValueSender elsewhere in your graph.
This lives in the README's "Logics (experimental)" section, alongside ImpactCompare, ImpactConditionalBranch, and the other loop/branch primitives the pack ships for building dynamic, self-modifying workflows. It's plumbing for that world, not a general-purpose node you'd reach for in an ordinary generation graph.
How it works
You set typ to the kind of value you're expecting (STRING, INT, FLOAT, or BOOLEAN), and the node exposes a * (wildcard) output that resolves to that concrete type. value is a text field holding a fallback - the value the node outputs if nothing has sent it anything via a matching ImpactValueSender yet, entered as a string and interpreted according to typ. link_id is the pairing key: an ImpactValueSender set to the same link_id elsewhere in the graph is what actually feeds this receiver a live value at runtime.
This is the kind of node that matters for workflows using the pack's loop/queue-trigger machinery - where a value needs to travel from one part of a repeatedly-re-queued graph to another without a conventional direct wire, because the two parts run in different passes.
The inputs and output
typ(enum:STRING/INT/FLOAT/BOOLEAN) - what type the received value should be interpreted as.value(default empty string) - the fallback value, used if no sender has delivered anything for thislink_idyet. Typed according totyp.link_id(default 0) - the pairing key matching this receiver to a specificImpactValueSender.
Output is a single * (wildcard) - resolves to whatever concrete type typ specifies, ready to feed into any node expecting that type.
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 models - pure value-passing logic.
Common issues & troubleshooting
Always getting the fallback value, never the sent one. Check the link_id on both ImpactValueReceiver and its matching ImpactValueSender - a mismatch means the sender's value never reaches this receiver, and you silently fall back to whatever's typed in value.
Type-mismatch warnings on the output. Like several of Impact Pack's logic nodes, this one uses wildcard (*) typing so the output can adapt to STRING/INT/FLOAT/BOOLEAN. The README's own limitation note applies here too: dynamic typing isn't officially supported by ComfyUI yet, so validation can flag a connection that actually works fine at runtime.
Not sure you need this. If your value only ever needs to travel forward through a normal, single-pass graph, a direct wire is simpler and easier to follow. Reach for sender/receiver pairs specifically when the value needs to cross between separately-triggered parts of a workflow (loop iterations, queue-triggered re-runs) where a plain wire can't reach.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| typ | COMBO | 4 options: STRING, INT, FLOAT, BOOLEAN | |
| value | STRING | — | |
| link_id | INT | 00–9223372036854776000 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| * | * | — |