Relay CLI Reference

shiloh-relay runs on a listener machine (headphone box, Pi, monitor speaker PC). It connects to shiloh-mixer as a relay client, receives the mix over UDP, and plays it through an ALSA output device.

Subcommands

Subcommand Purpose
connect Unicast relay: register with mixer and start audio playback
connect-multicast Multicast relay: join multicast group with per-relay delay control
list-devices List available audio output devices

connect — connect and play audio

shiloh-relay connect [OPTIONS]

Flags

Flag Short Type Default Required Description
--server host:port stg-srv001.bq.shilohbv.com:5005 No Mixer relay address
--name string No Human-readable label shown in server logs
--device string system default No Output device name (substring match)
--buffer-ms integer 10 No Jitter buffer target in milliseconds
--verbose / -v -v bool (flag) false No Print 1 Hz stats line

Field notes

--server

The mixer’s UDP relay address. Must match broadcast_port in the mixer’s TOML config (default 5005). The default value in the binary is stg-srv001.bq.shilohbv.com:5005 — override this when connecting to a different server.

--name

An optional label used in the mixer’s server logs and the mixer web UI session list. Does not need to match any server-side config. If omitted, defaults to the system hostname (from HOSTNAME, COMPUTERNAME, or /etc/hostname).

--device

Selects the ALSA output device. The value is a case-insensitive substring match against device names reported by the audio subsystem. Leave unset to use the system default device. Use list-devices to find the exact name if you need to be explicit.

--buffer-ms

Sets the jitter buffer target in milliseconds. Lower values reduce latency but increase the risk of buffer underruns (audible glitches) on slow or busy systems. The default of 10 ms works well on a wired LAN. Increase to 20–40 ms over Wi-Fi or WireGuard.

--verbose / -v

Prints a stats line at 1 Hz showing received packet counts, jitter, and buffer state. Use this to monitor relay health or diagnose underruns.

Examples

Minimal — connect with default server and device:

shiloh-relay connect

Named relay with explicit server:

shiloh-relay connect \
    --server stg-srv001.bq.shilohbv.com:5005 \
    --name "Stage Headphones"

Low-latency wired setup:

shiloh-relay connect \
    --server stg-srv001.bq.shilohbv.com:5005 \
    --name monitor-box \
    --device "Scarlett" \
    --buffer-ms 5 \
    --verbose

Wi-Fi or WireGuard relay — more buffer headroom:

shiloh-relay connect \
    --server stg-srv001.bq.shilohbv.com:5005 \
    --name remote-listener \
    --buffer-ms 40

connect-multicast — join multicast group

shiloh-relay connect-multicast [OPTIONS]

Receive audio via multicast (requires [multicast] enabled in the mixer config).
Per-relay delay is controlled from the mixer via the JSON control plane and
applied locally via shiloh_dsp::DelayLine. Bus assignment is switchable at
runtime without reconnecting.

Flags

Flag Short Type Default Required Description
--control-server host:port stg-srv001.bq.shilohbv.com:19997 No Mixer control-plane address
--group-addr IPv4 239.0.0.1 No Multicast group address
--group-port u16 5006 No Multicast audio port
--name string No Human-readable label (defaults to hostname)
--device string system default No Output device name (substring match)
--buffer-ms integer 10 No Jitter buffer target in milliseconds
--verbose / -v -v bool (flag) false No Print 1 Hz stats line

Examples

Minimal — default group and control server:

shiloh-relay connect-multicast

Named relay with explicit addresses:

shiloh-relay connect-multicast \
    --control-server stg-srv001:19997 \
    --group-addr 239.0.0.1 \
    --group-port 5006 \
    --name "Stage Headphones"

With explicit device and verbose stats:

shiloh-relay connect-multicast \
    --name monitor-box \
    --device "Scarlett" \
    --buffer-ms 5 \
    --verbose

list-devices — list output devices

shiloh-relay list-devices

No flags. Prints all available audio output devices visible to the relay. Use this to find the device name substring to pass to --device.


Feed assignment

Each relay client is assigned to exactly one mix feed: main, monitor, or cue. The assignment is stored on the server (in relay_assignments_file, keyed by the client’s name) and is switchable at runtime from the mixer web UI without reconnecting the relay.

A client with no persisted assignment defaults to the main feed.