Historical recipe — not current setup guidance. Measurements and implementation links below belong to their original workload and revision. Deployment labels and defaults may be obsolete. Use the reviewed performance recipes; browse historical evidence.

AVPlumber · Mixer optimization cookbook

Multiviewer: 192 sources, 12 at a time

Implementation links are pinned to develop at c20464a5 (2026-10-09); read against develop at 8fa15c92 on 2026-10-13 and still current. Measurements retain their original workload and scope. Watch the current 192-input L4 demo.

Current scope. Off-page subscriptions avoid additional AUX draw work and retained AUX frame references. Upstream sources remain active and continue decoding/uploading. Default playout latency is two canvas ticks up to 30 fps and three at 40 fps or above.

The Multiviewer aux shows every source in pages of 12 equal tiles, and only the 12 on screen send it frames. The current 192-input L4 show has 16 pages, including its four browser keys. The historical 100-source diagrams below illustrate the same subscription mechanism.

Status: Implemented
100 source subscriptions: 12 enabled ones feed one compositor and one encoder; 88 disabled ones return at once with no frame. 100 sources already decoded for the program ■ 12 on this page ■ 88 off-page subscription on enqueue the frame subscription off lock attempt + atomic check → return compositor 1 pass · 12 tiles NVENC encoder +8 % ENC · 48 MB Janus → web UI names drawn in HTML no AUX frame · no AUX draw no VRAM Program: untouched no PGM tap · the bus never delays the program
The bus subscribes to all 100 sources. A page turn opens the 12 subscriptions it shows and closes the rest. A closed subscription drops the frame at the producer, before any queue.
Portrait canvas to scale: 9 pages of 12 tiles of 536 by 300, against one rejected page of 100 tiles of about 150 by 84. Page 1 of 9 s1–s12 · 536×300 tiles s1s2 s3s4 s5s6 s7s8 s9s10 s11s12 Page 2 of 9 s13–s24 Page 9 of 9 s97–s100 s97s98 s99s100 › … › the operator turns the page: ‹ n/N ›, past the last back to the first Rejected: one page 100 tiles of ~150×84
The 1080×1920 portrait canvas, to scale. 100 sources make 9 pages of 2×6 tiles; the last page holds 4 (derived). A landscape canvas uses 4×3. The postage-stamp wall on the right fits all 100, but each tile is about 150×84: too small to judge a picture.

At a glance

In the web UI

The viewer header carries the page control ‹ n/N ›: previous, page number, next. [ and ] do the same. The source names are HTML over the video, placed from the tile geometry the mixer reports, so the encoder never draws text.

Where in the code

Docs: config.md → aux_buses (layouts, mixer.aux_page).

+8 % ENC and 48 MB are historical H.264 measurements. The diagrams use the historical 100-source example; the recorded L4 show has 192 sources, 16 pages and HEVC monitors. Implementation links are pinned to the reviewed source tree.