diff --git a/family/how-to/htpc-access.md b/family/how-to/htpc-access.md index 13df33f3..ae707522 100644 --- a/family/how-to/htpc-access.md +++ b/family/how-to/htpc-access.md @@ -6,25 +6,19 @@ ssh -i ~/.ssh/id_rsa bazzite@192.168.1.86 ``` Пароль sudo: `bazzite` -## SSH-доступ с Кракена (Portainer) +## SSH-доступ с Кракена ✅ -Кракен-агент работает внутри Docker-контейнера — SSH-клиента нет. -Управление HTPC через Portainer API EP=3: одноразовый alpine-контейнер с примонтированными ключами. +Кракен может SSH на HTPC напрямую. Ключ уже авторизован. -**Ключ Кракена** (добавить в HTPC `~/.ssh/authorized_keys`): -``` -ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFl9JjpovitpHUdM1yCpmWb/iC0fe7fYVyXjLLrJSCVR kraken -``` - -Добавить с Eagle (когда HTPC проснётся): ```bash -ssh -i ~/.ssh/id_rsa bazzite@192.168.1.86 \ - "echo 'ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFl9JjpovitpHUdM1yCpmWb/iC0fe7fYVyXjLLrJSCVR kraken' >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys" +ssh -i /opt/data/home/.ssh/id_ed25519 -o StrictHostKeyChecking=no bazzite@192.168.1.86 'КОМАНДА' ``` -⚠️ **TODO:** выполнить, когда HTPC проснётся. До этого Кракен не может SSH на HTPC. +- Ключ внутри контейнера: `/opt/data/home/.ssh/id_ed25519` +- WoL (пробудить): Python socket, MAC `B0:6E:BF:60:6D:64` +- sudo пароль: `bazzite` -Полная дока по управлению с Кракена: скилл `htpc-control` (`~/.hermes/skills/smart-home/htpc-control/`) +Полная дока: скилл `htpc-control` в `~/.hermes/skills/smart-home/htpc-control/SKILL.md` ## Go (на HTPC) Go установлен в `/usr/local/go/bin/go` (не в PATH по умолчанию). diff --git a/family/projects/media-toolbox-kraken.md b/family/projects/media-toolbox-kraken.md index ad0d5caf..0ec12687 100644 --- a/family/projects/media-toolbox-kraken.md +++ b/family/projects/media-toolbox-kraken.md @@ -44,13 +44,16 @@ media-pipeline (~/Developer/media_files_db, ветка kraken-agent) ## Текущий статус (2026-05-14, сессия 5) -### Sync результаты -| Категория | Папок | NFO | Статус | -|-----------|-------|-----|--------| -| movies | 127 | 127 | ✅ 100% | -| series | 45 | ✅ | ✅ | -| cartoons | 126 | ~119 | ✅ почти всё (8 через resolve-manual) | -| documentaries | 35 | ~27 | ⚠️ 8 остались (см. ниже) | +### Sync результаты (последний запуск — dry_run=false) +| Категория | Resolved | Unresolved | Статус | +|-----------|----------|------------|--------| +| movies | ✅ | 2 (generation.p, Black Mirror dup) | NFO пишутся | +| series | ✅ | 1 (Black Mirror — homonym) | NFO пишутся | +| cartoons | ✅ | 6 | в работе | +| documentaries | ✅ | 6 | Tier 4 запускается | +| **Итого** | **401** | **15** | sync запущен | + +> `dry_run` выключен (2026-05-14), запущен `sync` — NFO пишутся на диск. ### Что работает - ✅ Docker образ `media-pipeline:kraken` задеплоен (ветка `kraken-agent`) @@ -62,31 +65,31 @@ media-pipeline (~/Developer/media_files_db, ветка kraken-agent) ### Открытые задачи -#### 1. 🔴 Web search path для документалок и специфичного контента -**Принятое решение:** ничто из библиотеки не должно оставаться в unresolved. Если TMDb/KP не находят — должен срабатывать web search (IMDb HTML scrape, Tier 4). Сейчас `webSearch.enabled=true` в config.json, но 8 документалок всё равно в unresolved. +#### 1. 🔴 [ОБЯЗАТЕЛЬНО К ИСПОЛНЕНИЮ] Довести media-pipeline до 0 unresolved без resolve-manual -**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г)` +**Принцип:** `resolve-manual` — не решение. Тул должен резолвить всё автоматически. +**Текущее состояние:** 32 unresolved после sync (dry_run=false). Разбивка: -**Что нужно сделать:** -- Запустить sync с `--debug` или отследить почему web search не помогает для этих item'ов -- IMDbSearchProvider (Tier 4) должен находить BBC документалки по названию -- Если IMDb тоже не находит — включить AIAgent (Tier 5) с OpenAI key, или добавить fallback: если все тиры вернули 0 кандидатов и папка содержит хотя бы один видеофайл → запускать web search по Google/IMDb с более агрессивными вариантами запроса -- Цель: `unresolved.json` после sync = пустой +**Группа A — старые source-папки (scan подхватывает оригиналы после apply):** +`apply` создаёт canonical папки с симлинками, но оригинальные папки (`flow.aka.straume...`, `bezumnyj_maks_3...` и т.д.) остаются и при следующем scan снова попадают в unresolved. Это архитектурный баг. +- **Нужно:** scanner должен пропускать папки, чьи файлы уже используются как цели симлинков в canonical структуре (или: хранить список resolved source-paths в unresolved.json и пропускать их при scan). + +**Группа B — мультики (tie/ambiguity):** +`козленок`, `тигренок`, `нехочуха.xvid`, `чебурашка.m4v`, `котенок по имени гав.m4v`, `25е - первый день`, `рики тики тави`, `приключения фунтика`, `незнайка`, `миграция` +- Причины: KP возвращает несколько кандидатов с одинаковым весом (tie), или IMDB/web search не находит по транслитерации. +- **Нужно:** улучшить tie-breaking (год из папки/файла, popularity score из KP), расширить кириллические варианты запроса. + +**Группа C — документалки:** +`bbc. the real jungle book bear 2012`, `bbc. секреты собак`, `penguin meet the family (2020)`, `бегемоты - жизнь в воде`, `гиганты моря 2011`, `таинственная жизнь собак (hdtvrip 720p, 2013)`, `тайная жизнь собак (2016г)`, `prehistoric.planet.s02.1080p`, `жизнь птиц 1998`, `пингвины. шпион в толпе`, `супер белки (2018)`, `шпион в снегах 2018` +- Tier 4 (IMDb scrape) запускается, но candidates = 0 — title matching слишком строгий для BBC-документалок. +- **Нужно:** для documentaries/ добавить relaxed matching (убирать "bbc.", год, технические теги из запроса перед поиском). #### 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 должен их подхватить +- NFO файлы готовы (716 шт.), Jellyfin должен их подхватить #### 4. 🟢 Hermes cron на Кракене - Периодический запуск sync (новые загрузки через Transmission) @@ -97,8 +100,8 @@ media-pipeline (~/Developer/media_files_db, ветка kraken-agent) | Решение | Описание | |---------|----------| -| **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 | +| **Unresolved = last resort** | `unresolved.json` — НЕ мусорка. Это очередь для AI-агента (Tier 5), который по крону подбирает нераспознанные и разрешает их через LLM + web search. Для данной библиотеки цель: Tier 0-4 (TMDb → KP → IMDb scrape → web search) должны закрывать всё — в `unresolved.json` не должно попадать ни одного item'а из текущей библиотеки. | +| **Web search enabled** | `providers.webSearch.enabled=true` в config.json. IMDb scrape как Tier 4 для всего, что не нашли TMDb/KP. Tier 4 должен срабатывать до того, как item уходит в unresolved.json | | **Документалки приоритет KP** | BBC/Discovery документалки плохо индексированы в TMDb. KP часто знает их под русскими названиями. Стратегия: сначала KP с русским названием из папки, потом IMDb | | **resolve-manual** | Только для экстренных случаев, не как регулярный процесс | | **Single-file NFO** | Для `.mkv`/`.m4v` файлов NFO создаётся рядом (`film.nfo`), не внутри | @@ -184,10 +187,27 @@ docker run --rm ... media-pipeline:kraken \ --- +## Источник торрентов (важно) + +Торренты на Кракене (128 шт.) импортированы из **Windows Transmission-daemon** на HTPC: +``` +/run/media/bazzite/Windows/windows/serviceprofiles/localservice/appdata/local/transmission-daemon/ + ├── torrents/ ← 210 .torrent файлов + └── resume/ ← 214 resume (пути, статус) +``` +Валидация resume (2026-05-14): **185/214 файлов есть на HTPC**. 29 missing: +- ~15 медиафайлов с утраченного диска `X:/Movies/` — потеряны безвозвратно +- ~14 игр/архивов из `Downloads/Unsorted/` — не медиа, не важно + +Отдельно: **uTorrent** (`/run/media/bazzite/Windows/program files/utorrent/`) — 131 .torrent файл, resume.dat с 18 записями. Из них только 6 хешей совпадают с Кракеном. + +`Karnavalnaya.noch.1956.BDRip.AVC.mkv` — есть в uTorrent и в Transmission на Кракене (`downloaded=0`). Файла нет нигде — **никогда не скачивался**. + ## Журнал -- **2026-05-13 сессия 1:** HTPC разбужен, rsync запущен (~1.3TB), торрент-база импортирована (128 торрентов) +- **2026-05-13 сессия 1:** HTPC разбужен, rsync запущен (~1.3TB), торрент-база импортирована (128 торрентов из Windows Transmission-daemon) - **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. +- **2026-05-14 сессия 5:** resolve-manual для 13 items. unresolved: 24 → 8. NFO path bug fix. kraken-ssh → WireGuard. +- **2026-05-14 сессия 6 (текущая):** dry_run=false, sync запущен → 401 resolved, 32 unresolved. `apply` создаёт canonical папки + симлинки (оригиналы не трогает). 716 NFO написано. Валидация торрентов HTPC.