From 159a805ce9e3f0b22db09c29b8c48d09fc48debc Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Tue, 22 Sep 2026 20:46:48 +0600 Subject: [PATCH] [2026-09-22] eagle: family/documents/movies-watchlist.md personal/plans/kraken-media-inventory-cleanup.md personal/tech/lampac-deployment.md --- family/documents/movies-watchlist.md | 10 +++- .../plans/kraken-media-inventory-cleanup.md | 50 +++++++++++++++-- personal/tech/lampac-deployment.md | 55 ++++++++++++++++--- 3 files changed, 100 insertions(+), 15 deletions(-) diff --git a/family/documents/movies-watchlist.md b/family/documents/movies-watchlist.md index 05489b93..3f50368c 100644 --- a/family/documents/movies-watchlist.md +++ b/family/documents/movies-watchlist.md @@ -310,7 +310,7 @@ related: - [ ] Рок-н-ролла - [ ] ⬇️ Гладиатор - [ ] ⬇️Афера Томаса Крауна - - [ ] Даун Хаус + - [x] Даун Хаус - [ ] Айболит 66 - [ ] 300 - [ ] Одиссей @@ -449,6 +449,8 @@ related: - [ ] ⬇️All the president's men - [ ] Butch Cassidy - [ ] 🧟‍♀️ 28 дней спустя + - [ ] against the ice 2022 + - [ ] Race for Glory Audi vs Lancia - [x] A clockwork Orange - [ ] Left behind - Оставленные (2014) ★4.3 @@ -528,7 +530,7 @@ related: - [x] Объяснялкины - [x] Killers of the flower moon - [x] Creator - - [x] Кибердеревня + - [ ] Кибердеревня - [x] Mario - [x] Шерлок Холмс СССР - [x] Призраки в Венеции @@ -651,6 +653,10 @@ related: - [ ] Despicable me 4 - [ ] Inside Out 2 - [ ] ⬇️ Le Grand Mechant Renard et Autres Contes +- [ ] lightyear 2022 +- [ ] Corpse Bride 2005 +- [ ] inside out 2015 +- [ ] Elemental 2023 ## Аниме - [ ] Акира diff --git a/personal/plans/kraken-media-inventory-cleanup.md b/personal/plans/kraken-media-inventory-cleanup.md index 6bd65595..95851271 100644 --- a/personal/plans/kraken-media-inventory-cleanup.md +++ b/personal/plans/kraken-media-inventory-cleanup.md @@ -22,15 +22,47 @@ updated: '2026-09-22' > Составлен 2026-09-22. Alex: «вообще все. нужна полная инвентаризация что можно сносить, а что нельзя». > Итог: **802 файла, 233 позиции, 1 236 ГБ.** В watchlist (Lampa покажет) — 29 позиций / 456 ГБ. > Не в watchlist — 204 позиции / 780 ГБ. **Точных дублей — 46 групп, зря занято 89,2 ГБ.** +> +> 🔴 **Цифры watchlist-матча ЗАНИЖЕНЫ — требует пересчёта.** Alex поймал 4 позиции, +> ошибочно записанные в «не в watchlist», хотя они В watchlist (см. раздел «Матч»). + +## 🔴 Ошибка матча (найдена Alex'ом 2026-09-22) + +Первый прогон сравнивал имя файла **только с русским `name`** watchlist-позиции. +Файлы, названные по **оригиналу**, не находились. Промахи: + +| Файл на диске | ГБ | В watchlist | Русское `name` | TMDB | +|---|---|---|---|---| +| `Bram.Stoker's Dracula.1992` | 18.04 | ✅ | «Дракула» | 6114 | +| `The.Crow.1994` | 17.45 | ✅ | «Ворон» | 9495 | +| `despicable.me.4.2024` | 2.18 | ✅ | «Гадкий я 4» | 519182 | +| `Вивариум_2019_BDRip` | 1.46 | ✅ | «Вивариум» | 458305 | + +**27,3 ГБ записано как «не в watchlist» ошибочно — эти 4 сносить НЕЛЬЗЯ.** + +Правильно матчить против **обоих** полей (`name` И `original`) + **год ±1**. +Год обязателен: в watchlist «Дракула» стоит трижды (1992 / 2014 / 2025), а +`inside out (2015)` ложно матчится с «Головоломка 2» (2024) — разные фильмы. + +⚠️ `Oldboy` (28.65 ГБ) и `Project Hail Mary` (28.12 ГБ) — **проверены отдельно, +их в watchlist правда НЕТ** (0 совпадений по обоим запросам в `watchlist.json`). +Они в Radarr, но в список не занесены. Это не ошибка матча. + +Полный список перепроверки: `/Users/admin/kraken-missed-matches.json`. +Скрипты: `/tmp/kraken_fix2.py` (фразовое равенство по `original` + год), +`/tmp/kraken_why.py` (проверка конкретных тайтлов). ## Метод 1. `find` по `/srv/...6194539b.../media` → 802 видеофайла с размерами. 2. Группировка в «позиции»: папка первого уровня + подпапка; файлы в корне — каждая своя позиция; `downloads/*` — по полному пути папки-раздачи (сезонные паки). -3. Сверка с `watchlist.json` (376 позиций) — **строгое равенство** нормализованных названий - (убраны год, качество, релиз-группа, расширение, транслит-шум). Подстрочный матч давал ложные - срабатывания: единственный файл 1.46 ГБ «Вивариум» склеивался в группу на 135 ГБ. +3. Сверка с `watchlist.json` (376 позиций). Первый прогон — строгое равенство по русскому + `name` (убраны год, качество, релиз-группа, расширение, транслит-шум). Подстрочный матч + давал ложные срабатывания: единственный файл 1.46 ГБ «Вивариум» склеивался в группу на 135 ГБ. + ⚠️ **Строгое равенство по `name` тоже неполно** — пропускает файлы, названные по оригиналу. + Проверять против `name` И `original`, со сверкой года. Детали и промахи — в разделе + «Ошибка матча» выше. 4. TMDB-ID брался из `href` вида `https://www.themoviedb.org/movie/NNN` — в `watchlist.json` его отдельным полем нет. @@ -114,6 +146,11 @@ updated: '2026-09-22' | Death.on.the.Nile.2022.HDRip | `movies` | 1 | 1.46 | 505026 | Смерть на Ниле | | гладиатор | `movies` | 1 | 0.22 | 98 | Гладиатор | +🔴 **Список НЕПОЛНЫЙ — минимум 4 позиции пропущены матчем** (перечислены в разделе +«Ошибка матча»): `Bram.Stoker's Dracula.1992` (18.04), `The.Crow.1994` (17.45), +`despicable.me.4.2024` (2.18), `Вивариум_2019` (1.46). Итого реально в watchlist +**≥33 позиции / ≥483 ГБ**. После пересчёта таблицу заменить. + ⚠️ **«смешарики webrip 1080p»** — 210 файлов в одной папке. Это сборник; совпадения с watchlist (TMDB 107/402) — артефакт нормализации по отдельным файлам, не реальный матч. Разобрать отдельно, если позиция пойдёт под нож. @@ -148,8 +185,8 @@ updated: '2026-09-22' | маленькие гиганты 2014 | `documentaries` | 20.57 | | | кот в сапогах 2011 | `cartoons` | 19.92 | | | the secret life of elephants | `documentaries-series` | 19.90 | доксериал | -| Bram.Stoker's Dracula.1992 | `movies` | 18.04 | | -| The.Crow.1994 | `movies` | 17.45 | | +| ~~Bram.Stoker's Dracula.1992~~ | `movies` | 18.04 | 🔴 **В WATCHLIST** — «Дракула» 1992, TMDB 6114 | +| ~~The.Crow.1994~~ | `movies` | 17.45 | 🔴 **В WATCHLIST** — «Ворон», TMDB 9495 | | гиганты моря 2011 | `documentaries-series` | 16.40 | доксериал | | tiger spy in the jungle s01 | `documentaries-series` | 16.30 | доксериал | | it was just an accident | `movies` | 12.78 | | @@ -179,9 +216,10 @@ updated: '2026-09-22' - [x] Шаг 1 — выгрузка списка (802 файла) - [x] Шаг 2 — группировка (233 позиции) -- [x] Шаг 3 — сверка с watchlist (29 в списке / 204 нет) +- [x] Шаг 3 — сверка с watchlist (29 в списке / 204 нет) — ⚠️ **ЦИФРА НЕВЕРНА, см. «Ошибка матча»** - [x] Шаг 4 — `missing.json`: **0 совпадений** среди файлов (те 30 позиций — рукописные заметки) - [x] Шаг 5 — таблица (этот документ) +- [ ] Шаг 5b — **пересчёт матча** по правилу `name` + `original` + год ±1 (ждёт решения Alex по допуску года) - [ ] Шаг 6 — удаление (ждёт решения) ## Документация разложена diff --git a/personal/tech/lampac-deployment.md b/personal/tech/lampac-deployment.md index 1a5afe91..1d5fe4da 100644 --- a/personal/tech/lampac-deployment.md +++ b/personal/tech/lampac-deployment.md @@ -3328,24 +3328,56 @@ if top == "downloads" and len(dirs) >= 3 and dirs[0] == "complete": return (top, dirs[0]) if dirs else (top, r["file"]) ``` -### 🔴 Матч с watchlist — только СТРОГОЕ равенство +### 🔴 Матч с watchlist — строгое равенство НЕДОСТАТОЧНО (исправлено 2026-09-22) Подстрочный матч (`c in e["name"]`) даёт мусор: короткие нормализованные строки вроде `гладиатор` совпадают со множеством позиций, счётчик «в watchlist» раздувается -до неверного. Рабочее правило: +до неверного. Порядок эффекта: наивный подстрочный матч → 42 позиции / 811 ГБ; +строгий → 29 позиций / 456 ГБ. -```python -if c == e["n"] or (e["o"] and c == e["o"]): # точное равенство, len(c) >= 4 +⚠️ **Но и строгое равенство по русскому `name` — тоже неверно, и это отдельная ошибка.** +Первый прогон сравнивал имя файла только с русским `name` watchlist-позиции. Файлы, +названные по **оригиналу**, не находились. Alex поймал это на трёх тайтлах: + +| Файл на диске | В watchlist | Русское `name` | +|---|---|---| +| `Bram.Stoker's Dracula.1992` | ✅ TMDB 6114 | «Дракула» | +| `The.Crow.1994` | ✅ TMDB 9495 | «Ворон» | +| `despicable.me.4.2024` | ✅ TMDB 519182 | «Гадкий я 4» | +| `Вивариум_2019_BDRip` | ✅ TMDB 458305 | «Вивариум» | + +🔴 **Матчить надо против ОБОИХ полей — `name` И `original` — и с проверкой года.** +Структура позиции watchlist: + +```json +{"name": "Ворон", "original": "The Crow", "year": 1994, + "href": "https://www.themoviedb.org/movie/9495"} ``` -Порядок эффекта: наивный подстрочный матч → 42 позиции / 811 ГБ «в watchlist»; -строгий → 29 позиций / 456 ГБ. Разница — целиком ложные срабатывания. +Рабочее правило: извлечь латинскую фразу из имени файла (`latin_phrase` — длиннейший +прогон `[a-z0-9']`-слов после нормализации) и сравнить с `original`; отдельно сравнить +нормализованное имя с `name`. **Обязательно сверять год ±1** — иначе `inside out (2015)` +ложно матчится с «Головоломка 2» (2024): разные фильмы. В watchlist один и тот же +русский `name` может стоять у трёх разных фильмов («Дракула» = 1992 / 2014 / 2025) — +год единственный различитель. + +⚠️ **Токенный матч по пересечению слов тоже гадит** и как метод не годится: +«пингвины. шпион в толпе» → «Шпион» (Spy, 2015), «the secret life of elephants» → +«Список заветных желаний». Использовать только фразовое равенство + год. **Нормализация** (обе стороны сравнения, обязательна): снять расширение → `[...]` → `(...)` → год → не-буквы → шум-слова (качество, релиз-группа, `web-dl`, `bdrip`, `x264`, `megapeer`, `bluebird`, `hdrezka`, транслит-хвосты) → сжать пробелы. Для сериалов дополнительно `strip_ep`: `S01E04`, `N серия`, `N выпуск`, `сезон N`. +⚠️ **Год из имени файла снимается при нормализации** — его надо вытаскивать +ОТДЕЛЬНО (`year_of()`) из исходной строки, иначе сверять нечего. + +🔴 **Цифры «29 / 456 ГБ» в этом документе и в плане ЗАНИЖЕНЫ** — матч по одному +русскому `name` пропустил минимум 4 позиции (27.3 ГБ), которые на самом деле в +watchlist. Пересчёт по правилу «name + original + год ±1» — **следующий шаг**, ждёт +от Alex решения по допуску года. + 🔴 **TMDB-ID в `watchlist.json` отдельным полем НЕ лежит.** Он в `href`: `https://www.themoviedb.org/movie/424781` → `re.search(r"/(\d{2,9})/?$", href)`. Попытка читать `item["tmdb_id"]` даёт `null` по всем 376 позициям. @@ -3379,9 +3411,18 @@ if c == e["n"] or (e["o"] and c == e["o"]): # точное равенство, 1. **`downloads/complete` (78.6 ГБ)** — нулевой риск, всё есть в библиотеке. 2. **Дубли `Life Is Beautiful`** — оставить одну из трёх копий. 3. **`documentaries*` вне watchlist (307 ГБ)** — доксериалы, нужен просмотр глазами. -4. **Всё не из watchlist (780 ГБ)** — включает `Oldboy`, `Project Hail Mary`, `F1`, +4. **Всё не из watchlist (780 ГБ)** — включает `Oldboy`, `Project Hail Mary`, `The Cyberfarm`, `Brassic` — возможно нужное. +⚠️ **Список «не в watchlist» требует пересчёта перед удалением.** Матч по одному +русскому `name` пропустил минимум 4 позиции (27.3 ГБ), которые в watchlist ЕСТЬ: +`Bram.Stoker's Dracula.1992` (18.04 ГБ), `The.Crow.1994` (17.45 ГБ), +`despicable.me.4.2024` (2.18 ГБ), `Вивариум_2019` (1.46 ГБ). +**Эти 4 — сносить НЕЛЬЗЯ**, в текущем списке они помечены ошибочно. +`Oldboy` и `Project Hail Mary` проверены отдельно поиском по `watchlist.json` — +их там правда нет (0 совпадений по «Oldboy», 0 по «Hail Mary»); они в Radarr, +но не в watchlist. + ## ⏳ Осталось добить (2026-09-22) ### 0. 🔴 Удаление медиа на Кра́кене — ждёт выбора Alex