ComfyUI Node

&Node

Send values across your workflow with zero visible wires

By drupsys·Created 6 months ago·Updated 6 months ago· 0
&Node
    • trigger
    ref_name

    Ever rebuilt half a workflow because one value - a seed, a prompt, a control image - has to travel from one side of the canvas to the other? That's the wire that turns a clean graph into a noodle plate. &Node (class 0nedark_RefOfNode) is the "send" end of eks-spaghetti's answer: instead of dragging that connection across everything, you give the value a name and the matching *Node (PointToNode) reads it from anywhere in the graph. No wire, no crossing the canvas, no re-routing through the middle of your layout.

    It belongs to the plumbing layer of ComfyUI - the utility nodes that touch no pixels but keep a big workflow readable (the modidex knowledge base's comfyui-node-plumbing essay calls repetition and illegibility the two problems all plumbing fights). This pack's fix for both is a named-value bus: one source fanned out to several consumers, all without visible connections.

    How it works

    The mechanism is refreshingly simple. When the graph runs, &Node collects every value wired into its inputs and stores them in an in-process Python dict keyed by your ref_name - real objects, so an IMAGE stays an image and a CONDITIONING stays a CONDITIONING. The matching *Node later reads that same dict entry. That's the whole data path.

    The interesting bit is the trigger output you'll never actually see. It's marked as the node's output, but the frontend strips it off the canvas - it doesn't carry data. Instead, when you queue the prompt, the pack's JavaScript rewrites the graph so the consumer gets a hidden _ref_trigger link pointing back to this node's trigger output. That's what forces &Node to execute before the consumer reads the store. Without it, ordering would be luck, and ordering is the whole game here.

    The inputs that matter

    • ref_name - the only real widget, a text field. Type a name, and the node title updates to Ref -> <name>. Keep it short and unique: it must match the consumer's dropdown exactly.
    • Dynamic input sockets - &Node starts with a single ... wildcard placeholder and grows an input for every wire you drag in. Inputs inherit the name and type of whatever you connect (right-click an input → Rename Input if you want a custom label).

    Install

    From ComfyUI Manager, search eks-spaghetti (registered as 0nedark-eks-spaghetti) and install, or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/drupsys/eks-spaghetti
    

    Restart ComfyUI. That's it - no Python dependencies, no model downloads, nothing heavy. Registry users can run comfy node registry-install 0nedark-eks-spaghetti.

    Where people get burned

    Ref names are global to the whole graph, and duplicates aren't caught - two &Nodes with the same name means whichever executes last wins, and your consumer silently reads the wrong one. Spell-check names, because a mismatch is silent too. The store lives in memory, so nothing survives a session, but that's fine: a run re-executes the graph anyway.

    Also know the trade you're making. Hiding wires is exactly the pattern the community pushed back on with the "Please Stop using the Anything Anywhere extension" backlash - it's convenient until you have to debug what feeds what. This isn't type-erasure (the refs carry real typed objects), but you are trading a visible wire for an invisible dependency. Use it for the few long, boring connections, not your whole graph.

    Categoryutils

    Inputs (1)

    NameTypeDefaultDescription
    ref_nameSTRING

    Outputs (1)

    NameTypeDescription
    trigger*