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:
runtime-config.json(primary) – dynamic config persisted by the mixer web UIshiloh-mixer.toml(legacy) – auto-migrated to JSON on first run, then ignored- 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
- Broadcaster CLI Reference — flags for
shiloh-broadcaster - Relay CLI Reference — flags for
shiloh-relay - Web Relay CLI Reference — flags for
shiloh-web-relay - Mixer TOML Reference — every key in
shiloh-mixer.toml - Mixer Web UI Config — environment variables for
mixer_web