8.4 KiB
created, updated, status, tags
| created | updated | status | tags | ||||||
|---|---|---|---|---|---|---|---|---|---|
| 2026-05-13 | 2026-05-14 | in-progress |
|
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)
Sync результаты (последний прогон)
| Категория | Папок | NFO | Статус |
|---|---|---|---|
| movies | 127 | 127 | ✅ 100% |
| series | 45 | 238 (эпизоды) | ✅ хорошо |
| cartoons | 126 | ~30 | ⚠️ советские не резолвятся |
| documentaries | 35 | ~5 | ⚠️ |
| Итого | 317 regions | 222 resolved | 70% |
Что работает
- ✅ Docker образ
media-pipeline:krakenзадеплоен (веткаkraken-agent) - ✅
syncкорректно вызывается (был баг: двойноеmedia-pipeline media-pipeline) - ✅ Кеш API-ответов: теперь
/config/cache(persistent), 30-дневный TTL - ✅ Фильмы: 127/127 NFO
- ✅ Сериалы: хорошо (Black Mirror, Queens Gambit, Good Omens и т.д.)
- ✅ Transmission download-complete hook установлен
- ✅
resolve-manualработает (форс-резолв по TMDb/KP ID)
Что не работает / в работе
- ⚠️ Советские мультики —
bremenskie.muzykanty,budilnik,ёжик в туманеи ~50 других не резолвятся автоматически. Legacy Go-код справлялся — нужно разобраться в чём разница - ⚠️ Часть Disney/Pixar в batch-режиме не проходят arbiter (Encanto, Lightyear, Inside Out) — одиночно через
resolve-manualработают - 🔲 Jellyfin библиотеки — не настроены
- 🔲 torrent-fix для 7 старых торрентов с путями
D:/Movies - 🔲 Hermes cron на Кракене
Исправленные баги
Баг 1: Двойной вызов binary (КРИТИЧЕСКИЙ)
Проблема: docker run ... media-pipeline:kraken media-pipeline sync — бинарь получал media-pipeline как первый аргумент = неизвестный subcommand → general help. Все прошлые dry-run не работали.
Фикс: ENTRYPOINT ["media-pipeline"] → правильный вызов docker run ... sync ...
Баг 2: TitleSimilarity — симметричный Jaccard
Проблема: encanto_2021_bdrip_by_dalemake vs Encanto: lengthRatio = 1/5 = 0.2 → confidence ≈ 0.05 → rejected. Noise-токены (bdrip, 1080p, год) убивали матч.
Фикс: Asymmetric scoring — когда query длиннее candidate, переключаемся на candidate-coverage Jaccard (покрытие кандидата запросом). lengthRatio = 1.0 когда query длиннее.
Коммит: 2704ce3
Баг 3: ProviderSearchStrategy.maxCallsPerRun = 8
Проблема: 8 API-вызовов на провайдер → 192 из 200 items никогда не искались.
Фикс: 8 → 500. Коммит 2704ce3
Баг 4: Series-гипотезы для одиночных файлов
Проблема: NumberedEpisodesHypothesisStrategy и NamedEpisodesHypothesisStrategy генерировали series-гипотезы для одиночных .avi/.mkv без S/E маркеров → TMDb искал по /search/tv вместо /search/movie.
Фикс: videos.count < 2 && !hasAnyEpisodeMarkers → return nil. Коммит 17c2ddc
Баг 5: HTTP кеш не персистился
Проблема: cacheDirectory = /usr/local/bin/cache внутри контейнера. docker run --rm → кеш удалялся при каждом запуске → тысячи дублирующих API запросов.
Фикс: Autodetect /config mount → /config/cache (persistent volume). Коммит 5a1053c
Следующий шаг: советские мультики
Задача: понять почему bremenskie.muzykanty, budilnik 1984, ёжик в тумане и ~50 других советских мультиков не резолвятся, хотя легаси Go-код справлялся.
Гипотезы:
- Транслитерация → KP не ищет по Latin
bremenskie→ нужна Cyrillic варианты в query - NameTokenization не генерирует качественную обратную транслит для советских названий
- KP API возвращает результаты, но TitleSimilarity не матчит (разные скрипты)
- TMDb
dualsearch поbremenskie muzykanty→ нет результатов → нужен только KP
Что делать:
- Проверить что именно возвращает KP для
bremenskie muzykanty - Проверить что variant'ы генерирует NameTokenization для этих файлов
- Если проблема в transliteration accuracy — починить в TitleSimilarity (cross-script fuzzy match)
Конфиг на Кракене
/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) |
Журнал
- 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. Кеш починен.