Managing a media library manually is tedious. Downloading episodes, renaming files, organizing folders—it’s exhausting. That’s where Sonarr and Radarr come in.

These tools automate your entire media pipeline: monitoring releases, downloading content, organizing files, and updating your media server. Set it once, forget forever.

This guide walks you through setting up both tools with Docker Compose.

What Are Sonarr and Radarr?

Sonarr = Automated TV show management Radarr = Automated movie management

Both tools:

  • Monitor RSS feeds and indexers for new releases
  • Automatically download via Usenet or torrents
  • Rename and organize files properly
  • Notify your media server (Plex, Jellyfin) when new content arrives

Think of them as your personal media butler.

Prerequisites

Before starting, you’ll need:

  • A home server running Docker and Docker Compose
  • A download client (qBittorrent, Transmission, or SABnzbd)
  • Indexers (torrent sites or Usenet providers)
  • A media server (Plex, Jellyfin, or Emby)
  • Basic command line knowledge

Architecture Overview

Here’s how the stack works together:

(SToVnaSrhrowsqMP)B(eliDdetoixtwa/onJrlFeroileallndeyt)sfin(RMaodvairers)

Step 1: Create Directory Structure

mkdir -p ~/media-stack/{sonarr,radarr,qbittorrent,downloads,tv,movies}
cd ~/media-stack

Your folder structure should look like:

~/medsrqdtmioabovandiwv-aatnisrrtletrrosa/ra/crdkes/n/t/######SRqDOOoaBorrndiwggaatnaarrtlnnrrooiirazzccrdeeooeddnnndfftiTmiirVoggcevocsinthefoosirwgys

Step 2: Docker Compose Setup

Create docker-compose.yml:

version: "3.8"

services:
  qbittorrent:
    image: lscr.io/linuxserver/qbittorrent:latest
    container_name: qbittorrent
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=America/New_York
      - WEBUI_PORT=8080
    volumes:
      - ./qbittorrent:/config
      - ./downloads:/downloads
    ports:
      - 8080:8080
      - 6881:6881
      - 6881:6881/udp
    restart: unless-stopped

  sonarr:
    image: lscr.io/linuxserver/sonarr:latest
    container_name: sonarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=America/New_York
    volumes:
      - ./sonarr:/config
      - ./tv:/tv
      - ./downloads:/downloads
    ports:
      - 8989:8989
    restart: unless-stopped

  radarr:
    image: lscr.io/linuxserver/radarr:latest
    container_name: radarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=America/New_York
    volumes:
      - ./radarr:/config
      - ./movies:/movies
      - ./downloads:/downloads
    ports:
      - 7878:7878
    restart: unless-stopped

Important: Change PUID and PGID to match your user:

id $USER

Step 3: Start the Stack

docker-compose up -d

Verify everything is running:

docker-compose ps

You should see three containers running.

Step 4: Configure qBittorrent

  1. Open http://your-server-ip:8080
  2. Default credentials:
    • Username: admin
    • Password: Check container logs: docker logs qbittorrent | grep password
  3. Change the password immediately (Settings → Web UI)
  4. Configure download settings:
    • Options → Downloads → Default Save Path: /downloads
    • Enable “Run external program on torrent completion” (optional)

Step 5: Configure Sonarr

  1. Open http://your-server-ip:8989

  2. Complete the initial setup wizard

  3. Add Download Client:

    • Settings → Download Clients → Add → qBittorrent
    • Host: qbittorrent
    • Port: 8080
    • Username: admin
    • Password: (your qBittorrent password)
    • Test connection
  4. Add Root Folder:

    • Settings → Media Management → Add Root Folder
    • Path: /tv
    • Enable “Rename Episodes”
    • Set naming format (recommended):
      • Season Folder Format: Season {season:00}
      • Episode Format: {Series Title} - S{season:00}E{episode:00} - {Episode Title}
  5. Add Indexers:

    • Settings → Indexers → Add
    • Add your torrent indexers or Usenet providers
    • (You’ll need accounts with indexers like NZBgeek, NZBplanet, or public trackers)

Step 6: Configure Radarr

  1. Open http://your-server-ip:7878
  2. Follow similar steps as Sonarr:
    • Add qBittorrent as download client
    • Add root folder: /movies
    • Add indexers
    • Enable movie renaming:
      • Movie Folder Format: {Movie Title} ({Release Year})
      • Movie File Format: {Movie Title} ({Release Year}) - {Quality Title}

Step 7: Add Content

Adding a TV Show to Sonarr

  1. Click “Add New” → Search for a show
  2. Select the show → Choose:
    • Root Folder: /tv
    • Quality Profile: HD-1080p (or your preference)
    • Monitor: “All Episodes” (or “Future Episodes”)
  3. Click “Add”

Sonarr will automatically:

  • Search for all episodes (if monitoring all)
  • Download them via qBittorrent
  • Rename and organize files
  • Notify your media server

Adding a Movie to Radarr

  1. Click “Add New” → Search for a movie
  2. Select the movie → Choose:
    • Root Folder: /movies
    • Quality Profile: HD-1080p
    • Monitor: Yes
  3. Click “Add and Search”

Radarr will immediately search and download if available.

Step 8: Connect to Plex/Jellyfin

In Plex or Jellyfin, add libraries pointing to:

  • TV Shows: /path/to/media-stack/tv
  • Movies: /path/to/media-stack/movies

Enable automatic library scanning (or set a schedule).

Advanced Configuration

Quality Profiles

Customize download preferences:

  • Settings → Profiles → Add/Edit
  • Choose preferred resolutions (720p, 1080p, 4K)
  • Set upgrade rules (e.g., upgrade 720p to 1080p later)

Custom Formats (Radarr)

Create rules for specific releases:

  • Settings → Custom Formats
  • Example: Prefer releases with “IMAX” or avoid CAM rips

Notifications

Get alerts when content is downloaded:

  • Settings → Connect → Add
  • Options: Discord, Telegram, Email, Pushover, etc.

Automated Lists

Import lists of movies/shows automatically:

  • Sonarr: Trakt lists, IMDb lists
  • Radarr: Trakt, IMDb, TMDb lists

Troubleshooting

Downloads Not Starting

  • Check indexer connectivity (Settings → Indexers → Test)
  • Verify qBittorrent is reachable from Sonarr/Radarr
  • Check logs: Settings → System → Logs

Files Not Moving/Renaming

  • Verify permissions (PUID/PGID match your user)
  • Check “Completed Download Handling” is enabled
  • Ensure paths are consistent (/downloads, /tv, /movies)

Duplicate Downloads

  • Enable “Prefer and Upgrade” in Quality Profile
  • Check download client queue for stalled downloads

Security Best Practices

  1. Use a VPN for downloads (configure in qBittorrent or use VPN containers)
  2. Don’t expose ports externally (use reverse proxy + authentication)
  3. Use strong passwords for all web interfaces
  4. Keep containers updated (docker-compose pull && docker-compose up -d)

Maintenance

Weekly tasks:

  • Check logs for failed downloads
  • Update quality profiles if needed
  • Backup config directories (sonarr/, radarr/)

Monthly tasks:

  • Review disk space usage
  • Update containers
  • Review and remove unmonitored content

Alternatives & Enhancements

Additional Tools (The *arr Stack)

  • Prowlarr - Indexer manager (manages indexers for all *arr apps)
  • Lidarr - Music management (like Sonarr for albums)
  • Readarr - Ebook management
  • Bazarr - Subtitle automation
  • Overseerr/Jellyseerr - Request management (for shared libraries)

Example Full Stack with Prowlarr

  prowlarr:
    image: lscr.io/linuxserver/prowlarr:latest
    container_name: prowlarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=America/New_York
    volumes:
      - ./prowlarr:/config
    ports:
      - 9696:9696
    restart: unless-stopped

Prowlarr centralizes indexer management—configure once, sync to all *arr apps.

Conclusion

With Sonarr and Radarr running, your media library maintains itself:

  • New episodes appear automatically
  • Movies download as soon as they’re released
  • Everything is properly named and organized
  • Your media server stays updated

This is the magic of automation. Set it once, enjoy forever.

Next Steps

  1. Add Prowlarr to manage indexers centrally
  2. Set up Overseerr for family/friends to request content
  3. Automate backups of your config directories
  4. Explore custom scripts for advanced automation

What’s your automation stack? Using Sonarr/Radarr or something else? Drop a comment below!