Motorway 3x8
Three things in, eight things out, one bus doing the hauling
- MOTORWAY ππ¨
- ANY_(A)
- ANY_(B)
- ANY_(C)
- MOTORWAY ππ¨
- ANY (A)
- ANY (B)
- ANY (C)
- ANY (D)
- ANY (E)
- ANY (F)
- ANY (G)
- ANY (H)
Motorway 3x8 is the fan-out ramp from the agilly1989 Motorway pack that takes three inputs and can deliver eight outputs. It's the kind of node you reach for when a few values need to reach a lot of places: think of a character-consistency workflow where the same model, same seed and same conditioning have to feed every one of eight downstream nodes. That's exactly the case a real user showed off on r/comfyui - replying to a "wire spaghetti" thread with the same workflow collapsed onto a Motorway bus. This is the pack's whole reason to exist: fewer wires, less spaghetti.
The pack is a pipe implementation. A custom bus object (MotorwayClass) travels from node to node carrying values under string keys. Every Motorway AxB node is an on/off ramp - inputs get filed onto the bus, outputs pull values back off. Every journey starts with MotorwayStart or a Motorway primitive like MotorwaySeed, which can kick off a bus by itself. And brace yourself: the README literally says "CURRENTLY IN ACTIVE DEVELOPMENT (BETA)! IF THINGS BREAK ITS BECAUSE I BROKE IT." It's a passion project, not a guarantee.
Reading the node
There's one required input, MOTORWAY ππ¨ - the bus, always wired from a Start node or an earlier ramp. Then three data inputs, ANY_(A), ANY_(B), ANY_(C), typed * so they accept any type ComfyUI throws at them. The key fields run from ANY_(A)_key to ANY_(H)_key - eight of them, one per slot, because the generator hands every input and every output a key.
Each letter's key does two jobs: it's where that letter's input gets stored, and it's also what that letter's output reads back. So on 3x8, slots AβC are write-through (input files under the key, output reads the same key back out), while DβH are pure exits - no input lane, just a key to pull a value out of the bus. The first output is always MOTORWAY ππ¨, carrying the bus onward.
Say you want every output to see the seed: type seed into ANY_(A)_key (feeding the seed in on ANY_(A)), then type seed into ANY_(D)_key, ANY_(E)_key, and so on. Each of those outputs hands back the same seed, and you haven't drawn a single wire between the seed source and those consumers.
Install
ComfyUI Manager: search "ComfyUI_agilly1989_motorway". Or:
cd ComfyUI/custom_nodes
git clone https://github.com/agilly1989/ComfyUI_agilly1989_motorway
Restart ComfyUI. That's it - no models to download, no pip dependencies. It's plain Python.
The traps
The README's signature error is 'MotorwayClass' object has no attribute 'hash_...' - you tried to pull a key nobody wrote yet. Keys are hashed internally (that's the hash_ prefix), so a typo in a key string silently points at a different (empty) slot. And remember the empty-key rule: wire an output, leave its key blank, and there's simply nothing in that slot. Fill the key for every output you actually use.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| MOTORWAY ππ¨ | MOTORWAY ππ¨ | β | |
| ANY_(A)opt | * | β | |
| ANY_(B)opt | * | β | |
| ANY_(C)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) | * | β |