Configuration Overview

Shiloh Broadcaster has four configurable components. Two are configured via CLI flags only; one uses a JSON file (with legacy TOML auto-migration); one uses environment variables.

Component summary

Component Binary Config method
Broadcaster (sender) shiloh-broadcaster CLI flags
Relay (headphone listener) shiloh-relay CLI flags
Web relay (WebRTC/WHEP) shiloh-web-relay CLI flags
Mixer shiloh-mixer JSON file (legacy TOML migrated)
Mixer web UI mixer_web (Elixir) Environment variables

Mixer config format

shiloh-mixer uses a three-tier config resolution on startup:

  1. runtime-config.json (primary) – dynamic config persisted by the mixer web UI
  2. shiloh-mixer.toml (legacy) – auto-migrated to JSON on first run, then ignored
  3. Empty defaults – first-boot mode when neither file exists

TOML is read once for initial migration and never again. All web UI changes are persisted as JSON. The config describes channels, output buses, JACK autoconnect wiring, ingest allow-lists, local relay sinks, and MIDI control.

The mixer binary uses named CLI flags (all optional):

shiloh-mixer --state-dir ~/mixer-state --config ~/mixer/shiloh-mixer.toml
Flag Default Description
--state-dir ~/mixer-state Directory for runtime config and state files
--config ~/mixer/shiloh-mixer.toml Legacy TOML config (auto-migrated to JSON)
--no-config (flag) Start with empty config (first-boot mode)
--jack-name Override the JACK client name
--control-port Override the UDP control port (default 19997)
--control-bind Override the control bind address (default 127.0.0.1)
--broadcast-port Override the UDP broadcast port (default 5005)

The production TOML config lives at server/shiloh-mixer.toml in this repository and is deployed to the server by deploy.sh.

Default state-file paths (all overridable in the TOML):

File Default path
Peak meters /home/shiloh/mixer-state/meters.json
Gains / current scene /home/shiloh/mixer-state/gains.json
Named scenes /home/shiloh/mixer-state/scenes.json
Relay feed assignments /home/shiloh/mixer-state/relay-assignments.json
MIDI state /home/shiloh/mixer-state/midi-state.json

Default ports

Port Protocol Direction Used by
5005 UDP senders/relays → mixer shiloh-broadcaster ingest; shiloh-relay relay
19997 UDP mixer_web → mixer Control plane (fader, mute, scene ops)
19999 UDP MIDI sender → mixer shiloh-midi-sender raw MIDI datagrams
8889 TCP (HTTP) browser → mixer_web Mixer web UI
8890 TCP (HTTP) browser → shiloh-web-relay WHEP WebRTC endpoint

Environment variable overrides

shiloh-mixer, shiloh-broadcaster, shiloh-relay, and shiloh-web-relay have no environment variable overrides — all tuning is done via CLI flags or the JSON config file.

mixer_web (the Elixir Phoenix app) reads several environment variables at runtime. See Mixer Web UI Config.

Pages in this section