RedNode Sender
Push values into a subgraph by name, spliced into real wires before the run
- value_1
- value_2
- value_3
- value_4
- value_5
- value_6
- value_7
- value_8
- value_9
- value_10
- value_11
- value_12
- value_13
- value_14
- value_15
- value_16
- value_17
- value_18
- value_19
- value_20
- value_21
- value_22
- value_23
- value_24
- value_25
- value_26
- value_27
- value_28
- value_29
- value_30
- value_31
- value_32
- value_33
- value_34
- value_35
- value_36
- value_37
- value_38
- value_39
- value_40
- value_41
- value_42
- value_43
- value_44
- value_45
- value_46
- value_47
- value_48
- value_49
- value_50
- value_51
- value_52
- value_53
- value_54
- value_55
- value_56
- value_57
- value_58
- value_59
- value_60
- value_61
- value_62
- value_63
- value_64
RedNode Subgraph Send is the writing end of the pack's channel system: it puts values on a named channel so a RedNode Grabber inside a subgraph can pull them out - with nothing wired through the boundary by hand. You add rows in the panel, each gets a name, a type and a socket, and whatever you connect comes out on the other side by name. It's the clean replacement for a canvas covered in Get and Set nodes.
The mechanical heart of the pair is worth repeating, because it's what makes them trustworthy: the Send and the Grabber are spliced into ordinary wires just before the graph runs, and by execution time no channel exists at all. ComfyUI computes execution order purely from links, so there's no hidden ordering to get wrong and no race - which is exactly the failure mode that makes most "wireless" systems feel cursed in practice.
How it works
A Sender has a channel input - a plain name (trimmed to 64 chars) - and a panel of rows. Each row is a named value with a type and a socket: value_1 through value_64. Wire whatever you want to pass into the sockets; everything on the same channel groups together, so several Senders can share a channel and a single Grabber lists them all. The publish toggle is the scope control: off (the default), the channel belongs to the subgraph the Sender sits in; on, the channel is offered further out. The default exists because two instances of one subgraph would otherwise both claim the same name - leave it off unless you specifically need to reach outside.
The inputs
channel- the channel these values go on.publish- off = local to this subgraph; on = offered outward too.config- panel state, edited on the node.value_1…value_64- the values to put on the channel, each wired in the panel.
This is an output node, so it always runs when reached. There are no outputs - its job is complete once the values land on the channel.
Installing it
git clone https://github.com/RedNodeAI/ComfyUI-RedNodeStudio.git ComfyUI/custom_nodes/ComfyUI-RedNodeStudio
Restart ComfyUI, or search RedNode Studio in ComfyUI Manager. No pip deps, no models. Python 3.10+.
The honest notes
The pack calls Sender/Grabber a prototype, and you should treat it that way - the splice logic is straightforward, but it's not the battle-tested core of the pack. The two failure modes to know: channel names must match exactly between ends (a stray space is a silent empty Grabber), and if a value never appears on the Grabber's list, check the Sender's sockets are actually wired - an unconnected row sends nothing. For crossing a subgraph boundary with several values, it's cleaner than a wall of Get/Set nodes, and because the pair becomes real wires before execution, it won't bite you with ordering bugs. Just don't build a mission-critical rig on a prototype label without a fallback plan.
Inputs (67)
| Name | Type | Default | Description |
|---|---|---|---|
| channel | STRING | the channel these values go on. A channel is a group: several Sends can share one and a single Receive picks up all of them. | |
| publish | BOOLEAN | false | Off, this belongs to the subgraph it sits in. On, the channel is offered further out too. Off is the safe default: two instances of one subgraph would otherwise both claim the same name. |
| config | STRING | {} | — |
| value_1opt | * | — | |
| value_2opt | * | — | |
| value_3opt | * | — | |
| value_4opt | * | — | |
| value_5opt | * | — | |
| value_6opt | * | — | |
| value_7opt | * | — | |
| value_8opt | * | — | |
| value_9opt | * | — | |
| value_10opt | * | — | |
| value_11opt | * | — | |
| value_12opt | * | — | |
| value_13opt | * | — | |
| value_14opt | * | — | |
| value_15opt | * | — | |
| value_16opt | * | — | |
| value_17opt | * | — | |
| value_18opt | * | — | |
| value_19opt | * | — | |
| value_20opt | * | — | |
| value_21opt | * | — | |
| value_22opt | * | — | |
| value_23opt | * | — | |
| value_24opt | * | — | |
| value_25opt | * | — | |
| value_26opt | * | — | |
| value_27opt | * | — | |
| value_28opt | * | — | |
| value_29opt | * | — | |
| value_30opt | * | — | |
| value_31opt | * | — | |
| value_32opt | * | — | |
| value_33opt | * | — | |
| value_34opt | * | — | |
| value_35opt | * | — | |
| value_36opt | * | — | |
| value_37opt | * | — | |
| value_38opt | * | — | |
| value_39opt | * | — | |
| value_40opt | * | — | |
| value_41opt | * | — | |
| value_42opt | * | — | |
| value_43opt | * | — | |
| value_44opt | * | — | |
| value_45opt | * | — | |
| value_46opt | * | — | |
| value_47opt | * | — | |
| value_48opt | * | — | |
| value_49opt | * | — | |
| value_50opt | * | — | |
| value_51opt | * | — | |
| value_52opt | * | — | |
| value_53opt | * | — | |
| value_54opt | * | — | |
| value_55opt | * | — | |
| value_56opt | * | — | |
| value_57opt | * | — | |
| value_58opt | * | — | |
| value_59opt | * | — | |
| value_60opt | * | — | |
| value_61opt | * | — | |
| value_62opt | * | — | |
| value_63opt | * | — | |
| value_64opt | * | — |
Outputs (0)
No outputs