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

13 KiB
Raw Blame History

title, created, updated, type, namespace, tags, related
title created updated type namespace tags related
Arr Stack — Kraken 2026-05-23 2026-09-04 tech family
arr
radarr
sonarr
prowlarr
transmission
jellyfin
infra
kraken
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.shsync.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 doSILENT, ничего не шлёт
  • если созданы symlink'и или ошибка — отправляет отчёт в Telegram Kraken

Расположение: рядом с router.pymedia-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:<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 → причина в клиенте webOS, НЕ в сети/диске. Вживую при воспроизведении 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 ТВ чист (0 CRC / 0 retries за стрим, -53 dBm), все линки с запасом ×10+. Значит низкоуровневая причина — программный декодер/буфер «Jellyfin for WebOS 1.2.2» при Direct Play 4K HEVC 10-bit HDR, не инфраструктура. Вывод для стратегии качества: даже лёгкий 4K Direct Play не гарантирует плавности на этом ТВ-клиенте — вопрос не столько в remux, сколько в клиенте. Кандидаты фикса: настройки буфера/декодера клиента, DirectStream (ремукс), тянуть через HTPC/Kodi на HDMI, либо транскод аудио. Решение НЕ принято — продолжить в след. сессии.

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 и ниже
  • Корень «почему новые качаются в любой жир»: 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.pyradarr_add() (~стр 77) и sonarr_add() (~стр 112), обе "qualityProfileId": 1. Radarr POST /api/v3/movie c addOptions.searchForMovie:true; Sonarr POST /api/v3/series.
  • Как изменить «качество для новых фильмов» глобально: сменить зашитый qualityProfileId в arr.py на другой профиль (напр. id=5 Ultra-HD), ИЛИ создать профиль «2160p без Remux» и указать его. Это правка кода репо watchlist-sync на Кракене + профили в Radarr API. ⚠️ Алекс ещё НЕ утвердил направление (4K лёгкий vs 1080p, и нужно ли для сериалов). НЕ менять без явного ok.
  • ⚠️ Решение по стратегии качества (пользователь прошлые строки уточнял) НЕ принято — продолжить в след. сессии. Приоритет — разобраться, что делает webOS-клиент на Direct Play лёгкого 4K (см. «Известные проблемы»), т.к. если клиент виноват, смена профиля Radarr не решит подёргивание.

Реальный состав жирного 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 у webOS-клиента может подёргиваться — дело в клиенте, а не в размере файла.

Notes