Tools for Behringer X32 / Midas M32 consoles — emulator, remote GUI, show recording.
One tabula serves every device of the band at once. Each device gets a
role:
| Role | Sees | Changes |
|---|---|---|
| engineer | everything | everything (once writes are armed) |
| musician | their in-ear mix | the sends to their bus from every channel, aux input and FX return, and their bus volume and mute |
| viewer | everything | nothing |
| none | a “no access” page (or the sign-in page) | nothing |
The machine running tabula is the engineer, unless an
engineer password is set: then every browser signs in
with it, that machine included. Other devices get their role from an
access link the engineer makes for them; without one they get the guest
role, none by default (-guest viewer lets anyone on the network watch,
-guest engineer gives everyone full control as before).
Start tabula so the whole network can reach it, connected to the
console:
tabula -http :8033 -console 192.168.1.62

Links are made of the address of this machine and a secret: when the laptop has several addresses (Wi-Fi and Ethernet), pick the one the phones use in Links use.

The page is a small desk filling the phone’s screen:
Musicians change their mix even when writes are not armed on the engineer’s side, as long as Musicians can change their mix is on (the default) on the Access page. Turning it off makes every musician page read-only at once. The engineer can see any mix as its musician does on the In-ears page.
A musician cannot change anything else: not the send taps (pre/post), not
another musician’s mix, not the channels themselves. tabula checks every
write, so this holds for anything talking to its API, not only its pages.
access.json (or the file given with -access),
readable by its owner only since it holds the secrets.web Theo) in
recorded sessions, so a replay shows who moved what.Without a password, whoever uses the machine running tabula has full
control. Set one in Engineer password on the Access page (8 characters
or more) and every browser has to sign in with it to be the engineer, the
machine itself included; a browser stays signed in (a cookie) until it
signs out.

A browser without access shows the sign-in page: the engineer types the password there. Musicians and viewers still use their links, which work as before (and so do engineer links).

access.json,
never in clear.tabula and run tabula -reset-password (with the same
-access file if you use one): the password and the signed-in devices are
removed, the links are kept, and the machine is the engineer again.-guest engineer (everyone is the engineer) do not go
together: tabula refuses to start with both, and the Access page does
not offer the password then.tabula uses plain HTTP on the local network. Anyone holding a link, or
able to read the network traffic, has that access (the password included,
when signing in from another device); delete a link to revoke it. Without
an engineer password, every request from the machine itself is the
engineer’s: anyone at the laptop has full control, and behind a reverse
proxy on that machine (to add HTTPS, say) every request comes from the
machine itself, so every device would be the engineer: set a password
then. In any case, do not expose tabula beyond the band’s network (no port
forwarding). An engineer link or a session from another device controls
the console and the recordings but cannot make tabula run a program of
its choice: a custom audio recorder command is only accepted from the
engineer on the machine itself (signed in there when a password is set;
behind a reverse proxy, from any engineer).
Other sites. A web page of any site open in a browser of the laptop
sends its requests from the laptop too. tabula refuses what such a page
could do with it:
Sec-Fetch-Site, Origin). Requests without
those headers, from curl or a script, are not browser pages and pass.tabula answers only to the names it knows: IP addresses, localhost,
this machine’s name (and name.local). A site could otherwise make its own
name lead to the laptop (DNS rebinding) and read the answers as if it were
tabula. To open it by another name (a DNS name on the band’s network, a
reverse proxy’s), start it with -allowed-hosts tabula.lan; any other
name gets a page saying so.See the HTTP API for the endpoints.