Homelab Haven

Self-Hosted Media Stack, Part 5: Seerr, the Request Front-End Your Family Actually Uses

July 22, 20263 min read

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

  1. Sign in with Plex — the first login becomes admin. Seerr pulls your libraries and starts a scan; "available" badges come from this.
  2. Connect RadarrSettings → Services → Radarr: hostname, port 7878, API key, then the three defaults every request inherits: quality profile, root folder (/Media/Movies), minimum availability (Released unless you like waiting on cam rips).
  3. 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.
  4. Users & approvalSettings → 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