Motorway 1x9
Motorway 1x9
- MOTORWAY ππ¨
- ANY_(A)
- MOTORWAY ππ¨
- ANY (A)
- ANY (B)
- ANY (C)
- ANY (D)
- ANY (E)
- ANY (F)
- ANY (G)
- ANY (H)
- ANY (I)
Motorway 1x9 is the fan-out node of the agilly1989 "Motorway" pack, and the name tells you exactly what it does: one value goes in, nine named values come out. If you've ever rebuilt a big workflow after giving up on a wall of crossing wires, this is the node that lets you not do that - you park one thing on the bus, then tap it in nine different places downstream.
The "1x9" is read as Motorway [inputs]x[outputs], the pack's naming scheme. So 1x9 takes a single data input and hands back nine separate outputs, plus the bus itself. It's part of agilly1989/ComfyUI_agilly1989_motorway, a beta, one-dev "pipe" implementation by agilly1989 (findable as @agilly1989 in the Comfy Org discord). Where rgthree Context and Impact Pack pipes carry values on a dict, the Motorway carries a custom MotorwayClass object, and it's the same bus-type wire running through every node.
How it works
Every Motorway node works the same way. The incoming MOTORWAY ππ¨ connection (required) is a bus object that's been passed along from the MotorwayStart node you must begin with. You type a key - a plain string like model or positive - into a _key box, connect a value, and the node writes that value onto the bus under your key. Keys aren't stored under their real names; each one is sha256-hashed into an attribute like hash_3f6aβ¦, which is why the error messages read so cryptically. Later, any Motorway node that asks for the same key gets the value back. Same key twice overwrites the first write - the bus is a pile of name-tags, not a log.
The 1x9 twist: because it has more outputs than inputs, the key slots and the data inputs don't line up 1:1. It has:
- one data input,
ANY_(A), and nine key slotsANY_(A)_keythroughANY_(I)_key - the required
MOTORWAY ππ¨bus input - outputs
MOTORWAY ππ¨plusANY (A)throughANY (I)
Slot A's key does double duty - it names the input and reads output A, so whatever you write under "A" comes right back out of A. Slots B through I have no matching input, so their keys are pure readers: put any key that exists on the bus into ANY_(B)_key, and output B hands it over. That's the real use of a 1x9 - it's a read-many distributor. Write a seed, a checkpoint, a prompt, or a whole conditioning once upstream, then fan it out to nine consumers through one tidy node.
Installing
cd ComfyUI/custom_nodes
git clone https://github.com/agilly1989/ComfyUI_agilly1989_motorway
then restart ComfyUI. Or find ComfyUI_agilly1989_motorway in ComfyUI Manager. It's pure Python with zero extra dependencies and no model downloads - nothing to hunt down. Start a flow with MotorwayStart, and the pack's own Example.json shows the intended usage.
Common issues
'MotorwayClass' object has no attribute 'hash_'- that's a key that doesn't exist on the bus yet. You typo'd it, or you never wrote it upstream. Check the key strings.- The node errors when a key is missing: every
_keyslot you're actually reading needs a value. An empty key means the output for that slot never gets produced, so wiring anything into it makes ComfyUI hit a missing-output error. - Don't type a key into an input slot you haven't connected - an unconnected input writes
Noneover that key, clobbering a value you wanted to keep.
It's a beta pack, and the author says so on the tin. For plain key/value plumbing it works, and it makes wire spaghetti a lot less spaghettified.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| MOTORWAY ππ¨ | MOTORWAY ππ¨ | β | |
| ANY_(A)opt | * | β | |
| ANY_(A)_keyopt | STRING | β | |
| ANY_(B)_keyopt | STRING | β | |
| ANY_(C)_keyopt | STRING | β | |
| ANY_(D)_keyopt | STRING | β | |
| ANY_(E)_keyopt | STRING | β | |
| ANY_(F)_keyopt | STRING | β | |
| ANY_(G)_keyopt | STRING | β | |
| ANY_(H)_keyopt | STRING | β | |
| ANY_(I)_keyopt | STRING | β |
Outputs (10)
| Name | Type | Description |
|---|---|---|
| MOTORWAY ππ¨ | MOTORWAY ππ¨ | β |
| ANY (A) | * | β |
| ANY (B) | * | β |
| ANY (C) | * | β |
| ANY (D) | * | β |
| ANY (E) | * | β |
| ANY (F) | * | β |
| ANY (G) | * | β |
| ANY (H) | * | β |
| ANY (I) | * | β |