Files
obsidian-vault/family/projects/media-toolbox-kraken.md
T

9.4 KiB
Raw Blame History

created, updated, status, tags
created updated status tags
2026-05-13 2026-05-14 in-progress
kraken
media
jellyfin
transmission
swift
project

Media Toolbox на Кракене

Цель: полноценный медиасервер на Кракене (RPi 5) — перенос библиотеки с HTPC, автосортировка через media-pipeline (Swift), Jellyfin, торренты.


Архитектура (целевая)

HTPC (Bazzite 192.168.1.86)
  └── rsync → Kraken HDD /srv/.../media/

Kraken (RPi 5, 192.168.1.14)
  ├── /srv/dev-disk-by-uuid-49e8f586-3839-4c5d-a1e1-58bfc3579ade/media/
  │     ├── movies/          ← фильмы (127 папок)
  │     ├── cartoons/        ← мультфильмы (126 папок)
  │     ├── series/          ← сериалы (45 папок)
  │     ├── documentaries/   ← документальные (35 папок)
  │     └── downloads/complete ← Transmission
  ├── Docker: Transmission (128 торрентов, порт 9091)
  ├── Jellyfin native (порт 8096)
  └── Docker: media-pipeline:kraken (Swift CLI, arm64)

media-pipeline (~/Developer/media_files_db, ветка kraken-agent)
  ├── scan → resolve → apply (sync)
  ├── NFO-файлы для Jellyfin/Kodi
  ├── Transmission RPC для обновления путей
  └── unresolved.json — реестр нераспознанных

Текущий статус (2026-05-14, сессия 5)

Sync результаты

Категория Папок NFO Статус
movies 127 127 100%
series 45
cartoons 126 ~119 почти всё (8 через resolve-manual)
documentaries 35 ~27 ⚠️ 8 остались (см. ниже)

Что работает

  • Docker образ media-pipeline:kraken задеплоен (ветка kraken-agent)
  • Фильмы: 127/127 NFO
  • Сериалы: все resolved (Black Mirror, Ну погоди!, и др. — через resolve-manual)
  • Кеш API-ответов: /config/cache, 30-дневный TTL
  • Transmission download-complete hook установлен
  • resolve-manual работает для movie/series/single-file

Открытые задачи

1. 🔴 Web search path для документалок и специфичного контента

Принятое решение: ничто из библиотеки не должно оставаться в unresolved. Если TMDb/KP не находят — должен срабатывать web search (IMDb HTML scrape, Tier 4). Сейчас webSearch.enabled=true в config.json, но 8 документалок всё равно в unresolved.

8 оставшихся:

  • /media/cartoons/25е - первый день
  • /media/documentaries/bbc. the real jungle book bear 2012
  • /media/documentaries/bbc. секреты собак
  • /media/documentaries/penguin meet the family (2020)
  • /media/documentaries/бегемоты - жизнь в воде
  • /media/documentaries/гиганты моря 2011
  • /media/documentaries/таинственная жизнь собак (hdtvrip 720p, 2013)
  • /media/documentaries/тайная жизнь собак (2016г)

Что нужно сделать:

  • Запустить sync с --debug или отследить почему web search не помогает для этих item'ов
  • IMDbSearchProvider (Tier 4) должен находить BBC документалки по названию
  • Если IMDb тоже не находит — включить AIAgent (Tier 5) с OpenAI key, или добавить fallback: если все тиры вернули 0 кандидатов и папка содержит хотя бы один видеофайл → запускать web search по Google/IMDb с более агрессивными вариантами запроса
  • Цель: unresolved.json после sync = пустой

2. 🟡 torrent-fix для 7 старых торрентов с путями D:/Movies

  • Transmission хранит old paths D:/Movies/... — нужен torrent-fix subcommand

3. 🟡 Jellyfin библиотеки

  • Настроить библиотеки в Jellyfin (http://192.168.1.14:8096)
  • NFO файлы готовы, Jellyfin должен их подхватить

4. 🟢 Hermes cron на Кракене

  • Периодический запуск sync (новые загрузки через Transmission)

Принятые решения (архитектурные)

Решение Описание
Unresolved = 0 Цель — ничто из библиотеки не должно оставаться в unresolved после sync. Web search (Tier 4) и AI agent (Tier 5) — последние резервы перед тем как считать item нераспознанным
Web search enabled providers.webSearch.enabled=true в config.json. IMDb scrape как Tier 4 для всего, что не нашли TMDb/KP
Документалки приоритет KP BBC/Discovery документалки плохо индексированы в TMDb. KP часто знает их под русскими названиями. Стратегия: сначала KP с русским названием из папки, потом IMDb
resolve-manual Только для экстренных случаев, не как регулярный процесс
Single-file NFO Для .mkv/.m4v файлов NFO создаётся рядом (film.nfo), не внутри

Исправленные баги

Баг 1: Двойной вызов binary (КРИТИЧЕСКИЙ)

docker run ... media-pipeline:kraken media-pipeline sync → бинарь получал media-pipeline как аргумент. Фикс: ENTRYPOINT ["media-pipeline"]

Баг 2: TitleSimilarity — симметричный Jaccard

encanto_2021_bdrip_by_dalemake vs Encanto: lengthRatio=0.2 → rejected. Фикс: Asymmetric scoring — candidate-coverage Jaccard когда query длиннее. Коммит 2704ce3

Баг 3: maxCallsPerRun = 8

8 API-вызовов → 192/200 items никогда не искались. Фикс: 8 → 500. Коммит 2704ce3

Баг 4: Series-гипотезы для одиночных файлов

Одиночные .avi/.mkv без S/E маркеров получали series-гипотезу → TMDb искал по /search/tv. Фикс: videos.count < 2 && !hasAnyEpisodeMarkers → return nil. Коммит 17c2ddc

Баг 5: HTTP кеш не персистился

cacheDirectory = /usr/local/bin/cache — удалялся при docker run --rm. Фикс: Autodetect /config mount → /config/cache. Коммит 5a1053c

Баг 6: resolve-manual NFO path для single-файлов

resolve-manual писал NFO внутрь файла вместо рядом. Фикс: Detect isDirectory, для файлов → deletingPathExtension().appendingPathExtension("nfo"). Коммит c0fdc59


Конфиг на Кракене

/srv/dev-disk-by-uuid-49e8f586-3839-4c5d-a1e1-58bfc3579ade/docker/media-pipeline/
├── config.json          ← TMDb/KP ключи, Transmission RPC, directories
├── unresolved.json      ← реестр нераспознанных (создаётся автоматически)
├── cache/               ← HTTP кеш 30 дней
└── on-download-complete.sh

Запуск sync:

docker run --rm \
  -v /srv/.../media:/media \
  -v /srv/.../docker/media-pipeline:/config \
  media-pipeline:kraken \
  sync --config /config/config.json

Force-resolve одного item:

docker run --rm ... media-pipeline:kraken \
  resolve-manual --config /config/config.json \
  --media-path '/media/cartoons/bremenskie.muzykanty' \
  --tmdb 14327

Технические детали

HTPC bazzite@192.168.1.86, Data: /run/media/bazzite/Data/, WoL: B0:6E:BF:60:6D:64
Кракен kraken@192.168.1.14, HDD: /srv/dev-disk-by-uuid-49e8f586-3839-4c5d-a1e1-58bfc3579ade/
Jellyfin http://192.168.1.14:8096
Transmission http://192.168.1.14:9091
Исходники ~/Developer/media_files_db/, ветка kraken-agent
Docker образ media-pipeline:kraken (arm64, Colima 24GB)
kraken-ssh ssh kraken-ssh → 10.99.1.2:22 через WireGuard (обновлено 2026-05-14)

Журнал

  • 2026-05-13 сессия 1: HTPC разбужен, rsync запущен (~1.3TB), торрент-база импортирована (128 торрентов)
  • 2026-05-13 сессия 2: Docker build arm64, deploy на Кракен, first sync
  • 2026-05-13 сессия 3: kraken-agent ветка: UnresolvedStore, resolve-manual, agent, torrent-fix subcommands
  • 2026-05-14 сессия 4: 5 системных багов исправлены. Sync: 222/317 resolved (70%).
  • 2026-05-14 сессия 5: resolve-manual для 13 items (movies/cartoons/series/documentaries). unresolved: 24 → 8. Исправлен баг NFO path для single-файлов. kraken-ssh переключён на WireGuard.