Motorway 5x7
Five inputs, seven outputs, two free read lanes
- MOTORWAY ππ¨
- ANY_(A)
- ANY_(B)
- ANY_(C)
- ANY_(D)
- ANY_(E)
- MOTORWAY ππ¨
- ANY (A)
- ANY (B)
- ANY (C)
- ANY (D)
- ANY (E)
- ANY (F)
- ANY (G)
When you've got five things to hand off but seven things to hand out, Motorway 5x7 is the stop you want. It's from the agilly1989 Nodes/Motorways pack, a keyed pipe that fixes the most annoying thing about big ComfyUI graphs: the twenty-meter wire you have to drag across the canvas every time a seed or a VAE needs to reach three different consumers.
The 5x7 means five inputs and seven outputs. And because the node generates a key slot for every output, you get seven named lanes (A through G) even though you're only feeding five of them. That leaves two lanes - F and G - with no input wire at all, which is the feature. They're free reads: type any key that an earlier Motorway stop has already written, and those outputs return that value. It's the pipe equivalent of saying "remember the model we loaded two nodes back" without reconnecting it.
How it works
The motorway is a custom class that behaves like a dict, with keys stored under sha256 hashes so they never collide with ComfyUI's own attributes. Each Motorway node pops the incoming MOTORWAY ππ¨, stores whatever is connected to its inputs under the matching _key widget values, clones the whole bag, reads one key per output, and passes the bag onward. Because values ride the single motorway wire and are looked up by name, a key written anywhere early in the route is readable at any later stop. Reusing a key further down overwrites what was stored - the author's README is blunt about it.
That keyed-by-name design is what separates it from the other pipe schools. rgthree's Context nodes carry typed bundles down one wire too, but Motorway trades strict typing for a loose dict where the key is the contract. Great for speed of wiring, slightly worse for "what did I put under this name" archaeology. Welcome to the community's ongoing pipe-vs-debuggability argument.
The inputs and outputs that matter
Required input is MOTORWAY ππ¨ - it only connects to other Motorway nodes, so you can't accidentally wire it into a normal model port. Then ANY_(A) through ANY_(E) inputs, each with a _key string widget, and outputs MOTORWAY ππ¨ plus ANY (A) through ANY (G). For the five input slots, the A-to-E key doubles as write and read. For F and G, the key is read-only. Set a key to empty and the lane idles.
Installing it
Search ComfyUI_agilly1989_motorway in ComfyUI Manager, or clone:
cd ComfyUI/custom_nodes
git clone https://github.com/agilly1989/ComfyUI_agilly1989_motorway
Restart ComfyUI. There's no requirements.txt and no model download - pure Python on ComfyUI's own comfy_types, so it installs clean and leaves your models folder alone. It's a beta project though; the README opens with a warning that things are actively being broken and fixed.
Common issues
You'll know a key mismatch when you see KeyError: Key: 'foo' doesn't exist in motorway (README form: 'MotorwayClass' object has no attribute 'hash_'). It means an output read a name that no stop has written yet - check spelling and case. And remember the overwrite rule: the same key written at two stops doesn't merge, the later one wins. Start the route with MotorwayStart or one of the Motorway primitive nodes and you're on the road.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| MOTORWAY ππ¨ | MOTORWAY ππ¨ | β | |
| ANY_(A)opt | * | β | |
| ANY_(B)opt | * | β | |
| ANY_(C)opt | * | β | |
| ANY_(D)opt | * | β | |
| ANY_(E)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 | β |
Outputs (8)
| Name | Type | Description |
|---|---|---|
| MOTORWAY ππ¨ | MOTORWAY ππ¨ | β |
| ANY (A) | * | β |
| ANY (B) | * | β |
| ANY (C) | * | β |
| ANY (D) | * | β |
| ANY (E) | * | β |
| ANY (F) | * | β |
| ANY (G) | * | β |