X32 Web Control
A browser-based remote control for Behringer X32 audio mixers — real-time faders, metering, and mute control over WebSocket using a custom OSC implementation. Includes a bulk mute tool for managing audio across 100+ mixers simultaneously.
Apr 2025What It Is
A web-based remote control for Behringer X32 audio mixers. The mixer view covers 32 input channels, 16 buses, 8 aux inputs, 6 matrices, 8 DCAs, and main — with real-time faders, meters, mute, pan, channel names, and colors. The channel detail view (gate, dynamics, EQ, bus sends) is partially built and still in development.
Built alongside the ATEM control system as part of AV Site, using the same architectural patterns — but it works as a standalone application with any X32 on the network.
Why I Built It
The studios use X32 Rack mixers that sit on a separate VLAN from the production workstations. Getting X32-Edit connected meant dealing with network routing, installing software on each machine, and only one person could control a mixer at a time. With the ATEM control system already proven, building the same thing for audio was the logical next step — same browser, same workflow.
How It Works
The X32 speaks OSC (Open Sound Control) over UDP on port 10023. I wrote a custom OSC encoder/decoder in Python from scratch — no external library — handling the X32’s specific requirements: keepalive messages (/xremote every 9 seconds), meter subscriptions that need periodic renewal, and the non-linear fader taper where 0.0–1.0 maps to the full dB range along a curve rather than a straight line.
The architecture mirrors the ATEM system: a connection manager with reference counting so multiple users share one UDP connection, a Django Channels WebSocket consumer for real-time browser communication, and Alpine.js on the frontend for reactive state. Moving a fader in the browser sends a WebSocket message to Django, which encodes it as OSC and fires it at the mixer. Meter data and state changes stream back continuously.
Quick Mute
A separate tool built for facility-wide audio management. The Quick Mute page connects to potentially 100+ X32 mixers simultaneously, parses channel names to group them by studio and table, and provides bulk mute/unmute controls at the per-studio and per-table level. A status modal shows building-wide mixer statistics. This is built for situations where you need to manage audio across an entire facility at once — not just one mixer.
Tech Stack
- Backend: Django, Django Channels (ASGI), WebSocket
- Audio Protocol: Custom OSC encoder/decoder over UDP (port 10023, no external library)
- Frontend: Alpine.js, Tailwind CSS, DaisyUI
- Deployment: Docker (shared container with AV Site platform)
Gallery
Screenshots and screen recordings coming soon.
Related Journal Entries
Coming soon — building a custom OSC implementation, fader taper mapping, metering subscriptions, bulk mute architecture.