[2026-09-22] eagle: family/documents/movies-watchlist.md personal/plans/kraken-media-inventory-cleanup.md personal/tech/lampac-deployment.md

This commit is contained in:
Alexey Martemyanov committed 2026-09-22 20:46:48 +06:00
1 parent 5b0147f53d
commit 159a805ce9
3 files changed
+100 -15

No files matched your search

+48 -7
View File
@@ -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