Broadwave

Docs

Install

You need an always-on computer that runs Docker, and a network TV tuner. The image runs on x86-64 and ARM64. It includes ffmpeg, so nothing else has to be installed for the picture.

The tag latest is the newest release. It moves when a version is published. A full version tag from the releases page stays on that build.

Docker on Linux

--network host lets the server hear your tuner, and lets phones and TVs find Broadwave.

docker run -d --name broadwave --network host --restart unless-stopped \
  -e TZ=America/Chicago \
  -v ~/broadwave:/config \
  -v ~/broadwave/recordings:/config/work/recordings \
  ghcr.io/wolfebase/broadwave:latest

Then open http://<your-server>:8477.

docker ps shows healthy once the server answers. The image runs that check every 30 seconds.

Docker Desktop on Mac or Windows

The container's host network is a virtual machine, so discovery cannot see the tuner. Publish the port and set HDHR_HOST.

docker run -d --name broadwave --restart unless-stopped \
  -e TZ=America/Chicago \
  -e HDHR_HOST=<tuner address> \
  -p 8477:8477 \
  -v ~/broadwave:/config \
  -v ~/broadwave/recordings:/config/work/recordings \
  ghcr.io/wolfebase/broadwave:latest

Then open http://localhost:8477.

Docker Compose

curl -fsSLO https://raw.githubusercontent.com/wolfebase/broadwave/main/deploy/docker/compose.yaml
docker compose pull && docker compose up -d

Set TZ in compose.yaml first. That file uses host networking, which is right on Linux. On Docker Desktop, use the published-port command above. Remove the devices lines when /dev/dri is missing. The file sets PUID to 99 and PGID to 100, which is right on Unraid. On another Linux host, set them to a user that exists there, or remove them to run as root.

Unraid

Add the template deploy/unraid/broadwave.xml. It uses host networking and port 8477.

The optional updater is deploy/unraid/broadwave-updater.xml. It checks at 03:30 and updates only the Broadwave container. It skips a night while a tuner is in use, a recording is running, or a recording starts within two hours. To update by hand, pull the new image and recreate the container with the same folders.

Other settings

SettingWhat it does
PUID, PGIDThe user and group that own the config folder and recordings. The Compose file sets 99 and 100. Leave them out of a plain docker run to run as root.
UMASKPermissions for new files. The Compose file and the Unraid template set 022.
BROADWAVE_RECORDINGSThe recordings folder, when it is not /config/work/recordings.
BROADWAVE_ENCODERgpu or software, to skip the automatic choice.
BROADWAVE_HOSTSPublic names the server answers to. See Security.
BROADWAVE_ALTERNATES0 carries only the chosen sound track. By default a full-size encode also carries the channel's other languages.

NVIDIA graphics need the NVIDIA Container Toolkit and --gpus all. That path has not been tested on real hardware yet.

An optional updater can move the image forward at night. The commands are in the README, under automatic updates. Without an updater, the web app says when a new release is out.

To build from source you need Go 1.26 or newer, Node 22 or newer, and ffmpeg. From a checkout, make run builds the web app and serves it on port 8477.