Complete Arr Stack: Automating Your Media Library
The Arr suite has revolutionized home media management. Radarr, Sonarr, Lidarr, and friends work together to automatically find, download, and organize your media. Here's how to set up the complete stack.
What's in the Arr Suite?
The "Arr" applications handle different media types:
| Application | Purpose |
|---|---|
| Radarr | Movies |
| Sonarr | TV Shows |
| Lidarr | Music |
| Bookshelf | Books/Audiobooks |
| Prowlarr | Indexer management |
| Seerr | Request management |
| qBittorrent | Download client |
| JFA-Go | Jellyfin account management |
The Media Flow
Here's how everything connects:
- User requests media through Seerr
- Request goes to Radarr/Sonarr
- Arr app queries indexers via Prowlarr
- Best release is sent to qBittorrent
- Completed download is imported and renamed
- Jellyfin picks up the new media
Docker Compose Setup
Here's a simplified version of our full stack:
services:
radarr:
image: lscr.io/linuxserver/radarr:latest
container_name: radarr
environment:
- PUID=1000
- PGID=1000
- TZ=America/New_York
volumes:
- radarr_config:/config
- /data:/data
ports:
- "7878:7878"
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:/config
- /data:/data
ports:
- "8989:8989"
restart: unless-stopped
prowlarr:
image: lscr.io/linuxserver/prowlarr:latest
container_name: prowlarr
environment:
- PUID=1000
- PGID=1000
- TZ=America/New_York
volumes:
- prowlarr_config:/config
ports:
- "9696:9696"
restart: unless-stopped
seerr:
image: ghcr.io/seerr-team/seerr:latest
container_name: seerr
init: true
environment:
- TZ=America/New_York
volumes:
- seerr_data:/app/config
ports:
- "5055:5055"
healthcheck:
test: wget --no-verbose --tries=1 --spider http://localhost:5055/api/v1/status || exit 1
start_period: 20s
timeout: 3s
interval: 15s
retries: 3
restart: unless-stopped
qbittorrent:
image: lscr.io/linuxserver/qbittorrent:latest
container_name: qbittorrent
environment:
- PUID=1000
- PGID=1000
- TZ=America/New_York
- WEBUI_PORT=8080
volumes:
- qbit_config:/config
- /data/downloads:/data/downloads
ports:
- "8080:8080"
restart: unless-stopped
volumes:
radarr_config:
sonarr_config:
prowlarr_config:
seerr_data:
qbit_config:
Critical: Folder Structure
This is where most people go wrong. Use a unified structure:
/data
Why this matters: When Radarr/Sonarr imports a download, it can create a hardlink instead of copying. Same file, two paths, instant import with zero disk space used.
VPN Integration
Always use a VPN with torrenting applications! Check out our VPN setup guide.
Use the binhex/qbittorrentvpn image for built-in VPN:
qbittorrent:
image: binhex/arch-qbittorrentvpn
environment:
- VPN_ENABLED=yes
- VPN_PROV=custom
- VPN_CLIENT=openvpn
Quality Profiles
Configure quality profiles in Radarr/Sonarr:
Recommended for movies:
- Minimum: 5GB
- Preferred: 10-15GB
- Maximum: 40GB
- Format: Bluray-2160p > Bluray-1080p > WEB-DL
Recommended for TV:
- Minimum: 1GB per episode
- Preferred: 2-4GB per episode
- Format: HDTV-2160p > Bluray-1080p > WEB-DL
Recyclarr for Automation
Use Recyclarr to sync quality profiles from TRaSH Guides:
docker run --rm -v recyclarr_config:/config ghcr.io/recyclarr/recyclarr sync
This keeps your profiles up-to-date with community best practices.
Flaresolverr for Cloudflare
Some indexers use Cloudflare protection. Add Flaresolverr:
flaresolverr:
image: ghcr.io/flaresolverr/flaresolverr:latest
container_name: flaresolverr
environment:
- TZ=America/New_York
ports:
- "8191:8191"
restart: unless-stopped
Configure in Prowlarr under Settings → Indexers → Add (FlareSolverr).
Learn More
For the complete production-ready setup:
What does your Arr stack look like? Share your setup on Discord!
