Self-hosted home media server.
Request from your phone → auto-download → auto-organize → watch on the TV.
streameron doesn't reinvent anything. It is one docker-compose.yml that wires a set of
excellent open-source projects into a single flow, plus the notes on how and why.
flowchart LR
You(["Phone / browser"]) -->|request| Seerr
Seerr --> Sonarr
Seerr --> Radarr
Sonarr -->|search| Prowlarr
Radarr -->|search| Prowlarr
Prowlarr -.-> FlareSolverr
Sonarr -->|download| qBittorrent
Radarr -->|download| qBittorrent
qBittorrent --> Library[("Media library")]
Bazarr -->|subtitles| Library
Recyclarr -.->|quality profiles| Sonarr
Recyclarr -.->|quality profiles| Radarr
Library --> Jellyfin
Jellyfin -->|stream| Screen(["TV / phone / tablet"])
Tailscale -.->|remote HTTPS| Jellyfin
- You search and request a show or movie in Seerr.
- Sonarr (TV) or Radarr (movies) finds a release through Prowlarr and hands it to qBittorrent.
- The finished download is imported into the library, renamed, and Bazarr fetches subtitles.
- It shows up in Jellyfin, ready to play at home or remotely over Tailscale.

Requesting from the phone with Seerr
| Tool | Role | Port |
|---|---|---|
| Jellyfin | Media server: streams the library to TVs, phones and tablets | 8096 |
| Seerr | Request UI: search and request; feeds Sonarr/Radarr | 5055 |
| Sonarr | Tracks TV shows and grabs missing episodes | 8989 |
| Radarr | Same as Sonarr, for movies | 7878 |
| Bazarr | Subtitles (Hebrew + English) for everything Sonarr/Radarr import | 6767 |
| Prowlarr | One place to manage indexers for Sonarr/Radarr | 9696 |
| qBittorrent | Download client | 8080 |
| FlareSolverr | Helper Prowlarr calls for indexers behind Cloudflare | 8191 (API only) |
| Recyclarr | Syncs Sonarr/Radarr quality profiles with TRaSH Guides, daily | no UI |
| Tailscale | Remote access to Jellyfin, no router ports opened | no UI |
Open any of them at http://<host>:<port>: localhost on the host itself, the host's LAN IP
from other devices at home.
Requires Docker with Docker Compose.
git clone https://github.com/ron45700/streameron.git
cd streameron
cp .env.example .env # then edit it, see Configuration below
docker compose up -dUnder MEDIA_ROOT, create media/shows, media/movies and torrents before the first start. On
Linux create them yourself, as the user the containers run as (PUID): folders that Docker creates
for a missing path belong to root, and the apps then cannot write to them.
The containers come up empty. The one-time wiring between the apps (download client, indexers, root folders, Seerr and Bazarr connections) is described step by step in the build log.
Everything machine-specific lives in .env (git-ignored). .env.example documents each value.
| Variable | What it is |
|---|---|
PUID, PGID, TZ |
User/group the containers run as, and the timezone |
CONFIG_ROOT |
Each app's settings and database. Small, many writes: put it on a fast drive |
MEDIA_ROOT |
The library and downloads (media/ and torrents/ side by side): put it on the big drive |
SONARR_API_KEY, RADARR_API_KEY |
Used by Recyclarr |
TS_AUTHKEY |
Tailscale auth key, only needed for the first login |
OPENVPN_USER, OPENVPN_PASSWORD |
Only if the VPN is enabled |
Container paths (/config, /media, /downloads) are the same in every service, so the host
paths can change without touching any app setting.
No ports are opened on the router. A dedicated Tailscale machine named jellyfin serves only
Jellyfin over HTTPS, and that single machine is what gets shared with friends. Full access to
every service stays with the host's own Tailscale client.
Setup and details: docs/remote-access.md.
| Doc | What's in it |
|---|---|
| Build log | How the stack was built stage by stage, with the first-run wiring of each app |
| Remote access | Tailscale setup, sharing with friends, checking stream quality |
| Moving hosts | Moving the whole stack to another machine without losing settings |
| VPN | Enabling the pre-wired Gluetun VPN for qBittorrent |
- Jellyfin, with Direct Play verified on the target TVs
- qBittorrent + Prowlarr + FlareSolverr
- Sonarr + Radarr
- Seerr, Bazarr, Recyclarr
- Separate config and media roots
- Remote access with Tailscale
- Maintainerr: rule-based cleanup of watched or stale media, with a grace period before deletion
- VPN for qBittorrent (Gluetun, pre-wired and disabled)
streameron is only the glue. All the real work is done by these projects:
| Project | Used for |
|---|---|
| Jellyfin | Media server |
| Seerr | Requests |
| Sonarr | TV automation |
| Radarr | Movie automation |
| Prowlarr | Indexer management |
| Bazarr | Subtitles |
| qBittorrent | Downloads |
| FlareSolverr | Cloudflare challenge helper |
| Recyclarr | Quality profile sync |
| Tailscale | Remote access |
| Gluetun | VPN client (optional) |
Also thanks to LinuxServer.io for most of the container images, and to TRaSH Guides for the quality profiles.
Each project is the property of its own authors and is distributed under its own license.
This is a personal project for managing media you have the right to hold. What you download with it is your own responsibility.
