Files
obsidian-vault/wiki/concepts/kraken-media-stack.md
T

133 lines
6.7 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: 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 на Кракене