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:
Step 1: Create Directory Structure
mkdir -p ~/media-stack/{sonarr,radarr,qbittorrent,downloads,tv,movies}
cd ~/media-stack
Your folder structure should look like:
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
- Open http://your-server-ip:8080
- Default credentials:
- Username:
admin - Password: Check container logs:
docker logs qbittorrent | grep password
- Username:
- Change the password immediately (Settings → Web UI)
- Configure download settings:
- Options → Downloads → Default Save Path:
/downloads - Enable “Run external program on torrent completion” (optional)
- Options → Downloads → Default Save Path:
Step 5: Configure Sonarr
Open http://your-server-ip:8989
Complete the initial setup wizard
Add Download Client:
- Settings → Download Clients → Add → qBittorrent
- Host:
qbittorrent - Port:
8080 - Username:
admin - Password: (your qBittorrent password)
- Test connection
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}
- Season Folder Format:
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
- Open http://your-server-ip:7878
- 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}
- Movie Folder Format:
Step 7: Add Content
Adding a TV Show to Sonarr
- Click “Add New” → Search for a show
- Select the show → Choose:
- Root Folder:
/tv - Quality Profile: HD-1080p (or your preference)
- Monitor: “All Episodes” (or “Future Episodes”)
- Root Folder:
- 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
- Click “Add New” → Search for a movie
- Select the movie → Choose:
- Root Folder:
/movies - Quality Profile: HD-1080p
- Monitor: Yes
- Root Folder:
- 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
- Use a VPN for downloads (configure in qBittorrent or use VPN containers)
- Don’t expose ports externally (use reverse proxy + authentication)
- Use strong passwords for all web interfaces
- 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
- Add Prowlarr to manage indexers centrally
- Set up Overseerr for family/friends to request content
- Automate backups of your config directories
- Explore custom scripts for advanced automation
What’s your automation stack? Using Sonarr/Radarr or something else? Drop a comment below!