ROUTE (JOV) π
A data bus that keeps monster graphs readable
- π
- π
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
Big ComfyUI graphs become spaghetti. Long wires crossing the canvas, connections you can't trace, node clusters you can't move without breaking three links. ROUTE is Jovimetrix's answer: instead of drawing data from here to there, you drop data onto a bus at one end and pick it up at the other. It's a dynamic bus node, and it's one of those "you don't need it until you need it badly" utilities.
Here's how it works, and it's cleverer than it looks. You connect things into ROUTE's inputs - as many as you want, of any type, in any order - and it creates a matching output for each, preserving order. Wire that to another ROUTE via its π BUS input and the downstream node pre-populates with the same set of outputs. So instead of a tangle of individual wires spanning your graph, you draw one thick bus line between route nodes and fan out at the far end. The tooltip on π says it plainly: "Pass through another route node to pre-populate the outputs."
The description spells out the data rules: the bus input is passed straight through, and every other input gets collected and returned as a tuple in insertion order. The outputs are a π BUS plus a whole bank of * slots - the actual number is dynamic because the frontend JS grows them as you connect. That dynamic behavior is the source of both the power and the occasional confusion: the outputs only show up once connections exist, so a fresh ROUTE looks almost empty.
Where it belongs in a workflow: anywhere you have several signals heading to the same destination - a sampler feeding a crop, a mask, a text - bundle them into a ROUTE, run the bus across the canvas, and unpack at the far node. It also works great for keeping node groups self-contained: define the interface on one ROUTE, consume it on another, and you can move the whole group without redrawing wires. Jovimetrix is big on this pattern; ROUTE plus STACK and FLATTEN are the pack's answer to graph hygiene.
One honest note: this node's history is a little rocky. Its description is calm now, but there was a time when ROUTE's dynamic connections had bugs - that's literally why RE-ROUTE (JOV) existed as a crude pass-through workaround. Modern builds handle it fine, but if an old workflow references ROUTE and behaves oddly, check which Jovimetrix version it was built for.
Install is the pack routine: ComfyUI Manager β search "Jovimetrix", or:
cd ComfyUI/custom_nodes
git clone https://github.com/Amorano/Jovimetrix.git
pip install -r Jovimetrix/requirements.txt
Then restart. Shared dependencies only (numpy, opencv-contrib-python, Pillow, matplotlib, the cozy-comfyui helpers), no models. Keep ComfyUI at 0.1.3+ with a modern frontend - ROUTE leans on frontend behavior, so a stale one is the most common way it misbehaves.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| πopt | BUS | Pass through another route node to pre-populate the outputs. |
Outputs (128)
| Name | Type | Description |
|---|---|---|
| π | BUS | P |
| * | * | a |
| * | * | s |
| * | * | s |
| * | * | |
| * | * | t |
| * | * | h |
| * | * | r |
| * | * | o |
| * | * | u |
| * | * | g |
| * | * | h |
| * | * | |
| * | * | f |
| * | * | o |
| * | * | r |
| * | * | |
| * | * | R |
| * | * | o |
| * | * | u |
| * | * | t |
| * | * | e |
| * | * | |
| * | * | n |
| * | * | o |
| * | * | d |
| * | * | e |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |
| * | * | β |