Sick of sites getting Epstein'd By Big Media?

RIP in Pieces Nunflix

Automate it yourself.

Applications

You think this is a game?

πŸ”

Prowlarr

Indexer Manager

Port: 9696
Access β†’
πŸ“Ί

Sonarr

TV Show Manager

Port: 8989
Access β†’
🎬

Radarr

Movie Manager

Port: 7878
Access β†’
🎡

Lidarr

Music Manager

Port: 8686
Access β†’
🏠

Homarr

Dashboard

Port: 7575
Access β†’
🎭

Jellyfin

Media Server

Port: 8096
Access β†’
⚑

qBittorrent

Download Client

Port: 8080
Access β†’

How are they connected?

Get the media automation workflow

πŸ”

Prowlarr

A central indexer manager that syncs trackers to all *arr's

β†’
πŸ“ΊπŸŽ¬πŸŽ΅

Sonarr / Radarr / Lidarr

Media managers that monitor and search for content

β†’
⚑

qBittorrent

Downloads content from indexers

β†’
🎭

Jellyfin

Streams organized media to your devices

Prowlarr β†’ Media Managers

Central hub. Add indexers here, they sync to all *arr apps automatically.

Media Managers β†’ qBittorrent

Add content, *arr apps search indexers, qBittorrent downloads it.

qBittorrent β†’ Media Library

Downloads finish, *arr apps move and rename files to organized folders.

Media Library β†’ Jellyfin

Jellyfin scans folders, streams everything to your devices. With metadata. Nice.

Homarr Dashboard

One dashboard to rule them all. Monitor everything from one place.

Setup Tutorial

Configure your stack. Step by step.

01

Initial Setup

Docker installed? Good. Start the stack:

sudo docker-compose up -d

Fix permissions:

chown -R 1000:1000 /media/Arr
02

Configure qBittorrent

Access at https://qbittorrent.battlecry.tech

Get temp password from logs:

sudo docker logs qbittorrent

Go to Tools β†’ Options β†’ WebUI:

  • Change username/password
  • Enable "Bypass authentication for clients on localhost"
  • Save
03

Configure Prowlarr

Access at https://prowlarr.battlecry.tech

Add download client:

  • Settings β†’ Download Clients β†’ + β†’ qBittorrent
  • Host: qbittorrent (or host IP)
  • Port: 8080
  • Enter qBittorrent credentials
  • Test, then save
04

Configure Sonarr

Access at https://sonarr.battlecry.tech

Root Folder:

  • Settings β†’ Media Management β†’ Add Root Folder
  • Path: /data/tvshows

Download Client:

  • Settings β†’ Download Clients β†’ Add qBittorrent (same as Prowlarr)

Connect to Prowlarr:

  • Settings β†’ General β†’ Copy API Key
  • Prowlarr β†’ Settings β†’ Apps β†’ + β†’ Sonarr
  • Paste API key, set host (sonarr or host IP), test, save

Backup:

  • Settings β†’ General (advanced) β†’ Backup folder: /data/Backup
05

Configure Radarr

Access at https://radarr.battlecry.tech

Same as Sonarr, but:

  • Root folder: /data/movies
  • Add qBittorrent, connect to Prowlarr
  • Backup: /data/Backup
06

Configure Lidarr

Access at https://lidarr.battlecry.tech

Same pattern:

  • Root folder: /data/musicfolder
  • Add qBittorrent, connect to Prowlarr
07

Add Indexers

Back to Prowlarr. Add indexers:

  • Indexers (top right) β†’ Add Indexer
  • Search (e.g., "rarbg", "yts"), configure, test, save

Sync:

  • Click Sync App Indexers icon
  • Check Settings β†’ Apps shows "Full sync"
08

Configure Jellyfin

Access at https://jellyfin.battlecry.tech

Complete setup wizard, then add libraries:

  • Dashboard β†’ Libraries
  • Movies: /data/Movies
  • TV Shows: /data/TVShows
  • Music: /data/Music

Jellyfin scans and organizes automatically. Metadata included.

09

You're Done

Stack is ready. Use it:

  • Add Content: Sonarr/Radarr/Lidarr β†’ "Add Series/Movie/Album"
  • Search: "Search All" or "Search Monitored" to download
  • Monitor: Set quality profiles and preferences
  • Stream: Jellyfin on any device
  • Dashboard: Homarr for monitoring everything

ARR Stack Deep Dive

End-to-end guidance for building the media automation pipelineβ€”hardware prep, Docker layout, app configuration, and verification.

High-Level Flow

How requests travel from *arr dashboards to Jellyfin streams.

01
Requests β†’ *arr: Users add series/movies/albums in Sonarr, Radarr, or Lidarr with monitored + quality profiles.
02
*arr β†’ Prowlarr: Each request triggers a Prowlarr search across linked indexers (Torznab/Newznab) using the Prowlarr app connectors.
03
Prowlarr β†’ qBittorrent: Approved releases are pushed to qBittorrent with per-app categories, keeping different media types separated.
04
qBittorrent β†’ *arr: Completed Download Handling reports finished jobs; *arr imports, renames, and organizes media into `/data/media`.
05
Media Library β†’ Jellyfin & Homarr: Jellyfin watches the media folders for streaming, while Homarr surfaces shortcuts, health checks, and quick status at a glance.

Prerequisites & Layout

What to prepare before deploying.

Host Requirements

  • Linux server (Ubuntu 22.04 LTS or similar) with sudo access
  • Docker + Docker Compose V2 installed and running as a service
  • At least 4 GB RAM, quad-core CPU, and 1 TB+ disk
  • Firewall (UFW) and Fail2Ban for baseline hardening
  • DNS or reverse proxy (Caddy, Traefik, NPM, Cloudflare Tunnel) for clean HTTPS endpoints

Directory Layout

Bind-mount the same tree into every container:

/data/
  config/
    prowlarr/
    sonarr/
    radarr/
    lidarr/
    qbittorrent/
    jellyfin/
    homarr/
  downloads/
    incomplete/
    complete/
  media/
    tv/
    movies/
    music/
    backup/

Security & Networking

  • Expose apps only on an internal Docker network (`arr_net`)
  • Terminate TLS and auth at the reverse proxy (Authelia/AuthentiK)
  • Rotate credentials & API keys, store them in `.env` files
  • Set per-service minimum free space limits to avoid disk exhaustion

Deployment Steps

From compose file to running containers.

Compose Workflow

  1. Create a `docker-compose.yml` (version 3.8) using linuxserver.io or hotio images for qBittorrent, Prowlarr, Sonarr, Radarr, Lidarr, Jellyfin, and Homarr. Mount `/data/config/` β†’ `/config` and `/data` β†’ `/data` (or `/media`) inside the containers.
  2. Attach every service to a shared bridge network (e.g., `arr_net`) plus optional reverse-proxy network if required.
  3. Pull and launch:
    docker compose pull
    docker compose up -d
    docker compose ps
  4. Inspect logs for first-run tasks (admin passwords, migrations): `docker compose logs -f `.
  5. Configure reverse proxy routes with TLS, optional SSO, and IP allow lists before exposing services publicly.

Application Configuration

Recommended sequence and key toggles for each component.

qBittorrent

  • Change default WebUI credentials; enable HTTPS only if no proxy
  • Download paths: `/data/downloads/incomplete` + auto move to `/data/downloads/complete`
  • Create categories: `sonarr`, `radarr`, `lidarr` for easier import
  • Enable "Bypass authentication for clients on arr_net" for API calls

Prowlarr

  • Copy API key (Settings β†’ General) for later app connections
  • Add qBittorrent under Download Clients and test connectivity
  • Add Torznab/Newznab indexers; store credentials in indexer secrets
  • Under Settings β†’ Apps, add Sonarr, Radarr, Lidarr with their internal URLs and API keys

Sonarr

  • Set root folder to `/data/media/tv` and enable recycle bin
  • Enable Completed Download Handling + Remove
  • Add qBittorrent client (host `qbittorrent`, category `sonarr`, hardlinks if possible)
  • Copy API key back into the Prowlarr Sonarr app definition

Radarr

  • Root folder `/data/media/movies`, quality profiles per release
  • qBittorrent client with category `radarr`, use tags for 4K/1080p if needed
  • Enable Import Lists (Trakt/IMDB) for automation and copy API key to Prowlarr

Lidarr

  • Root folder `/data/media/music`, metadata profiles per genre
  • Same qBittorrent client with category `lidarr`
  • Configure metadata profiles & preferred sources (e.g., FLAC)

Jellyfin

  • Create admin account, libraries for TV/Movie/Music directories
  • Enable real-time monitoring + scheduled library scans
  • Point transcoding cache to SSD-backed path; set remote streaming bitrate limits

Homarr

  • Connect widgets to Sonarr/Radarr/Lidarr/Jellyfin APIs
  • Create quick links for every exposed URL + health checks
  • Surface disk usage, container status, and shortcuts for operational tasks

Integration & Verification

How the services talk plus the tests that prove it works.

From To Method Purpose
Prowlarr Sonarr / Radarr / Lidarr Apps connectors + API keys Unified indexer searches, push releases per app
Sonarr / Radarr / Lidarr qBittorrent Download Clients via WebUI API + categories Send approved releases with tagging for import routing
qBittorrent *arr apps Completed Download Handling + category matching Let *arr know when to import, rename, and move files
*arr apps Jellyfin Shared filesystem (`/data/media`) Provide organized libraries that Jellyfin scans automatically
All services Homarr Dashboard widgets + API tokens Central status, quick actions, and reference shortcuts

Verification Checklist

  • Add a test show/movie/album and monitor activity in each app
  • Confirm qBittorrent receives the job with the expected category
  • Watch the import log; files should land under `/data/media/`
  • Trigger a Jellyfin library scan and verify artwork/metadata show up
  • Review Homarr widgets for link health and API response status

Maintenance & Backups

  • Nightly tar of `/data/config` plus *arr in-app backups to `/data/media/backup`
  • `docker compose pull && docker compose up -d` weekly for updates
  • Monitor disk usage and set warnings for < 50 GB free
  • Keep reverse proxy TLS certs and SSO tokens rotating automatically

Doom

Loading DOOM...