The structural signal processing is one C pw_filter node per stagebox group: per-strip gain, fader, pan, polarity, summing, the EQ bank, the gate and compressor, native delay and reverb, and the analyser tap. One node, one real-time callback, one cache-friendly pass over the whole mix.
It replaced roughly forty pw-loopback subprocesses, for two reasons that are about cardinality rather than about PipeWire. The daemon's file-descriptor ceiling was reached around strip eleven and the graph froze. And when a real interface suspended, PipeWire fell back to its dummy driver: the whole graph sat idle, zero busy, no audio.
The single-node shape also wins on merit. One real-time callback has lower jitter than N separately scheduled nodes, and one node with output links binds cleanly to the sink's driver group by construction. Nodes are created when a stagebox is plugged in and destroyed when it goes; strips are added to a live node without interrupting it; and every node shares one client, so the file-descriptor cost of the entire console is a single connection.
Asked for a console wider than it can carry, it refuses rather than truncating. Truncating produced a mixer that reported success and then simply had no strips past the ceiling — channels that existed in the model, drew faders on the surface, and carried no audio.
The kernel
The arithmetic lives in a single header of small static inline functions with no PipeWire, no allocation, and no libc beyond <math.h>. That is deliberate. A pan law is the kind of thing that has to be provably correct, so it is kept testable in isolation from the filter's life cycle.
The real-time contract
The callback reads per-strip parameters word-atomically, takes the strip count with an acquire, allocates nothing, logs nothing, and ramps every gain change so a moved control cannot click.
On top of it
LV2 plugin inserts are hosted by mod-host and threaded into that node's boundary, per strip and per output. Two layers of signal processing, and they are not interchangeable: one is the desk, the other is what you rack into it.