← Music

Music ·

A web controller for the WING console

A browser controller for the Behringer WING we rehearse on, built mostly with Cursor. The long-term plan is an LLM layer for casual users the desk overwhelms.

I sing in Red House Band, and we rehearse on a Behringer WING. Casual users in the studio get overwhelmed by the mixer itself and by Behringer's apps. I also wanted to learn how the console talks over OSC, the protocol it uses for remote control. So I built my own controller: a web app that runs in a browser and talks to the console in real time.

Cursor wrote most of the code. I directed it and tested everything against the console.

A browser can't reach the console on its own

The WING speaks OSC over UDP, and browsers can't open UDP sockets. The answer is a small Node relay on the same network. It sends commands to the console, listens for what comes back, and passes live state to the browser over a WebSocket, at most once every 33 ms.

The console only pushes changes to a client that has subscribed, and a subscription expires after 10 seconds. The relay renews it every 8.

What it does

You connect by typing the console's IP address or by searching the network for it. The mixer view has faders, mute, solo, and pan for channels, aux, bus, and main. The routing view draws signal flow as a graph, live from the console.

Everything on screen comes from the console. Parameter values are never mocked.

At rehearsal I use it for my own vocal and monitor levels, for the whole band's mix, and for checking routing when a channel isn't coming through.

When the documentation and the console disagree

The WING's OSC documentation says commands go to port 2223. Some setups use 10024 instead, so the app defaults to 10024 and suggests 2223 when a connection fails.

For anything the relay doesn't recognize, it logs the OSC address. Change a setting on the console, watch the log, and the real address shows up, ready to add.

Where it stands

The routing view is view-only for now: channel-to-bus links show real send levels when the console reports them, and a default pattern when it doesn't.

The long-term plan is to use an LLM to simplify it for the casual users in the studio who get overwhelmed by the desk.

As of March 2025 it runs on Next.js, TypeScript, Tailwind CSS, shadcn/ui, and React Flow for the routing graph.