Jellyfin Full Automation Guide (2026): Radarr, Sonarr, Bazarr & Jellyseerr
A manual media server means you download files, rename them, move them, and refresh your library by hand. A fully automated stack means a user requests a movie, and it appears in Jellyfin subtitles included without you touching anything.
This guide builds that stack from scratch.
The Automation Stack
User request (Jellyseerr)
→ Radarr / Sonarr (find & grab)
→ qBittorrent (download)
→ Bazarr (subtitles)
→ Jellyfin (serve)
| Tool | Role |
|---|---|
| Jellyseerr | Users request movies and TV shows |
| Radarr | Monitors and grabs movies automatically |
| Sonarr | Monitors and grabs TV shows automatically |
| Prowlarr | Manages all indexers in one place |
| qBittorrent | Downloads the files |
| Bazarr | Downloads subtitles automatically |
| Jellyfin | Serves everything to your users |
Docker Compose: Full Stack
Create ~/automation/docker-compose.yml:
services:
jellyfin:
image: jellyfin/jellyfin:latest
container_name: jellyfin
network_mode: host
volumes:
- ./jellyfin/config:/config
- ./jellyfin/cache:/cache
- /mnt/media:/media:ro
devices:
- /dev/dri/renderD128:/dev/dri/renderD128
restart: unless-stopped
jellyseerr:
image: fallenbagel/jellyseerr:latest
container_name: jellyseerr
environment:
- LOG_LEVEL=info
- TZ=Europe/Paris
volumes:
- ./jellyseerr/config:/app/config
ports:
- 5055:5055
restart: unless-stopped
radarr:
image: lscr.io/linuxserver/radarr:latest
container_name: radarr
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Paris
volumes:
- ./radarr/config:/config
- /mnt/media/movies:/movies
- /mnt/downloads:/downloads
ports:
- 7878:7878
restart: unless-stopped
sonarr:
image: lscr.io/linuxserver/sonarr:latest
container_name: sonarr
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Paris
volumes:
- ./sonarr/config:/config
- /mnt/media/tv:/tv
- /mnt/downloads:/downloads
ports:
- 8989:8989
restart: unless-stopped
prowlarr:
image: lscr.io/linuxserver/prowlarr:latest
container_name: prowlarr
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Paris
volumes:
- ./prowlarr/config:/config
ports:
- 9696:9696
restart: unless-stopped
qbittorrent:
image: lscr.io/linuxserver/qbittorrent:latest
container_name: qbittorrent
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Paris
- WEBUI_PORT=8080
volumes:
- ./qbittorrent/config:/config
- /mnt/downloads:/downloads
ports:
- 8080:8080
- 6881:6881
- 6881:6881/udp
restart: unless-stopped
bazarr:
image: lscr.io/linuxserver/bazarr:latest
container_name: bazarr
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Paris
volumes:
- ./bazarr/config:/config
- /mnt/media/movies:/movies
- /mnt/media/tv:/tv
ports:
- 6767:6767
restart: unless-stopped
docker compose up -d
Critical: All containers that handle media files must share the same
/mnt/downloadsand/mnt/mediapaths. This enables hardlinks files exist in both locations without doubling storage.
Step 1: Configure Prowlarr (Indexers)
Prowlarr manages all your indexers in one place and syncs them to Radarr and Sonarr automatically.
- Open
http://your-server:9696 - Indexers → Add Indexer → search for your preferred trackers
- Settings → Apps → Add Application:
- Add Radarr (URL:
http://radarr:7878, API key from Radarr → Settings → General) - Add Sonarr (URL:
http://sonarr:8989, API key from Sonarr → Settings → General)
- Add Radarr (URL:
- Click Sync App Indexers
From now on, add indexers only in Prowlarr they sync everywhere automatically.
Step 2: Configure qBittorrent
- Open
http://your-server:8080 - Default login:
admin/adminadminchange this immediately - Tools → Options → Downloads:
- Default save path:
/downloads/complete - Keep incomplete in:
/downloads/incomplete
- Default save path:
- Tools → Options → Web UI → change username and password
Step 3: Configure Radarr (Movies)
- Open
http://your-server:7878 - Settings → Download Clients → Add → qBittorrent:
- Host:
qbittorrent, Port:8080 - Username / Password: your qBittorrent credentials
- Category:
radarr
- Host:
- Settings → Media Management → Root Folders → Add
/movies - Settings → Media Management → enable Rename Movies
- Naming format (recommended):
{Movie Title} ({Release Year})/{Movie Title} ({Release Year}) - Settings → Connect → Add → Jellyfin:
- Host:
localhost(or your server IP), Port:8096 - API Key: from Jellyfin Dashboard → API Keys
- Host:
Now when Radarr imports a movie, Jellyfin refreshes automatically.
Step 4: Configure Sonarr (TV Shows)
Same process as Radarr:
- Open
http://your-server:8989 - Settings → Download Clients → Add → qBittorrent (category:
sonarr) - Settings → Media Management → Root Folders → Add
/tv - Settings → Media Management → enable Rename Episodes
- Naming format (recommended):
{Series Title}/Season {season:00}/{Series Title} - S{season:00}E{episode:00} - {Episode Title} - Settings → Connect → Add → Jellyfin
Step 5: Configure Bazarr (Subtitles)
Bazarr automatically downloads subtitles for every movie and episode in your library.
- Open
http://your-server:6767 - Settings → Providers → Add your subtitle providers:
- OpenSubtitles.com (requires free account + API key)
- Addic7ed (best for TV shows)
- Podnapisi (good European language coverage)
- Settings → Languages → Add your desired languages (e.g., English, French)
- Settings → Radarr:
- URL:
http://radarr:7878 - API Key: from Radarr → Settings → General
- URL:
- Settings → Sonarr:
- URL:
http://sonarr:8989 - API Key: from Sonarr → Settings → General
- URL:
- Bazarr → Movies / Series → Scan All to download missing subtitles
Bazarr best practices
- Set a score threshold of 90+ to avoid bad matches
- Enable subtitle sync to fix timing offsets automatically
- Schedule scans at 3 AM to avoid impacting streaming performance
Step 6: Configure Jellyseerr (User Requests)
Jellyseerr gives your users a Netflix-like interface to request new content.
- Open
http://your-server:5055 - Complete the setup wizard:
- Connect to your Jellyfin server
- Connect to Radarr (URL:
http://radarr:7878, API key, root folder:/movies) - Connect to Sonarr (URL:
http://sonarr:8989, API key, root folder:/tv)
- Settings → Users → configure who can request and how many requests per week
The request workflow
- User searches for a movie in Jellyseerr
- User clicks Request
- Jellyseerr sends the request to Radarr/Sonarr
- Radarr/Sonarr finds and grabs the file via Prowlarr
- qBittorrent downloads it
- Radarr/Sonarr imports and renames the file
- Bazarr downloads subtitles
- Jellyfin library refreshes automatically
- User gets a notification: content is available
The entire process is hands-free.
File Naming: Why It Matters
Jellyfin matches metadata from TMDB/TVDB based on filenames. Wrong naming = wrong metadata.
Movies:
/mnt/media/movies/
The Dark Knight (2008)/
The Dark Knight (2008).mkv
TV Shows:
/mnt/media/tv/
Breaking Bad/
Season 01/
Breaking Bad - S01E01 - Pilot.mkv
Radarr and Sonarr handle renaming automatically when configured correctly.
Quality Profiles: TRaSH Guides
For the best quality settings, use TRaSH Guides with Recyclarr to sync community-tested quality profiles to Radarr and Sonarr automatically.
docker run --rm -v ./recyclarr/config:/config \
ghcr.io/recyclarr/recyclarr:latest sync
See trash-guides.info for the full configuration.
Automation Checklist
| Step | Done |
|---|---|
| Prowlarr indexers configured | ☐ |
| Prowlarr synced to Radarr + Sonarr | ☐ |
| qBittorrent credentials changed | ☐ |
| Radarr connected to qBittorrent | ☐ |
| Radarr connected to Jellyfin | ☐ |
| Sonarr connected to qBittorrent | ☐ |
| Sonarr connected to Jellyfin | ☐ |
| Bazarr connected to Radarr + Sonarr | ☐ |
| Jellyseerr connected to Jellyfin + Radarr + Sonarr | ☐ |
| Test: request a movie end-to-end | ☐ |
Manage Your Automation Stack from Your Phone
Once your stack is running, you want to manage it without opening five browser tabs.
JellyWatch consolidates everything into one Android app:
- Approve or reject Jellyseerr requests with one tap
- Monitor Radarr and Sonarr download queues
- See active Jellyfin sessions in real time
- Get push notifications when new content is available
- Check server health while your automation runs in the background
Your automation stack is live manage it from your pocket. Download JellyWatch on Google Play Jellyfin, Radarr, Sonarr, Jellyseerr, and Bazarr monitoring in one Android app.




Comments 2
Followed this guide end to end. My wife requested a movie on Jellyseerr at 8 PM, by 9 PM it was in our library with French subtitles courtesy of Bazarr. She thinks I did something manually. I did not.
The hardlinks section is crucial and most guides skip it. Without hardlinks on the same filesystem, you double your storage usage. This guide explains it clearly.
Leave a comment