Set Wireless (Any)
Broadcast any value without a wire
- value
- value
Let's get the lie out of the way first: this node is not wireless, does not call any API, and needs no key (as in, an auth token - it takes a string key). What it actually does is write a value into a global Python dictionary that lives inside your running ComfyUI process, under a name you choose. Somewhere else on the canvas, a Get Wireless (Any) node reads that same name back out. Same process, no network, no serialization - just a dict lookup that's fast enough that the pack's "zero latency" claim is technically true and mostly beside the point.
The point is workflow readability. Big ComfyUI graphs turn into spaghetti fast: a prompt string, a seed, or a model that has to travel from one side of the canvas to the other produces a wire you can't follow, let alone route. Set Wireless (Any) lets you drop that value at its source and retrieve it wherever it's needed, with no 400-pixel connection crossing everything else. This is the same family of ideas as rgthree's context nodes and reroutes - tools whose entire job is making a workflow too large to read into one you can still work in.
It's worth being honest about the tradeoff, because the community has strong opinions here. The famous "Please Stop using the Anything Anywhere extension" thread (+96 and change) is a warning about hidden links: when you share a workflow and someone is missing a model, or a node is bypassed, debugging becomes archaeology. Notably, even that post's author recommends "Get and Set variables" as the sane alternative. This is exactly that - a typed, small-footprint Get/Set pair rather than a magic router. Just use it for things you'll remember the name of.
How it works
Under the hood in nodes.py, every Set node calls GlobalStore.set(key, value), which stores the value in a module-level _GLOBAL_CONTEXT dict. Two details matter:
- The key is stripped of leading/trailing whitespace before storing, so a stray space you paste around
face_imagewon't silently break the match (the author added this deliberately). - The node returns the value you gave it, pass-through style. So
Set Wireless (Any) → next nodekeeps working like a plain passthrough wire - which you should use, because it also forces execution order (more on that below).
The node is flagged as an output node (OUTPUT_NODE = True), so ComfyUI treats it as a runnable endpoint and won't skip it.
Inputs and outputs
Only two things to care about:
key- the string name of the global variable. Defaultvar_name. Make it descriptive and unique across your whole workflow: this is a global namespace, so two workflows running in the same ComfyUI session that reusemodel_basewill collide.value- the wildcard*input, which accepts everything:Model,VAE,CLIP,Conditioning,Mask, plus primitives likeINT,FLOAT,STRING. That's the whole point of the "Any" variant.
Output: value (*) - the same data, passed through. Wire it onward to keep a linear chain.
Installation
Zero dependencies, no model downloads - requirements.txt is literally "Standard Python library only." Install via ComfyUI Manager (search "ComfyUI-Wireless"), or the manual way:
cd ComfyUI/custom_nodes/
git clone https://github.com/errew/ComfyUI-Wireless.git
Then restart ComfyUI. That's the whole install.
Where people get burned
- Execution order. Nothing forces the Get node to run after this Set - there's no wire between them. If the Get fires first, it raises a
ValueError. The reliable fix is to feed Set's pass-through output into a downstream node, so the graph's dependency order guarantees Set runs before Get. - Stale values. The dict persists between runs in the same session. If you bypass or mute this Set node, the matching Get won't error - it'll silently hand back whatever was stored last time, possibly from a previous run. That's the single sneakiest failure mode of the whole Get/Set pattern.
- Restart wipes everything. The dict is in-memory only. Load the workflow fresh after restarting ComfyUI and every key is gone until a Set runs again.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| key | STRING | var_name | — |
| value | * | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| value | * | — |