Broadwave

Docs

Sources

What Broadwave can take in, how it is found, and how it is played. Decision: 0009. Checked against vendor docs on 2026-09-23.

HDHomeRun on a new install is added when it is found, including a server that answers the same broadcast or an HDHomeRun SSDP reply. Everything else waits for one tap. A "Look harder" probe runs only when asked, and only on local subnets.

Your home is a separate read-only scan in setup and in Settings. It lists tuners already found, plus screens and servers on the local subnet: Chromecast (_googlecast._tcp), AirPlay (_airplay._tcp), Fire TV and Android TV (DIAL), smart TVs (UPnP MediaRenderer), Plex (GDM), Jellyfin and Emby (UDP 7359), and Channels DVR (_channels_dvr._tcp). iPhone, iPad, and Apple TV apps announce themselves on the event socket. The only actions are Add for a tuner that is not in the lineup yet, and Use as tuner for Plex, Jellyfin, Emby, and Channels, which copies this server's HDHomeRun address. How to add that address, or the playlist and the guide, is in tuner emulation. Nothing else is contacted or changed.

SourceFound byStreamGuideStatus
HDHomeRun (FLEX, CONNECT, PRIME)UDP 65001 and an HDHomeRun SSDP reply. hdhomerun.local only when both come back empty.Full mux on port 5004 (/tunerN/ch<freq>). An ATSC 3.0 channel, or a tune that cannot open that multiplex, uses /auto/v<guide number>. Docs also describe /auto/ch<rf>.Device XMLTV, then another guide for the gapsSupported. Auto-added.
HDHomeRun-compatible (tvheadend, Antennas, Threadfin, xTeVe, ErsatzTV, Dispatcharr)Address, or SSDP / the app's HDHomeRun announceHDHomeRun URLs, or the app's M3UThe app's XMLTV, or noneSupported. Adopted on an empty lineup when it answers as an HDHomeRun. Otherwise added from an address or Look harder.
M3U playlistPasted URL or text. Header url-tvg / x-tvg-urlMPEG-TS or HLS. Attributes tvg-id, tvg-chno, tvg-logo, group-titleThat playlist's XMLTV only. The guide key is tvg-id when the line has one, and the station id otherwise, then the channel number, the name, and the call signSupported. Stream limit per playlist.
Xtream CodesServer, username, password/live/user/pass/id.ts. Panel player_api.phpxmltv.phpSupported. Password stored apart from the URL and masked.
Channels DVR servermDNS _channels_dvr._tcp port 8089/devices/ANY/channels.m3u?format=ts&codec=copy/devices/ANY/guide/xmltvSupported. Uses that server's tuners. Host networking, or the DVR answers 403.
tvheadendmDNS _htsp._tcp, web 9981This server asks for /playlist/channels. Discovery also looks for /playlist/channels.m3u./xmltv/channelsSupported. Web calls need an account or they return 403.
Threadfin / xTeVePort 34400, UPnP/m3u/threadfin.m3u (xTeVe equivalent)/xmltv/threadfin.xmlSupported as HDHomeRun or M3U.
ErsatzTVPort 8409/iptv/channels.m3u or its HDHomeRun emulation/iptv/xmltv.xmlSupported as HDHomeRun or M3U.
DispatcharrPort 9191/output/m3u, /hdhr/lineup.json/output/epgSupported as HDHomeRun or M3U.
Media folderA path on the serverFiles already on diskSidecar metadataSupported. No tuner.
Tablo Gen 1–3Look harder notices a page on port 8885 that says tablo——Not a source. Nothing is added.
Tablo Gen 4—Needs Tablo's cloud and a signed call—Unsupported. No local API.
AirTV, Fire TV Recast—Sling or Amazon only—Unsupported. No open API.
TV Everywhere—Cable login inside a browser—Unsupported. No open API.
Free channels (FastChannels, Pluto for Channels, Samsung TV Plus for Channels)Ports 5523, 7777, and 8182 when the user asksThe generator's M3U. DRM streams are skipped.The generator's XMLTVSupported. One tap when a server is already running. Broadwave does not scrape those services itself.
Pluto and other free apps as themselves—Pluto's stitcher wants a session from boot.pluto.tv—Unsupported as a built-in source. A generated M3U can still be added as a playlist.

The public i.mjh.nz playlists were removed in August 2024. They are not a source.

Real containers

The import asks for these paths. A container was run for each app except xTeVe and Plex.

AppPlaylist path requestedGuide URL storedReal container
tvheadend/playlist/channels/xmltv/channels, with the login in the URLAnswered. Empty playlist and empty guide.
Threadfin/m3u/threadfin.m3u/xmltv/threadfin.xmlPlaylist answered and named that guide URL. The guide was absent while the server had no streams.
xTeVe/m3u/xteve.m3u/xmltv/xteve.xmlnot run
ErsatzTV/iptv/channels.m3u/iptv/xmltv.xmlPlaylist answered with one channel. Guide answered and was empty.
Dispatcharr/output/m3u/output/epgPlaylist and guide answered. Both were empty of channels.
Channels DVR/devices/ANY/channels.m3u?format=ts&codec=copy/devices/ANY/guide/xmltvPlaylist and guide answered, with channels and programmes. No stream was opened.
Plex Live TVnone from this client; Plex reads Broadwave—not run

Tvheadend also serves /playlist/channels.m3u. This client requests /playlist/channels.

The Broadwave image

Every source above is read by the same image, ghcr.io/wolfebase/broadwave (x86-64 and ARM64, jellyfin-ffmpeg 7 inside). Its settings are listed under "Image options" in the README: TZ, PUID/PGID, UMASK, HDHR_HOST, and BROADWAVE_ENCODER, plus --device /dev/dri for Intel or AMD graphics and --gpus all for NVIDIA. The browser tests in CI run against this image, started as root with PUID, PGID, and TZ like an install, and check that it reports healthy, runs as that user, owns its config folder, and falls back to the processor with no graphics device.