Plex Media Server

Self-hosted media server

August 2024, revamped November 2025

Project Overview

Plex runs on TrueNAS with 4K and CPU transcoding. Sonarr and Radarr watch for new releases, Prowlarr and autobrr find them, qBittorrent downloads them, and Seerr lets family and friends request things. Every app on this page runs as a Docker container, and Trakt keeps my watch history.

Current Library Stats Live library stats via Plex API

Movies Loading...
TV Series Loading...
TV Episodes Loading...
Users Loading...

The Automation Pipeline

From request to library, nothing needs me:

  1. Trakt Lists → Watchlists I follow sync to Radarr and Sonarr
  2. Seerr → Requests are approved automatically and sent to Radarr or Sonarr
  3. Radarr/Sonarr → Watch for new releases and start a search
  4. autobrr → Watches release announcements and hands matches to Radarr and Sonarr within seconds
  5. Prowlarr → Searches the configured indexers, and covers RSS when autobrr isn't the source
  6. qBittorrent → Downloads
  7. Hardlinks → One file on disk, visible to both the downloader and Plex
  8. Plex → Scans and adds it to the library
  9. Trakt Scrobble → Records what gets watched in Plex
  10. Maintainerr → Clears out what nobody watches, by rule

The *arr Apps

Bazarr (Subtitles)

  • Function: Downloads subtitles for movies and shows
  • Integration: Picks up new Radarr and Sonarr imports through their APIs and searches on its own

Maintainerr (Cleanup)

  • Function: Removes library content by rule, based on what actually gets watched
  • Rules:
    • Remove movies unwatched for 35+ days after being added
    • Remove TV show episodes with no plays in 28+ days
    • Exclude content from deletion if added to user collections
    • Exclude certain collections (Harry Potter, Spider-Man, Studio Ghibli, etc.)
  • Integration: Reads watch history from Plex and Tautulli, then removes the content through Radarr and Sonarr
  • Why: Clears out what nobody watches, so the pool doesn't fill up

autobrr (Release Announcements)

  • Function: Watches release announcements and hands matches to Radarr and Sonarr within seconds
  • Why: New releases don't wait for an RSS refresh or a scheduled search
  • Integration: Radarr and Sonarr still decide. autobrr hands over the release, and only watchlisted titles that match a quality profile download

Prowlarr (Indexers)

  • Function: One place to configure every indexer
  • Why: I add an indexer once and it syncs to Sonarr and Radarr

qBittorrent (Downloads)

  • Integration: Sonarr and Radarr send downloads straight to it
  • Storage: Downloads land in their own ZFS dataset and get hardlinked into the library
  • Configuration: Tuned for throughput and disk efficiency on the ZFS pool

Radarr (Movies)

  • Function: Tracks movies and release dates, and upgrades quality when a better copy shows up
  • Integration: Prowlarr for indexers, qBittorrent for downloads
  • Automation: Follows Trakt lists for new movies and searches as soon as one is released

Sonarr (TV Shows)

  • Function: Tracks shows by season and episode, and starts downloads
  • Integration: Prowlarr for indexers, qBittorrent for downloads
  • Automation: Follows Trakt lists for new shows and searches for each episode when it airs

Unpackerr (Archives)

  • Function: Extracts RAR, ZIP, and 7z downloads from qBittorrent's download folder
  • Why: Archived releases import without me unpacking them
  • Process: Download completes → Unpackerr extracts → Radarr/Sonarr imports → Plex sees it

Request Management

Seerr is where everyone else on the server browses and asks for things. Nobody needs access to Radarr or Sonarr: they request a title, it's approved automatically, and Plex tells them when it lands. Seerr also shows whether something is already in the library or still downloading.

  • Auto-Approval: Requests are approved automatically and sent to Radarr or Sonarr
  • Discovery: Trending, popular, and recommended movies and TV
  • Integration: Sends movies to Radarr and shows to Sonarr
  • Workflow: Request → auto-approval → Radarr/Sonarr → Prowlarr search → qBittorrent download → Plex import

Trakt Integration

  • Plex Scrobbling: Anything watched in Plex is marked watched in Trakt
  • Trakt → Radarr/Sonarr: Specific Trakt lists sync over as things to watch for
  • Auto-Discovery: A movie or show added to one of those lists starts a search
  • Lists: Several lists, split by genre, priority, or what I plan to watch
  • Public Feed: Recent watches show up on the media page, refreshed every 12 hours

Related Projects