--- title: Kraken Media Server — Full Stack namespace: work created: '2026-05-18' updated: '2026-05-20' last_synced: '2026-05-20' type: concept tags: - kraken - media-pipeline - infra - synthesis confidence: 0.9 --- # Kraken Media Server — Full Stack Синтез: полная карта медиа-стека на Кракене (RPi5). Объединяет [[tech/kraken-network]], [[tech/media-pipeline-pitfalls]], [[tech/htpc-steam-emulators]]. ## Архитектурный обзор Два параллельных конвейера для медиа-контента: ### Конвейер 1 — media-pipeline (Swift, ручной импорт HTPC→Kraken) ``` HTPC (rsync) → /media/{movies,cartoons,series,documentaries}/ → media-pipeline:kraken (Docker) → scan → resolve → apply → /media/library/{movies,cartoons,series}/ (canonical + NFO) → Jellyfin ``` - Resolve: TMDb (Tier 1) → KP (Tier 2) → IMDb scrape (Tier 3) → web search (Tier 4) - Классификация по жанрам провайдера (Animation→cartoons, Documentary→documentaries), никогда по пути - `unresolved.json` — очередь нераспознанных (13 items на 2026-05-16, все genuine absences) ### Конвейер 2 — *arr stack (новые скачки через Radarr/Sonarr) ``` Prowlarr (RuTracker) → Radarr (7878) / Sonarr (8989) → Transmission (9091) → /media/movies-radarr, /media/series-sonarr → Jellyfin ``` - Раздельные root folder'ы (`movies-radarr`, `series-sonarr`) — не конфликтуют с media-pipeline library - Jellyfin читает оба пути для Movies и Series ## Сервисы и порты | Сервис | Порт | Данные | |--------|------|--------| | Jellyfin | 8096 | `/media/library/` + `/media/movies-radarr` + `/media/series-sonarr` | | Transmission | 9091 | `/media/downloads/complete` | | Radarr | 7878 | root: `/media/movies-radarr` | | Sonarr | 8989 | root: `/media/series-sonarr` | | Prowlarr | 9696 | индексер: RuTracker | | media-pipeline | — | Docker run, не compose; config: `~/docker/media-pipeline/` | | Hermes (Kraken) | — | Docker container, skills: `~/.hermes/skills/` | ## Ключевые питфоллы (пережитые) 1. **HDD read-only под нагрузкой** — rsync + ffmpeg transcode одновременно → Sense Key 0x4, ext4 remount-ro. Фикс: ребут → fsck → `docker compose up -d` (2026-05-18) 2. **`docker save | ssh` зависает** — через WireGuard tunnel. Фикс: `docker save -o /tmp/` + `scp` + `docker load` раздельно 3. **curl отсутствует в Hermes-контейнере** — скиллы с curl-командами не работают из контейнера. Навигация: хостовый Hermes vs container Hermes 4. **Pi-hole DNS hijack** → Sonarr/Radarr 503. Фикс: whitelist или прямые IP 5. **Skills path**: `~/.hermes/skills/` (хост) ≠ `/opt/data/skills/` (контейнер) 6. **KP API domain** переехал на `api.poiskkino.dev` (был `api.kinopoisk.dev`) 7. **providers block в config.json** — если не указан явно, все провайдеры disabled → 213 skipped вместо 278 applied ## Статус (2026-05-18) - ✅ media-pipeline: 402/402 тестов, 13 unresolved (genuine absences в KP/TMDb) - ✅ *arr stack: Prowlarr+Radarr+Sonarr+Transmission+Jellyfin — работают - ✅ Hermes на Кракене: docker container, скиллы `download-media` + `arr-media-stack-setup` - ⏳ Трекер-парсеры (Steps D-F): audio/non-video scanner, fixture тесты для rutor/nnm-club - ⏳ Transmission torrent-fix: 271/293 файлов без привязки после pipeline apply ## Watchlist Automation (обновлено 2026-05-20) Два cron-job'а на Eagle — автоматическое пополнение очереди просмотра: | Job | Расписание | Действие | |-----|----------|---------| | `watchlist-resolve` (`16438138c8c5`) | ежедн. 09:00 | SSH на Кракен → `watchlist-sync resolve` → commit | | `watchlist-sync-down` (`7d12b6d48786`) | ежедн. 10:00 | `process-thumbs --apply` → `sync-down --apply` → добавить в Radarr/Sonarr | | `watchlist-discover` (`6aba6979b8c4`) | вс 09:00 | KP API топ новинок → добавить в секцию "Новинки 👍/👎" | Python-сервис `~/Developer/watchlist-sync`: - **parse** → `[ ]`/`[x]`/`👍`/`👎` статусы из .md - **resolve** → TMDB + KP API → ID + тип (movie/tv) - **discover** → KP API топ фильмов 2024-2025 (IMDb≥7.0 или KP≥7.0) → секция "Новинки" - **sync-down** → добавить `👍` в Radarr/Sonarr батчами по 5 - **sync-up** → Jellyfin watched history → `[x]` в .md ## Router Script — Жанровая маршрутизация `router.py` — запускается из Sonarr/Radarr Custom Script при импорте. Читает жанры из NFO (или TMDb API) и создаёт symlink в нужную тематическую библиотеку Jellyfin: ``` movies-radarr/ → Animation + !R/18+ → /media/cartoons/ movies-radarr/ → Documentary → /media/documentaries/ movies-radarr/ → прочее → /media/movies/ series-sonarr/ → аналогично для series/cartoons-series/documentaries-series/ ``` Запуск: `python3 /srv/.../docker/media-pipeline/router.py [--apply]` ## Jellyfin библиотеки (актуально 2026-05-20) | Библиотека | Тип | Пути | |---|---|---| | 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 script создаёт symlinks. Kraken-Hermes в контейнере (`hermes-kraken`) доступен через Zulip. Скачать медиа: - Сериал → Sonarr API → Transmission - Фильм → Radarr API → Transmission - Только через curl (python3 запрещён в скилле) ## See Also - [[concepts/watchlist-automation]] — полный flow watchlist → Radarr/Sonarr → Jellyfin - [[tech/arr-stack-kraken]] — *arr stack pitfalls: nginx, DNS, grab limits - [[tech/jellyfin-transcode-rpi5]] — Jellyfin PGS/ASS subtitle pitfalls on RPi5 - [[tech/hermes-docker-kraken]] — Hermes Docker на Кракене