Files
obsidian-vault/family/how-to/arr-stack-kraken.md
T

201 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: Arr Stack — Kraken
created: '2026-05-23'
updated: '2026-09-04'
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.)
## Качество загрузки для НОВЫХ фильмов/сериалов (2026-09-04)
`watchlist-sync` (автодобавление из watchlist) использует профиль **`WEB-4K (no remux)`** (Radarr id **7**, Sonarr id **7**) вместо бывшего `Any`/id=1.
Что разрешает профиль (в порядке предпочтения, кодированные, БЕЗ remux/BR-DISK):
- 2160p: HDTV / WEBDL / WEBRip / BluRay-2160p (кодир.)
- fallback 1080p: HDTV / WEBDL / WEBRip / BluRay-1080p (кодир.)
- fallback 720p: HDTV / WEBDL / WEBRip / BluRay-720p (кодир.)
- **Запрещены:** Remux-1080p, Remux-2160p, BR-DISK, Raw-HD, SDTV/DVD/480/576.
- cutoff = **Bluray-2160p (кодир.)**; upgrade выключен после скачивания.
**Где менять:** `watchlist-sync/watchlist_sync/arr.py` строки `qualityProfileId: 7` (radarr_add ~L77, sonarr_add ~L112). НЕ редактировать профили вручную иначе watchlist-sync надо обновить на новый id. Создать/править профиль «WEB-4K (no remux)» — Radarr/Sonarr → Settings → Quality Profiles.
## Ports (default Docker network)
All services accessible at `kraken:<port>`:
| 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`).
- **🔴 2026-09-04: 4K UHD Remux при Direct Play подтормаживает на ТВ (webOS).** Симптом у `Неистовый (Unhinged 2020)` — 60.9GB `...Remux.2160p.mkv` avg ~99 Мбит/с. После фикса eth0 Kraken → 1G (был 100M, см. [[kraken-network]]) торможение **сохранилось**. Подтверждено по логу Jellyfin `log_20260904.log`: сессия 10:18→10:28 «Jellyfin for WebOS 1.2.2», Stop at 400916ms (~6:40), **ни одной строки transcode → это Direct Play**, не CPU-рендер субтитров.
- **🔴🔴 2026-09-04 (вживую): тормозит Direct Play даже лёгкого 4K → пока шло по Wi-Fi, причина не сервер/диск.** В живом воспроизведении по Wi-Fi `Project Hail Mary (2026)` (`...2160p.iT.WEB-DL...mkv`, HEVC Main10 4K HDR10+, avg ~24.5-25.7 Мбит/с, 30.2GB, Direct Play) подёргивание было, при этом: транскода нет (0 ffmpeg, CPU Kraken load 0.1), сервер отдаёт всего ~21 Мбит/с, Wi-Fi ТВ «чист» по MAC-счётчикам (0 CRC/0 retries, -53 dBm), линки с запасом ×10+.
-**2026-09-04 РАЗРЕШЕНИЕ (проверено пользователем вживую):** после двух правок — (1) eth0 Kraken возвращён на **1G** (замена патч-корда) и (2) **ТВ переведён на проводной Ethernet** (100M downshift-линк) — и `Unhinged` (remux, ~89 Мбит/с), и `Project Hail Mary` (лёгкий 4K) **идут без тормозов**. Вывод: причиной были НЕ пропускная способность и НЕ декодер-клиента, а **нестабильный Wi-Fi-линк последней мили ТВ** (даже при чистых MAC-счётчиках — джиттер/переупорядочивание в зашумлённом эфире). Провод (даже 100M) стабильно отдаёт. Профиль `WEB-4K (no remux)` остаётся разумной страховкой, но не был обязательной причиной тормозов.
## Radarr Quality Profiles на Kraken (проверено 2026-09-04)
Via `http://kraken:7878/radarr/api/v3/qualityprofile` (X-Api-Key из config.xml; **UrlBase=`/radarr`**). Radarr v6.1.1.10360, Linuxserver image, net `docker_default`.
| id | Профиль | Разрешённые качества | Cutoff |
|----|---------|----------------------|--------|
| 1 | **Any** | весь диапазон CAM..BR-DISK, вкл. все 2160p | Remux-1080p |
| 2 | SD | до Bluray-576p | — |
| 3 | HD-720p | до Bluray-720p | — |
| 4 | HD-1080p | HDTV/Bluray/Remux-1080p | Bluray-1080p |
| 5 | **Ultra-HD** | HDTV/Bluray/**Remux-2160p** (BR-DISK не allowed) | **Remux-2160p** |
| 6 | HD-720p/1080p | 1080p и ниже | — |
| **7** | **WEB-4K (no remux)** ✅ создан | кодир. HDTV/WEB/BluRay **2160p+1080p+720p** | **Bluray-2160p (кодир.)** |
| 8 | (если появится из id авто-инкремента — перепроверить) | — | — |
Профиль id=7 разрешает код HDTV/WEBDL/WEBRip/BluRay в 2160/1080/720; **запрещает** Remux-1080p, Remux-2160p, BR-DISK, Raw-HD, SDTV/DVD/480/576. upgrade выключен. Sonarr: аналогичный профиль тоже id=7.
- **Корень «почему новые качаются в любой жир»:** `watchlist-sync` (который добавляет фильмы/сериалы из watchlist в Radarr/Sonarr) жёстко прописывает `"qualityProfileId": 1` (= профиль `Any`) в `arr.py`:
- Реальный путь репо: `/srv/dev-disk-by-uuid-6194539b-03e0-4f33-986b-4da09834e82f/watchlist-sync` (НЕ `~/Developer/watchlist-sync`, хотя симлинк `~/Developer/watchlist-sync``.../49e8.../watchlist-sync` есть; 49e8 — симлинк на 6194).
- `watchlist_sync/arr.py``radarr_add()` (~стр 77) и `sonarr_add()` (~стр 112), обе `"qualityProfileId": 1`. Radarr POST `/api/v3/movie` c `addOptions.searchForMovie:true`; Sonarr POST `/api/v3/series`.
- ✅ Решение принято и применено (см. выше): профиль `WEB-4K (no remux)` (Radarr/Sonarr id 7), fallback 1080→720, remux запрещён. Применено 2026-09-04.
-**2026-09-04: стратегия качества РЕШЕНА И ПРИМЕНЕНА.** Новые фильмы/сериалы (через watchlist-sync) добавляются с профилем **`WEB-4K (no remux)`** (Radarr id 7, Sonarr id 7) — см. секцию «Качество загрузки для НОВЫХ». Fallback: если нет 2160p-кодированного — 1080p → 720p; remux не берётся никогда. Было принято так (fallback=1080, если нет — 720). Существующие файлы НЕ трогаются.
### Реальный состав жирного remux (пример Unhinged, ffprobe 2026-09-04)
Важно для понимания «что даёт remux» перед выбором профиля. Файл `Неистовый.2020.UHD.Blu-Ray.Remux.2160p.mkv` = **60.9GB, 1:31:05, контейнер 89.17 Мбит/с средний**.
FFprobe потоки:
| idx | тип | кодек | каналы | язык / роль |
|----|-----|-------|--------|------|
| 0 | video | **HEVC Main10, 3840×2160, 24fps** | — | HDR10 (BT.2020, PQ smpte2084) |
| 1 | audio | AC3 | 5.1(side) 384k | rus «Dub, iTunes» |
| 2 | audio | **DTS-HD MA** | 7.1 | rus «Д. Есарев» |
| 3 | audio | **TrueHD** | 7.1 | eng |
| 4 | audio | AC3 | 5.1 640k | eng |
| 5 | audio | DTS | stereo 320k | eng Commentary (реж. Деррик Борте) |
| 6-8 | sub | SRT/SPU | — | rus / eng full / eng SDH |
Вывод: размер 60GB раздувает НЕ видео (HDR10 HEVC-часть типичная), а **множество звуковых дорожек (lossless DTS-HD MA + TrueHD) + аудиокомментарий**. «Что даёт remux» на бытовом ТВ: видео-выигрыш против аккуратного 4K-рипа почти незаметен с дивана; бонус реализуется только при lossless-прокачке звука (AVR/eARC). Если ТВ играет через собственные динамики/стерео или делает audio-transcode — плюс remux теряется, а вес/сеть/лаг остаются. Это аргумент за профиль «2160p без Remux» для бытового просмотра на webOS-TB.
### Бенчмарк WEB-4K (замерено по библиотеке Kraken, 2026-09-04)
«Поддерживаемое качество» для сравнения с жирным remux — это кодированные 2160p. Замер файлов с `WEB`+`2160` в имени в `/media`:
- Полнометражки (2ч): `Project Hail Mary` 28.1GB, `The Drama` 19.2GB, `The Crow` 17.4GB, `They Will Kill You` 17.2GB, `Кот в сапогах` 19.9GB → **range 1728GB, медиана ~19GB**.
- 45-50 мин эпизоды док-сериалов (`prehistoric.planet` s01): ~7.27.7GB каждый.
- Статсводка по всем 10 файлам: min 7.2 / median 12.5 / mean 13.9 / max 28.1 GB. Средний битрейт ~20–40 Мбит/с.
- **Практичный floor benchmark: «нормальная» копия 4K для этого ТВ ≈ 17–28GB/фильм** (в 2.53× меньше remux). ⚠️ ⚠️ Важно: подёргивание 4K Direct Play (и лёгкого, и remux) было вызвано Wi-Fi-линком последней мили ТВ — по проводу оба идут (см. «РАЗРЕШЕНИЕ» в «Известные проблемы»). Напротив клиента webOS не виноват.
## Notes
- See [[arr-stack-taiga]] for Taiga (secondary) arr stack
- Media pipeline pitfalls: [[media-pipeline-pitfalls]]
- Синтез: [[concepts/kraken-media-stack]]