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