From 1d0ee19a689ec3a7545b0fe61d5d76bc33103f2b Mon Sep 17 00:00:00 2001 From: Nick Yeoman Date: Thu, 2 Jul 2026 21:37:11 -0700 Subject: [PATCH] feat: add readarr, whisparr, and bazarr stacks - Add readarr_dev (eBook/audiobook collection manager, port 8787) - Add whisparr_dev (adult content manager, port 6969) - Add bazarr_dev (subtitle management companion, port 6767) - Bazarr uses a shared /media volume for writing subtitles - All stacks follow template conventions (defaults, proxy network, VOL_PATH=/data, README section order) --- bazarr_dev/README.md | 75 ++++++++++++++++++++++++++++++++++++ bazarr_dev/compose.yaml | 20 ++++++++++ bazarr_dev/sample.env | 4 ++ readarr_dev/README.md | 80 +++++++++++++++++++++++++++++++++++++++ readarr_dev/compose.yaml | 20 ++++++++++ readarr_dev/sample.env | 4 ++ whisparr_dev/README.md | 80 +++++++++++++++++++++++++++++++++++++++ whisparr_dev/compose.yaml | 20 ++++++++++ whisparr_dev/sample.env | 4 ++ 9 files changed, 307 insertions(+) create mode 100644 bazarr_dev/README.md create mode 100644 bazarr_dev/compose.yaml create mode 100644 bazarr_dev/sample.env create mode 100644 readarr_dev/README.md create mode 100644 readarr_dev/compose.yaml create mode 100644 readarr_dev/sample.env create mode 100644 whisparr_dev/README.md create mode 100644 whisparr_dev/compose.yaml create mode 100644 whisparr_dev/sample.env diff --git a/bazarr_dev/README.md b/bazarr_dev/README.md new file mode 100644 index 0000000..e976615 --- /dev/null +++ b/bazarr_dev/README.md @@ -0,0 +1,75 @@ +# Bazarr + +## Overview + +Bazarr is a subtitle management companion for Sonarr and Radarr. It automatically downloads and synchronizes subtitles for your TV shows and movies from providers like OpenSubtitles, Podnapisi, and Subscene. Unlike the *arr media managers, Bazarr doesn't handle downloads or indexers — it focuses solely on keeping subtitles matched to your existing media library. + +## Project Details + +- **Project Repository:** [https://www.bazarr.media/](https://www.bazarr.media/) +- **Container Image:** [ghcr.io/hotio/bazarr](https://hotio.dev/containers/bazarr/) +- **Reverse Proxy Port:** `6767` + +## Getting Started + +Open http://localhost:6767 in your browser and complete the initial setup: + +1. **Configure subtitle languages** — select your preferred languages (e.g., English, French) +2. **Connect Sonarr and Radarr** — go to **Settings → Sonarr** and **Settings → Radarr**, enter server URLs and API keys +3. **Add subtitle providers** — configure provider credentials (OpenSubtitles, etc.) in **Settings → Providers** +4. Bazarr will scan your existing media and begin downloading matching subtitles + +### How it works + +Bazarr monitors your Sonarr/Radarr libraries. When new media is added or existing media is detected without subtitles, it searches configured providers and downloads the best match. Subtitles are written directly alongside your video files in the `/media` volume. + +## Environment Variable Notes + +| Variable | Description | +|---|---| +| `BAZARR_IMAGE` | Container image (default: `ghcr.io/hotio/bazarr:release`) | +| `BAZARR_RESTART` | Restart policy (default: `unless-stopped`) | +| `BAZARR_PORT` | Published port for the web UI (default: `6767`) | +| `VOL_PATH` | Base path for persistent data volumes (default: `/data`) | +| `TZ` | Container timezone (default: `America/Vancouver`) | + +## Volume Notes + +| Volume | Purpose | +|---|---| +| `${VOL_PATH:-/data}/bazarr/config` | Application configuration and database | +| `${VOL_PATH:-/data}/media` | Shared media library — must include your TV and movie folders so Bazarr can write subtitles alongside video files | + +## Network Notes + +Requires an external `proxy` network. Create it once with: + +```bash +docker network create proxy +``` + +## Docker Run + +```bash +docker run -d \ + --name=bazarr \ + -e PUID=1000 \ + -e PGID=1000 \ + -e UMASK=002 \ + -e TZ=America/Vancouver \ + -p 6767:6767 \ + -v ${VOL_PATH:-/data}/bazarr/config:/config \ + -v ${VOL_PATH:-/data}/media:/media \ + --network proxy \ + --restart unless-stopped \ + ghcr.io/hotio/bazarr:release +``` + +## Dockhand Stack, Deploy from Git + +- **Cookbooks Repository** +- **stackname:** bazarr_dev +- **Compose file path:** bazarr_dev/compose.yaml +- **Additional env file (optional):** bazarr_dev/sample.env + +Load `bazarr_dev/sample.env` into the Environment variables in Dockhand, then create the Stack. diff --git a/bazarr_dev/compose.yaml b/bazarr_dev/compose.yaml new file mode 100644 index 0000000..ff83ffa --- /dev/null +++ b/bazarr_dev/compose.yaml @@ -0,0 +1,20 @@ +services: + bazarr: + image: ${BAZARR_IMAGE:-ghcr.io/hotio/bazarr:release} + restart: ${BAZARR_RESTART:-unless-stopped} + volumes: + - ${VOL_PATH:-/data}/bazarr/config:/config + - ${VOL_PATH:-/data}/media:/media + environment: + - PUID=1000 + - PGID=1000 + - UMASK=002 + - TZ=${TZ:-America/Vancouver} + ports: + - "${BAZARR_PORT:-6767}:6767" + networks: + - proxy + +networks: + proxy: + external: true diff --git a/bazarr_dev/sample.env b/bazarr_dev/sample.env new file mode 100644 index 0000000..93ff7a7 --- /dev/null +++ b/bazarr_dev/sample.env @@ -0,0 +1,4 @@ +# Bazarr +VOL_PATH=/data +BAZARR_IMAGE=ghcr.io/hotio/bazarr:release +TZ="America/Vancouver" diff --git a/readarr_dev/README.md b/readarr_dev/README.md new file mode 100644 index 0000000..7fd2397 --- /dev/null +++ b/readarr_dev/README.md @@ -0,0 +1,80 @@ +# Readarr + +## Overview + +Readarr is an automated eBook and audiobook collection manager for Usenet and BitTorrent users. It monitors authors on your watchlist, scans configured indexers for new releases or upgrades, and sends them to your download client. After download, it renames and organizes files into your book library and can notify your media server. + +## Project Details + +- **Project Repository:** [https://readarr.com/](https://readarr.com/) +- **Container Image:** [ghcr.io/hotio/readarr](https://hotio.dev/containers/readarr/) +- **Reverse Proxy Port:** `8787` + +## Getting Started + +Open http://localhost:8787 in your browser and complete the initial setup wizard: + +1. **Choose your UI language** +2. **Add a download client** — select qBittorrent, enter its host/port/credentials +3. **Add an indexer** — or connect to Prowlarr for automatic indexer sync + +Once the wizard finishes, you'll see an empty library. To populate it: + +- Go to **Settings → Media Management** and add a **Root Folder** (e.g., `/books`) — this is where your organized book library will live +- Click **Add Author** and search by name — Readarr fetches metadata, covers, and available editions +- Optionally connect a **List** (Goodreads, etc.) to auto-import authors from your reading lists + +### Download flow + +qBittorrent downloads to its own directory → Readarr picks it up, renames the file, and moves it into `/Author Name/Book Name/` + +## Environment Variable Notes + +| Variable | Description | +|---|---| +| `READARR_IMAGE` | Container image (default: `ghcr.io/hotio/readarr:release`) | +| `READARR_RESTART` | Restart policy (default: `unless-stopped`) | +| `READARR_PORT` | Published port for the web UI (default: `8787`) | +| `VOL_PATH` | Base path for persistent data volumes (default: `/data`) | +| `TZ` | Container timezone (default: `America/Vancouver`) | + +## Volume Notes + +| Volume | Purpose | +|---|---| +| `${VOL_PATH:-/data}/readarr/config` | Application configuration and database | +| `${VOL_PATH:-/data}/readarr/data` | Download client data and working directory | + +## Network Notes + +Requires an external `proxy` network. Create it once with: + +```bash +docker network create proxy +``` + +## Docker Run + +```bash +docker run -d \ + --name=readarr \ + -e PUID=1000 \ + -e PGID=1000 \ + -e UMASK=002 \ + -e TZ=America/Vancouver \ + -p 8787:8787 \ + -v ${VOL_PATH:-/data}/readarr/config:/config \ + -v ${VOL_PATH:-/data}/readarr/data:/data \ + --network proxy \ + --restart unless-stopped \ + ghcr.io/hotio/readarr:release +``` + +## Dockhand Stack, Deploy from Git + +- **Cookbooks Repository** +- **stackname:** readarr_dev +- **Compose file path:** readarr_dev/compose.yaml +- **Additional env file (optional):** readarr_dev/sample.env + +Load `readarr_dev/sample.env` into the Environment variables in Dockhand, then create the Stack. diff --git a/readarr_dev/compose.yaml b/readarr_dev/compose.yaml new file mode 100644 index 0000000..0b6dcc3 --- /dev/null +++ b/readarr_dev/compose.yaml @@ -0,0 +1,20 @@ +services: + readarr: + image: ${READARR_IMAGE:-ghcr.io/hotio/readarr:release} + restart: ${READARR_RESTART:-unless-stopped} + volumes: + - ${VOL_PATH:-/data}/readarr/config:/config + - ${VOL_PATH:-/data}/readarr/data:/data + environment: + - PUID=1000 + - PGID=1000 + - UMASK=002 + - TZ=${TZ:-America/Vancouver} + ports: + - "${READARR_PORT:-8787}:8787" + networks: + - proxy + +networks: + proxy: + external: true diff --git a/readarr_dev/sample.env b/readarr_dev/sample.env new file mode 100644 index 0000000..7275bd8 --- /dev/null +++ b/readarr_dev/sample.env @@ -0,0 +1,4 @@ +# Readarr +VOL_PATH=/data +READARR_IMAGE=ghcr.io/hotio/readarr:release +TZ="America/Vancouver" diff --git a/whisparr_dev/README.md b/whisparr_dev/README.md new file mode 100644 index 0000000..f4260bc --- /dev/null +++ b/whisparr_dev/README.md @@ -0,0 +1,80 @@ +# Whisparr + +## Overview + +Whisparr is an automated adult content collection manager for Usenet and BitTorrent users. It monitors your watchlist, scans configured indexers for releases, and sends matches to your download client. After download, it renames and organizes files into your media library and can notify your media server. + +## Project Details + +- **Project Repository:** [https://whisparr.com/](https://whisparr.com/) +- **Container Image:** [ghcr.io/hotio/whisparr](https://hotio.dev/containers/whisparr/) +- **Reverse Proxy Port:** `6969` + +## Getting Started + +Open http://localhost:6969 in your browser and complete the initial setup wizard: + +1. **Choose your UI language** +2. **Add a download client** — select qBittorrent, enter its host/port/credentials +3. **Add an indexer** — or connect to Prowlarr for automatic indexer sync + +Once the wizard finishes, you'll see an empty library. To populate it: + +- Go to **Settings → Media Management** and add a **Root Folder** (e.g., `/adult`) — this is where your organized library will live +- Click **Add Movie** and search by title — Whisparr fetches metadata and available releases +- Optionally connect a **List** to auto-import from your watchlists + +### Download flow + +qBittorrent downloads to its own directory → Whisparr picks it up, renames the file, and moves it into `/Title (Year)/` + +## Environment Variable Notes + +| Variable | Description | +|---|---| +| `WHISPARR_IMAGE` | Container image (default: `ghcr.io/hotio/whisparr:release`) | +| `WHISPARR_RESTART` | Restart policy (default: `unless-stopped`) | +| `WHISPARR_PORT` | Published port for the web UI (default: `6969`) | +| `VOL_PATH` | Base path for persistent data volumes (default: `/data`) | +| `TZ` | Container timezone (default: `America/Vancouver`) | + +## Volume Notes + +| Volume | Purpose | +|---|---| +| `${VOL_PATH:-/data}/whisparr/config` | Application configuration and database | +| `${VOL_PATH:-/data}/whisparr/data` | Download client data and working directory | + +## Network Notes + +Requires an external `proxy` network. Create it once with: + +```bash +docker network create proxy +``` + +## Docker Run + +```bash +docker run -d \ + --name=whisparr \ + -e PUID=1000 \ + -e PGID=1000 \ + -e UMASK=002 \ + -e TZ=America/Vancouver \ + -p 6969:6969 \ + -v ${VOL_PATH:-/data}/whisparr/config:/config \ + -v ${VOL_PATH:-/data}/whisparr/data:/data \ + --network proxy \ + --restart unless-stopped \ + ghcr.io/hotio/whisparr:release +``` + +## Dockhand Stack, Deploy from Git + +- **Cookbooks Repository** +- **stackname:** whisparr_dev +- **Compose file path:** whisparr_dev/compose.yaml +- **Additional env file (optional):** whisparr_dev/sample.env + +Load `whisparr_dev/sample.env` into the Environment variables in Dockhand, then create the Stack. diff --git a/whisparr_dev/compose.yaml b/whisparr_dev/compose.yaml new file mode 100644 index 0000000..7910dae --- /dev/null +++ b/whisparr_dev/compose.yaml @@ -0,0 +1,20 @@ +services: + whisparr: + image: ${WHISPARR_IMAGE:-ghcr.io/hotio/whisparr:release} + restart: ${WHISPARR_RESTART:-unless-stopped} + volumes: + - ${VOL_PATH:-/data}/whisparr/config:/config + - ${VOL_PATH:-/data}/whisparr/data:/data + environment: + - PUID=1000 + - PGID=1000 + - UMASK=002 + - TZ=${TZ:-America/Vancouver} + ports: + - "${WHISPARR_PORT:-6969}:6969" + networks: + - proxy + +networks: + proxy: + external: true diff --git a/whisparr_dev/sample.env b/whisparr_dev/sample.env new file mode 100644 index 0000000..fee9fe7 --- /dev/null +++ b/whisparr_dev/sample.env @@ -0,0 +1,4 @@ +# Whisparr +VOL_PATH=/data +WHISPARR_IMAGE=ghcr.io/hotio/whisparr:release +TZ="America/Vancouver"