Mixer Web UI
mixer_web is a Phoenix LiveView application served on port 8889. It polls the mixer’s
JSON sidecar files for meter and session data, and sends UDP control commands to the
mixer’s control plane on :19997 for any state-changing operation.
Fader Strips
Each configured channel appears as a vertical fader strip. From top to bottom:
- Channel label — human-readable name from the
labelfield in config (e.g. “Studio”). - Stereo VU meters — L/R peak levels, updated at ~10 Hz from
meters.json.
Mono channels show equal L/R peaks. The scale is linear 0–1 (full scale). - Gain fader — linear gain in the range [0, 2], displayed as dB. Unity = 0 dB.
Drag up/down to adjust. The fader sends aset_gaincommand to the mixer, which
ramps to the new value overramp_ms(default 150 ms) for click-free transitions. - Mute button — mutes the channel on the main bus only. The monitor and cue
buses are mute-exempt; they always pass signal regardless of mute state.
NOTE: Mute does not affect relay fan-out for the monitor or cue feeds. A channel muted
on main still appears in monitor and cue relay outputs. This is intentional for
headphone cue and monitor mixes.
Output Bus Controls
Below the channel strips, three output bus sections correspond to the main, monitor, and
cue buses:
| Section | Relay feed | Default JACK ports |
|---|---|---|
| Main | main_relay | out_1, out_2 |
| Monitor | monitor_relay | monitor_out_1, monitor_out_2 |
| Cue | cue_relay | cue_out_1, cue_out_2 |
Each bus section has:
- Bus gain fader — scales the relay send level for that feed (does not affect the
JACK hardware output ports). - Relay on/off toggle — enables or disables UDP fan-out for this feed. Turning off
a relay bus silences all clients subscribed to it without disconnecting them.
Session Panel
The sessions panel lists all active connections to the mixer. Entries are grouped by type:
Relay clients
Each shiloh-relay or shiloh-web-relay session shows:
- Name — the
--namethe client registered with. - Feed — which bus feed the client is subscribed to (main / monitor / cue).
Click the feed selector to reassign the client to a different feed. The change takes
effect immediately without disconnecting the client, and is persisted to
relay-assignments.jsonby client name. - Address — source IP:port of the UDP connection.
Broadcaster senders
Each active shiloh-broadcaster ingest session shows:
- Name — the
--namethe broadcaster registered with. - Slot range — which ingest slots this sender occupies (e.g. slots 0–1 for stereo).
- Packet rate — approximate incoming packets per second (should be ~375 for stereo
at 48 kHz / 128 frames). - Connected at — time since the session was established.
Scene Management
A scene is a named snapshot of all channel fader positions and mute states. Scenes do
not include bus gain or relay assignment state.
Saving a scene
- Set all faders and mutes to the desired positions.
- In the scene panel, type a name in the text field.
- Click Save.
The scene is written to ~/mixer-state/scenes.json immediately.
Recalling a scene
Click a scene name in the saved scene list. The mixer ramps all faders from their current
positions to the stored positions over ramp_ms milliseconds (default 150 ms). During
the ramp, faders move smoothly with no audible click.
Deleting a scene
Click the delete icon next to the scene name. This removes it from scenes.json.
NOTE: Recalling a scene does not change mute states that differ from the scene
snapshot — check the MIDI panel or individual strips if mutes aren’t behaving as
expected.
MIDI Panel
The MIDI panel at the bottom of the page shows the live state of the MIDI modal
controller:
- MODE — current modal state:
IDLE,CHANNEL_SELECT,CHANNEL_CONTROL,
TRANSPORT, orNAVIGATION. - CH — visible only in
CHANNEL_CONTROL; shows which channel is being edited. - Recent keys — the last ~8 note-ons received, with the action each triggered in the
current mode. A—(em-dash) means the key arrived but wasn’t mapped in that mode. - Key reference — active bindings for the current mode.
If the panel shows “offline” or no key activity, check that shiloh-midi-sender is
running on the keyboard machine and that UDP is reaching :19999 on the server.
Ardour Transport Card
If shiloh-mixer is configured with an ardour_osc target and the WebSocket feedback
connection is active, a transport card appears showing:
- Play / Stop / Record buttons (send OSC to Ardour
:3819) - Marker navigation (Goto Start, Prev Marker, Next Marker, Goto End, Add Marker)
These send the same OSC commands as the physical MIDI keyboard Transport mode. Moving a
fader in Ardour updates the corresponding DAW-bus strip in mixer_web via the WebSocket
surface feedback connection.
Diagnostics Page
http://stg-srv001:8889/diag exposes a diagnostics view with:
- Ardour Web Surface card — WebSocket connection state, strip count, channel→strip
mapping, live event feed. - Ingest drops — per-slot counters for ring-full events (indicates the RT thread
isn’t draining fast enough). - MIDI state — same as the main page MIDI panel, with additional detail.