Motorway 4x4
The balanced ramp, and the easiest one to learn on
- MOTORWAY ππ¨
- ANY_(A)
- ANY_(B)
- ANY_(C)
- ANY_(D)
- MOTORWAY ππ¨
- ANY (A)
- ANY (B)
- ANY (C)
- ANY (D)
Motorway 4x4 is the symmetric ramp in the agilly1989 Motorway pack: four lanes in, four lanes out. It's the one I'd tell a first-time user to start with, because the layout maps one-to-one - four inputs, four key fields, four outputs - and that makes the whole "how does this bus thing work" question click fastest. Every letter has its own lane, and you can see exactly where each value is going.
The pack is a pipe implementation: a MotorwayClass bus carries values under string keys from node to node, and each Motorway AxB is an on/off ramp that files inputs onto the bus and pulls outputs off it. The journey starts with MotorwayStart (or a Motorway primitive like MotorwayStr, which can act as a start) and the bus always continues out of the first output socket. The README is candid about its state: "CURRENTLY IN ACTIVE DEVELOPMENT (BETA)! IF THINGS BREAK ITS BECAUSE I BROKE IT." It's a hobby project with real momentum, not a polished release.
The layout
Required input MOTORWAY ππ¨, then four data inputs ANY_(A) through ANY_(D) (typed *, so they accept a MODEL, CONDITIONING, LATENT, INT - anything), then key fields ANY_(A)_key through ANY_(D)_key, and outputs ANY (A) through ANY (D) with MOTORWAY ππ¨ always first.
Here's the mechanism that matters, and on a 4x4 it's easy to see: each letter's key is one shared slot that both stores that letter's input and feeds that letter's output. Connect a checkpoint to ANY_(A), type model into ANY_(A)_key, and output ANY (A) immediately hands the model back out - a write-through lane. Type seed into ANY_(B)_key and output ANY (B) emits whatever upstream filed under seed, even if you leave input B disconnected. Inputs and outputs are both optional, so you can use a 4x4 as pure store, pure exit, or any mix.
The clone behavior is worth knowing: the bus is cloned at each node, so forking one bus into two ramps gives each branch its own snapshot. Values you write in branch one never leak into branch two. That's a genuinely nice property for parallel workflows.
Install
ComfyUI Manager search "ComfyUI_agilly1989_motorway", or:
cd ComfyUI/custom_nodes
git clone https://github.com/agilly1989/ComfyUI_agilly1989_motorway
Restart ComfyUI. No models to download, no pip dependencies - pure Python.
Where people trip up
The README's own error: 'MotorwayClass' object has no attribute 'hash_...' - you typed a key on an output that nothing ever wrote. Keys are sha256-hashed internally (that's the hash_ prefix), so a typo silently points at an empty slot instead of failing at the spelling. And remember: blank key means blank output. Fill the key on any lane you actually wire.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| MOTORWAY ππ¨ | MOTORWAY ππ¨ | β | |
| ANY_(A)opt | * | β | |
| ANY_(B)opt | * | β | |
| ANY_(C)opt | * | β | |
| ANY_(D)opt | * | β | |
| ANY_(A)_keyopt | STRING | β | |
| ANY_(B)_keyopt | STRING | β | |
| ANY_(C)_keyopt | STRING | β | |
| ANY_(D)_keyopt | STRING | β |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| MOTORWAY ππ¨ | MOTORWAY ππ¨ | β |
| ANY (A) | * | β |
| ANY (B) | * | β |
| ANY (C) | * | β |
| ANY (D) | * | β |