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.
Related
Part 6: Bazarr
Bazarr piggybacks on Sonarr and Radarr to fetch subtitles for the exact releases in your library. Set the language profile once and stop thinking about it.
Part 4: Prowlarr
Stop configuring indexers per app. Prowlarr holds them once and syncs to Sonarr/Radarr. The pipeline runs end to end for the first time.
Part 7: Profilarr
Default quality profiles just grab a resolution. Profilarr syncs curated custom formats so 'best release' means best encode, not biggest file.
If this saved you some time, a coffee keeps the lights on and the posts coming.
☕ Buy me a coffee