--- title: Arr Stack — Kraken created: '2026-05-23' updated: '2026-05-27' type: tech namespace: family tags: [arr, radarr, sonarr, prowlarr, transmission, jellyfin, infra, kraken] related: - "[[tech/jellyfin-config]]" - "[[tech/arr-stack-taiga]]" - "[[concepts/kraken-media-stack]]" --- # Arr Stack — Kraken ## Pipeline ``` Prowlarr → Radarr + Sonarr → Transmission → Jellyfin ↓ router.py (cron 10min) ↓ symlinks → /media/{movies,cartoons,series,documentaries,...}/ ``` Два параллельных пути поступления контента: 1. **Radarr/Sonarr** → качают в `/media/movies-radarr/` и `/media/series-sonarr/` 2. **Transmission (ручные торренты)** → `on-download-complete.sh` → `sync.py` → `/media/{movies,cartoons,...}/` ### router.py — жанровая маршрутизация `router.py` читает NFO-файлы (которые Radarr/Sonarr создают при загрузке), определяет жанр и возрастной рейтинг, и создаёт symlink в нужную Jellyfin-библиотеку: | Источник | Условие | Цель | |---|---|---| | movies-radarr/ | Documentary | `/media/documentaries/` | | movies-radarr/ | Animation + !R/18+ | `/media/cartoons/` | | movies-radarr/ | всё остальное | `/media/movies/` | | series-sonarr/ | Documentary | `/media/documentaries-series/` | | series-sonarr/ | Animation + !TV-MA | `/media/cartoons-series/` | | series-sonarr/ | всё остальное | `/media/series/` | **Расположение:** `/srv/dev-disk-by-uuid-49e8f586-3839-4c5d-a1e1-58bfc3579ade/docker/media-pipeline/router.py` **Запуск:** `python3 router.py --dry-run` (проверка) / `python3 router.py --apply` (исполнение) ### media-router.sh — cron-скрипт для Telegram-уведомлений Обёртка над `router.py`, которая: - запускает `router.py --apply` - если `Nothing to do` — **SILENT**, ничего не шлёт - если созданы symlink'и или ошибка — отправляет отчёт в Telegram Kraken **Расположение:** рядом с `router.py` — `media-router.sh` **Cron (Kraken crontab):** каждые 10 минут **Telegram:** kraken_htpc_bot → чат @mallex87 ### sync.py — обработка ручных торрентов (Transmission) `sync.py` работает внутри Transmission-контейнера. При завершении загрузки: 1. Определяет название через TMDB API 2. Определяет жанр 3. Перемещает файл в `/media/{movies,cartoons,series,documentaries}/` 4. Обновляет `downloadDir` в Transmission через RPC **Расположение:** `/srv/.../docker/media-pipeline/sync.py` **Триггер:** `on-download-complete.sh` (смонтирован в Transmission как `/config/on-download-complete.sh:ro`) ## Transmission - **download-dir:** `/downloads` (без `complete`) - **incomplete-dir:** `/downloads/incomplete` - **Язык:** отключён auth для локальных - **RPC:** `localhost:9091` При перемещении файлов для уже завершённых торрентов: 1. Переименовать файл/папку под кейс торрента (Linux ext4 case-sensitive) 2. Вызвать `torrent-set-location` с `move=false` 3. Запустить торрент на сидирование ## Cron'ы на Kraken (crontab) ``` 0 * * * * bash ~/scripts/sync-vault.sh # Obsidian sync 0 * * * * pgs-to-srt.sh /media/downloads # PGS→SRT новые 0 3 * * * pgs-to-srt.sh /media # PGS→SRT вся библиотека 0 1 * * * bash ~/scripts/watchlist-nightly.sh # watchlist nightly 0 9 * * 0 bash ~/scripts/watchlist-discover.sh # watchlist discover */10 * * * * bash .../media-pipeline/media-router.sh # media router (Telegram) ``` ## API Keys | Service | API Key | |-------------|----------------------| | Radarr | `cbcb8ec3...` | | Sonarr | `15fbec32...` | | Prowlarr | `134ac38a...` | (Full keys truncated — retrieve from each service's settings page.) ## Ports (default Docker network) All services accessible at `kraken:`: | Service | Port | |--------------|------| | Radarr | 7878 | | Sonarr | 8989 | | Prowlarr | 9696 | | Transmission | 9091 | | Jellyfin | 8096 | ## Jellyfin библиотеки | Библиотека | Тип | Путь | |---|---|---| | Movies | movies | `/media/movies` | | Series | tvshows | `/media/series` | | Cartoons | movies | `/media/cartoons` | | Cartoon Series | tvshows | `/media/cartoons-series` | | Documentaries | movies | `/media/documentaries` | | Documentary Series | tvshows | `/media/documentaries-series` | > `movies-radarr` и `series-sonarr` НЕ добавлены в Jellyfin — router.py создаёт symlink'и из них в перечисленные пути. ## Известные проблемы - **17 фильмов в Radarr `hasFile=False`** — ждут подходящего релиза в Prowlarr. Scream (1996) в процессе загрузки. - **Prowlarr** — если долго не находит релизы, проверить статус индексеров (`/api/v1/health`). ## Notes - See [[arr-stack-taiga]] for Taiga (secondary) arr stack - Media pipeline pitfalls: [[media-pipeline-pitfalls]] - Синтез: [[concepts/kraken-media-stack]]