Self-Hosted Media Stack, Part 5: Seerr, the Request Front-End Your Family Actually Uses
Part 5 of Media Stack from Scratch.
The stack so far works, but it has an admin interface, not a user interface. Sonarr assumes you know what a quality profile is. Your household does not care. Seerr is the missing front door: a search page that looks like a streaming service, where anyone you allow can hit Request and the right *arr does the rest — including showing "available" once it's actually in Plex.
Summary
- Seerr = the actively-maintained continuation of Overseerr, and a drop-in for it.
- Users sign in with their Plex account — no separate accounts to manage, and your existing Plex shares define who gets in.
- Requests route to Sonarr/Radarr with a default quality profile, so requesters never see a settings page.
- Approval rules mean the kids' requests can need your click while yours auto-approve.
The compose
services:
seerr:
image: ghcr.io/seerr-team/seerr:latest
container_name: seerr
restart: unless-stopped
environment:
- PUID=1001
- PGID=100
- TZ=Europe/Amsterdam
volumes:
- /path/to/appdata/seerr:/app/config
ports:
- "5055:5055"
healthcheck:
test: ["CMD-SHELL", "curl -fsS http://127.0.0.1:5055/api/v1/status || wget -qO- http://127.0.0.1:5055/api/v1/status >/dev/null"]
interval: 30s
timeout: 10s
retries: 3
start_period: 30s
Like Prowlarr, no /Media mount — Seerr never touches files. It talks to Plex to see
what exists and to the *arrs to make more exist.
One note if your containers run on more than one host (mine do — Seerr sits on a
different box than Plex and the *arrs): the container names stop resolving across
hosts, so point Seerr at reachable addresses instead — IPs, or DNS names your network
resolves. On one host, http://sonarr:8989 style names keep working and you can
ignore this.
Setup
- Sign in with Plex — the first login becomes admin. Seerr pulls your libraries and starts a scan; "available" badges come from this.
- Connect Radarr — Settings → Services → Radarr: hostname, port
7878, API key, then the three defaults every request inherits: quality profile, root folder (/Media/Movies), minimum availability (Releasedunless you like waiting on cam rips). - Connect Sonarr — same shape: port
8989, profile, root/Media/Series, and whether requests mean "whole series" or "season" — season is the sane default, requesters can widen per request. - Users & approval — Settings → Users. Import your Plex users, set default permissions: auto-approve for people you trust with disk space, plain request (needs your approval) for everyone else. Request limits per week are available if someone's enthusiasm needs a budget.
The quiet win: request quality is a policy, not a question
The requester never picks a profile — they get the default you set per arr in step 2/3. That's the entire user experience contract of the stack: choices live with the admin, buttons live with the users. If someone wants 4K, that's you changing their default, not them navigating a menu.
Checkpoint
- Log in as a non-admin Plex user (private window), search something not in the library, hit Request.
- Watch it appear in the *arr's queue without anyone touching Sonarr/Radarr.
- When the import finishes, the request flips to Available on its own.
That's the full loop: request → grab → import → available, no admin involved.
Next: Part 6 — Bazarr, subtitles that match what's actually on disk. Previous: Part 4 — Prowlarr.
If this saved you some time, a coffee keeps the lights on and the posts coming.
☕ Buy me a coffee