Broadcaster CLI Reference

shiloh-broadcaster runs on a sender machine (studio laptop, guest PC, etc.). It creates a PipeWire null-sink, captures it via JACK, and streams PCM audio to shiloh-mixer over UDP.

Subcommands

Subcommand Purpose
connect Stream audio to the mixer
list-sinks List PipeWire sinks on this host (diagnostic)

connect — stream audio to the mixer

shiloh-broadcaster connect <server> [OPTIONS]

Arguments and flags

Flag Short Type Default Required Description
<server> host:port Yes Mixer address, e.g. stg-srv001.bq.shilohbv.com:5005
--channels integer Yes Number of mono channels to broadcast
--name string hostname No Sender name; must match a [[ingest.sender]] entry on the mixer
--sink-name string sender name No PipeWire/PulseAudio display name for the null-sink
--no-sink bool (flag) false No Skip creating the null-sink (use when managed externally)
--verbose / -v -v bool (flag) false No Log per-second packet and drop counters

Field notes

<server> (positional, required)

The mixer’s UDP ingest address. This must be reachable from the sender machine — over a WireGuard tunnel, LAN, or public IP depending on your setup.

--channels (required)

The number of mono channels this sender pushes. A stereo source counts as 2. The value must exactly match the channels field in the corresponding [[ingest.sender]] block on the server, or the connection will be rejected.

--name

Identifies this sender to the mixer. The mixer’s ingest allow-list matches registrations by this name. If omitted, the system hostname is used. Must be unique across all active senders.

--sink-name

Controls what name appears in PipeWire/PulseAudio clients (e.g. pavucontrol, qpwgraph). Defaults to the sender name. Useful when running multiple broadcasters on the same machine.

--no-sink

Skips creating the PipeWire null-sink. Use this when the null-sink is already created by a persistent PipeWire configuration or when you want to feed audio from an existing JACK port rather than a PipeWire sink.

--verbose / -v

Prints a stats line once per second showing packets sent and packets dropped. Useful for diagnosing network issues.

Examples

Typical studio laptop setup — stereo sender named “studio”:

shiloh-broadcaster connect stg-srv001.bq.shilohbv.com:5005 \
    --channels 2 \
    --name studio

Guest machine with a custom sink name:

shiloh-broadcaster connect stg-srv001.bq.shilohbv.com:5005 \
    --channels 2 \
    --name guest \
    --sink-name "Guest Mic Input"

Sending without creating a null-sink (sink pre-configured externally):

shiloh-broadcaster connect stg-srv001.bq.shilohbv.com:5005 \
    --channels 2 \
    --name laptop \
    --no-sink \
    --verbose

list-sinks — list PipeWire sinks

shiloh-broadcaster list-sinks

No flags. Prints the PipeWire sinks visible on the local machine. Use this to confirm a null-sink was created or to find the name of an existing sink before using --no-sink.


Matching sender name to server config

The --name value must match a name field in [[ingest.sender]] on the mixer, and the --channels count must match the channels field. A mismatch causes the mixer to reject the registration with REJECT_UNKNOWN_SENDER.

Server-side config (excerpt from shiloh-mixer.toml):

[ingest]
slot_count = 4

[[ingest.sender]]
name       = "studio"
channels   = 2
start_slot = 0

[[ingest.sender]]
name       = "laptop"
channels   = 2
start_slot = 2

Corresponding broadcaster invocations:

# On the studio machine:
shiloh-broadcaster connect stg-srv001.bq.shilohbv.com:5005 --channels 2 --name studio

# On the laptop:
shiloh-broadcaster connect stg-srv001.bq.shilohbv.com:5005 --channels 2 --name laptop