Multi Reroute
The reroute node hiding inside a prompt-editor pack
- route 1
- route 2
- route 3
- route 4
- route 5
- route 6
- route 7
- route 8
- route 9
- route 10
- route 11
- route 12
- route 13
- route 14
- route 15
- route 16
- route 17
- route 18
- route 19
- route 20
- route 1
- route 2
- route 3
- route 4
- route 5
- route 6
- route 7
- route 8
- route 9
- route 10
- route 11
- route 12
- route 13
- route 14
- route 15
- route 16
- route 17
- route 18
- route 19
- route 20
Most of a big ComfyUI workflow isn't generation, it's plumbing - and a lot of that plumbing is one node whose entire job is to bend a wire so your graph doesn't look like a plate of noodles. ComfyUI ships exactly one of those: a Reroute, one in, one out. Multi Reroute is twenty of them stacked into a single node, which is a genuinely useful thing to own once you've placed your two-hundredth solo reroute.
The odd part is where you find it. This node ships in Comfyui_Prompt_Tag_Editor, an interactive prompt chip editor with a local translation model - and the pack's README doesn't mention Multi Reroute at all. It's filed under Prompt Tools, next to a text editor, so browse categories looking for a reroute and you'll never find it.
Why a stack instead of twenty reroutes
Every reroute in ComfyUI is the same node, so a "multi" version can only improve the accounting. Twenty reroute nodes are twenty things to select, move, align and not accidentally delete; one node with twenty rows is one thing to keep tidy. If you're the sort of person who spends ten minutes straightening a graph by hand, that's the whole pitch. It's the instinct that made rgthree's reroutes the most-installed plumbing in the ecosystem - until the Nodes 2.0 frontend rewrite broke them and people started ripping them out defensively. Which is a decent argument for a reroute built on core APIs only, like this one.
One thing it isn't: a splitter. Each row is one wire through. Sockets already fan out if you need a value in three places.
How it works
The backend declares twenty optional wildcard inputs named route 1 … route 20 and twenty wildcard outputs of the same names. The wildcard is "*" - the same loose type the built-in Reroute uses, so it takes an IMAGE, a MODEL or a LATENT, and ComfyUI can't type-check anything you do with it.
Execution is a straight pass-through: execute returns row i's input as row i's output, and an unconnected row yields None, which downstream optional inputs read as "not connected."
The visible row count isn't the schema - the backend always declares all twenty. A frontend script trims the node to two rows when you drop it in and adds a routes combo widget underneath (values 1–20). Rows are only ever added or removed at the end of the slot lists, so existing links keep their slot indices and nothing shifts under you when you lower the count.
Two behaviours worth knowing. Rows rename themselves to the connected type: wire an IMAGE in and both ends read IMAGE, the next one IMAGE_1, while unconnected rows stay route 3. And the script carries load-repair code - it stashes each row's link ids in the node's properties and re-fixes placement on every redraw, because older saves could come back with links shifted a row or two.
The inputs and outputs that matter
route 1…route 20- optional wildcard inputs. You'll use the first three or four and forget the rest exist.routes- the combo widget that decides how many rows you see. Default is 2.route 1…route 20- the matching wildcard outputs. Row 5's output is row 5's input, end of story.
Installing it
There's nothing special here, because you're installing the prompt editor and getting this as a bonus:
cd ComfyUI/custom_nodes
git clone https://github.com/kkmlimingfeng/Comfyui_Prompt_Tag_Editor
Or in ComfyUI Manager, search Prompt Tag Editor and install. Restart ComfyUI.
Two things that trip people up:
The pack requires a recent ComfyUI. It's written against the V3 node API (from comfy_api.latest import io, io.ComfyNode, an async comfy_entrypoint) and ships no NODE_CLASS_MAPPINGS at all. On an older install the pack registers zero nodes - not just this one.
The 1.1 GB translation model is not your problem. Hy-MT2-1.8B-Q4_K_M.gguf only downloads when you press translate in the prompt editor, and requirements.txt installs nothing - it's a wall of comments about building llama-cpp-python. Multi Reroute needs none of it.
Where people get burned
Rows vanish after saving. The routes widget is the authority, not your layout: an unconnected row beyond the widget's count gets dropped on load, and rows are never dropped if they're wired. Want a spare row waiting for later? Raise the widget.
Links land on the wrong row. The repair code handles the known shift cases, but if you're loading a workflow saved by an older version, glance at your rows before you hit queue.
You're on the Nodes 2.0 frontend. The script works around the Vue renderer by discarding the schema-baked slots and re-adding them dynamically, because Vue ignores runtime name changes. That's a hack, and it's the piece most likely to wobble when the frontend moves. If rows look wrong, switch Nodes 2.0 off and reload - the standing workaround for this whole class of node.
The pack has almost no community footprint yet - a fresh repo, one author, and a reroute node the README forgot to mention. But the mechanism is about as simple as ComfyUI plumbing gets. Judged on what it does, it's fine.
Inputs (20)
| Name | Type | Default | Description |
|---|---|---|---|
| route 1opt | * | — | |
| route 2opt | * | — | |
| route 3opt | * | — | |
| route 4opt | * | — | |
| route 5opt | * | — | |
| route 6opt | * | — | |
| route 7opt | * | — | |
| route 8opt | * | — | |
| route 9opt | * | — | |
| route 10opt | * | — | |
| route 11opt | * | — | |
| route 12opt | * | — | |
| route 13opt | * | — | |
| route 14opt | * | — | |
| route 15opt | * | — | |
| route 16opt | * | — | |
| route 17opt | * | — | |
| route 18opt | * | — | |
| route 19opt | * | — | |
| route 20opt | * | — |
Outputs (20)
| Name | Type | Description |
|---|---|---|
| route 1 | * | — |
| route 2 | * | — |
| route 3 | * | — |
| route 4 | * | — |
| route 5 | * | — |
| route 6 | * | — |
| route 7 | * | — |
| route 8 | * | — |
| route 9 | * | — |
| route 10 | * | — |
| route 11 | * | — |
| route 12 | * | — |
| route 13 | * | — |
| route 14 | * | — |
| route 15 | * | — |
| route 16 | * | — |
| route 17 | * | — |
| route 18 | * | — |
| route 19 | * | — |
| route 20 | * | — |