Motorway 7x8
The first fan-out, where the off-ramps outnumber the on-ramps
- MOTORWAY ππ¨
- ANY_(A)
- ANY_(B)
- ANY_(C)
- ANY_(D)
- ANY_(E)
- ANY_(F)
- ANY_(G)
- MOTORWAY ππ¨
- ANY (A)
- ANY (B)
- ANY (C)
- ANY (D)
- ANY (E)
- ANY (F)
- ANY (G)
- ANY (H)
Motorway 7x8 is where the Motorway family starts to fan out. Seven inputs, eight outputs - more off-ramps than on-ramps, which tells you what it's for: a node that spreads the values already riding on the bus to eight different places. It's part of ComfyUI_agilly1989_motorway, a small pack that implements a "pipe" for ComfyUI, where a named-value dictionary rides a single MOTORWAY ππ¨ wire through your graph.
The thing to remember about any Motorway node is that inputs write and outputs read, and they're independent. So a 7x8 doesn't mean "plug in seven, get eight copies." It means "attach up to seven new values, and pull up to eight existing values off" - the eight outputs can be keys written anywhere earlier in the graph. That makes 7x8 the natural hub right before a stage that needs to send signals in many directions: a big sampling block, a tiled upscaler, a bundle of preview/save nodes.
How it works
The bus is a dict-like object, keys stored as sha256 hashes of the names you type. Each Motorway node writes connected inputs onto the bus under their _key names, clones the bus, and emits the clone plus one output per non-empty output key, each looking up its own key. Cloning means nothing mutates in place and values persist downstream until overwritten by a later write to the same key.
One quirk specific to nodes where outputs outnumber inputs: the key fields are generated up to the larger of the two counts. So 7x8 has seven input sockets but eight _key fields - ANY (A)_key through ANY (H)_key. The extra key fields exist to drive the output sockets, which is fine and expected, just slightly surprising the first time you open it.
The inputs and outputs that matter
MOTORWAY ππ¨- required bus input and output.ANY (A)throughANY (G)- seven inputs; each with a_keyfield for naming what you attach.ANY (A)throughANY (H)- eight outputs; each with a_keyfield. The keys you type here are lookups into the bus.
Fill output keys A through H in order, because an empty key makes that socket emit nothing and shifts everything after it up a position. Positional outputs plus optional keys is the one genuinely fiddly bit of this design.
Installing it
cd ComfyUI/custom_nodes
git clone https://github.com/agilly1989/ComfyUI_agilly1989_motorway
Restart ComfyUI, or use ComfyUI Manager (search "motorway"). No pip dependencies, no model downloads - it's pure Python, and the whole ~120-node Motorway family installs at once.
Common issues
'MotorwayClass' object has no attribute 'hash_'- a read key doesn't exist on the bus yet. Spelling and case matter; keys are exact.- Output socket shift with gaps - leave
ANY (A)_keyblank and the value fromANY (B)_keycomes out socket A. Keep them in order. - Beta, author-broken disclaimer included. The README warns it's broken with async and that the author "will fix when I get the time/motivation." Works fine for normal runs, just know the caveats.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| MOTORWAY ππ¨ | MOTORWAY ππ¨ | β | |
| ANY_(A)opt | * | β | |
| ANY_(B)opt | * | β | |
| ANY_(C)opt | * | β | |
| ANY_(D)opt | * | β | |
| ANY_(E)opt | * | β | |
| ANY_(F)opt | * | β | |
| ANY_(G)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 | β |
Outputs (9)
| Name | Type | Description |
|---|---|---|
| MOTORWAY ππ¨ | MOTORWAY ππ¨ | β |
| ANY (A) | * | β |
| ANY (B) | * | β |
| ANY (C) | * | β |
| ANY (D) | * | β |
| ANY (E) | * | β |
| ANY (F) | * | β |
| ANY (G) | * | β |
| ANY (H) | * | β |