ComfyUI Node

Dynamic Bus

Pack a dozen values onto one wire and unpack them anywhere

By Tojioo·Created 11 months ago·Updated 7 months ago· 13
Dynamic Bus
  • bus
  • bus
  • output_1
  • output_2
  • output_3
  • output_4
  • output_5
  • output_6
  • output_7
  • output_8
  • output_9
  • output_10
  • output_11
  • output_12
  • output_13
  • output_14
  • output_15
  • output_16
  • output_17
  • output_18
  • output_19
  • output_20
  • output_21
  • output_22
  • output_23
  • output_24
  • output_25
  • output_26
  • output_27
  • output_28
  • output_29
  • output_30
  • output_31

The Dynamic Bus is the pack's answer to the messiest problem in big ComfyUI workflows: forty wires dragging a dozen shared values across a canvas. It bundles multiple typed values into a single bus that travels down one wire, and you can unpack any value off the other end. It's the "context bus" pattern - the same design idea as rgthree's Context nodes - with the twist that it's dynamic: slots appear and disappear as you connect, and the types mirror what you plug in.

You reach for it when a workflow has genuinely outgrown its canvas: model, clip, vae, both conditionings, a latent, a handful of numbers, all feeding twenty nodes. One bus wire instead of forty is the difference between a graph you can read and a wall of noodles.

How it works

The bus is a dictionary at heart. Each input slot packs its value in with a slot index and its type; the bus output carries that whole dict onward. On the receiving side, each output slot scans the bus for the first value matching its expected type and pulls it out - * entries match anything. Chained buses are supported: if you feed a bus into another Dynamic Bus, the values carry through, and the frontend keeps downstream slot types in sync via change callbacks. Since v1.7.0 the slot pruning is aggressive, so unconnected slots get tidied away instead of lingering as dead ports.

The node declares up to 32 slots (bus plus output_1 through output_31), and the frontend extension decides which ones you actually see based on connections. No frontend extension, no dynamic behavior - you'd just see a bloated 32-slot node.

Inputs and outputs

  • bus (*) in - a bus you received from another Dynamic Bus, for chaining.
  • Any number of input_N (*) sockets, each packing a typed value onto the bus.
  • bus (*) out - the packed bus, ready to travel one wire.
  • output_1output_31 (*) - typed unpack ports; each pulls the first matching value off the received bus.

Install

Manager → search "Tojioo Passthrough" → Install → restart, or:

cd ComfyUI/custom_nodes
git clone https://github.com/Tojioo/tojioo_passthrough.git

No models, no pip deps, prebuilt frontend bundle. Category: Tojioo Passthrough → Dynamic Nodes. It's a small single-maintainer pack (GPL-3.0); the author formally took the bus out of beta in v1.7.0 and has mentioned adding upstream/downstream behavior settings.

Common issues

The classic bus failure is the "stale context" bug, and it's inherent to the pattern: because everything rides one wire, it's easy to unpack a value off a bus assembled before a node that should have changed it. With forty explicit wires you'd see the missing connection; with a bus you can't, because the connection is there and the contents are wrong. Debug rule of thumb from the plumbing playbook: use a bus when legibility is the binding constraint, keep explicit wires in the region you're actively iterating on, and when a value comes out wrong, check the bus at its source, not at the unpack. If a slot you expect to be live looks dead, disconnect and reconnect it - slot state is managed by the frontend and a refresh usually sorts it.

CategoryTojioo Passthrough/Dynamic Nodes

Inputs (1)

NameTypeDefaultDescription
busopt*

Outputs (32)

NameTypeDescription
bus*
output_1*
output_2*
output_3*
output_4*
output_5*
output_6*
output_7*
output_8*
output_9*
output_10*
output_11*
output_12*
output_13*
output_14*
output_15*
output_16*
output_17*
output_18*
output_19*
output_20*
output_21*
output_22*
output_23*
output_24*
output_25*
output_26*
output_27*
output_28*
output_29*
output_30*
output_31*