Getting Started

RelayTV turns a Linux box connected to your TV into a local playback target. This guide covers installing the server, then adding the Android companion app and the Home Assistant integration.

Requirements

Install

One command on the box connected to your TV:

mkdir -p ~/relaytv
cd ~/relaytv
curl -fsSL https://relaytv.app/install.sh | bash

relaytv.app/install.sh serves the current bootstrap installer from the main repository. It downloads the release compose files and pulls the published container image (ghcr.io/mcgeezy/relaytv:latest). Run install.sh --help for options like --dir, --branch, and --image.

Need runtime choices, hardware notes, or an existing source checkout? See the complete installation guide. Release notes for each version live on the releases page.

First run

Open the Web UI from any phone or desktop browser on your network:

http://YOUR_RELAYTV_HOST:8787/ui

From there you can paste a media URL to play or queue it, connect a Jellyfin or Emby server to browse your library, and optionally enable IPTV playlists (M3U URLs, pasted lists, or the built-in free-provider directory — disabled by default).

Updating

cd ~/relaytv
docker compose pull
docker compose up -d

Android companion app

RelayTV for Android (Android 8.0+) gives you a fast mobile remote and share targets for your TV:

Grab the latest APK from GitHub Releases, or build from source — instructions are in the repository README.

Home Assistant integration

RelayTV for Home Assistant (2026.7+) makes every RelayTV screen a real media_player device — playback controls, live artwork, and progress on dashboards, mobile, and voice.

Install via HACS:

Beyond the media player you get RelayTV-specific actions — smart play, interrupt-and-resume, overlays, snapshots, synchronized multi-screen start — plus an optional sidebar panel embedding the full Web UI, and a share automation that relays links from the Home Assistant mobile app straight to the TV.

HTTP API

Everything the apps do goes through the same local HTTP endpoint, so scripts and dashboards can too:

# Play a URL right now
curl -X POST http://YOUR_RELAYTV_HOST:8787/play_now \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com/video"}'

# Smart play: queues if something is already playing, otherwise plays
curl -X POST http://YOUR_RELAYTV_HOST:8787/smart \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com/video"}'

See the full API reference for status, queue management, overlays, and authentication with RELAYTV_API_TOKEN.

Full reference

Troubleshooting