[2026-09-22] eagle: personal/plans/kraken-media-inventory-cleanup.md personal/tech/lampac-deployment.md personal/tech/skill-lampac-kraken-deploy.md

This commit is contained in:
Alexey Martemyanov committed 2026-09-22 20:21:20 +06:00
1 parent 5249bddf8f
commit 3ae71671e7
3 files changed
+330 -51

No files matched your search

+145
View File
@@ -3251,8 +3251,153 @@ else{Lampa.Listener.follow('app',function(e){if(e.type=='ready')patchCubMain();}
Проверка в шаге 7 валидирует именно ключ `watchlist` и предупреждает,
если в `/catalog` остался русский ключ.
## 🔴 Полная инвентаризация диска Кра́кена (2026-09-22, вечер)
Alex: *«проверь все что скачано сейчас из сериалов и фильмов (не только в sonarr/radarr папках)
составь табличку что из этого есть в списке watchlist (и соответственно доступно в lampa)
и то чего нет в lampa»* → *«вообще все. нужна полная инвентаризация что можно сносить,
а что нельзя»*.
**Отдельный план с таблицей: [[personal/plans/kraken-media-inventory-cleanup]].**
Здесь — только методика и переиспользуемые факты.
### Цифры
```
802 видеофайла · 233 позиции · 1236.1 ГБ занято
A. в watchlist (Lampa покажет): 29 поз. / 456.0 ГБ
B. не в watchlist: 204 поз. / 780.1 ГБ
точных дублей (имя+размер): 46 групп / 89.2 ГБ зря
```
| Папка | Файлов | ГБ | Индексируется arr |
|---|---|---|---|
| `movies` | 51 | 309.7 | ❌ |
| `documentaries-series` | 72 | 235.6 | ❌ |
| `movies-radarr` | 11 | 176.2 | ✅ |
| `cartoons` | 102 | 139.8 | ❌ |
| `series-sonarr` | 57 | 116.1 | ✅ |
| `cartoons-series` | 433 | 104.6 | ❌ |
| `downloads` | 45 | 78.6 | ❌ staging |
| `documentaries` | 25 | 71.9 | ❌ |
| `series` | 6 | 3.6 | ❌ |
🔴 **Radarr/Sonarr индексируют только 252 ГБ из 1236** (21%). Остальные ~984 ГБ —
ручные закачки, невидимые в UI стека.
### 🔴 `downloads/complete` — раздачи не удаляются после импорта
`downloads/complete/sonarr/` держит **завершённые раздачи, которые Sonarr уже
скопировал в библиотеку и не убрал**. Дубли подтверждены совпадением имени файла
И размера байт-в-байт:
```
downloads/complete/sonarr/Очень странные дела.S03.WEB-DL.1080.HDR 21.33 ГБ -> series-sonarr S03
downloads/complete/sonarr/Our.Flag.Means.Death.S01.2022... 19.31 ГБ -> series-sonarr S01
downloads/complete/sonarr/Our.Flag.Means.Death.S02.WEBDL... 13.81 ГБ -> series-sonarr S02
downloads/complete/sonarr/Stranger Things.s04.WEB-DL(HEVC)1080p.xz 13.06 ГБ -> series-sonarr S04
downloads/complete/sonarr/Kiberderevnya.S01.2023.WEB-DL.1080p 11.11 ГБ -> The Cyberfarm S01
```
= **78.6 ГБ чистого дубля.** Sonarr настроен «копировать», а не «перемещать»
(или `Remove Completed` выключен) — отсюда двойной расход.
⚠️ `Life.Is.Beautiful.1997.BDRip.1080p.mkv` (10.62 ГБ) лежит **трижды**:
`movies-radarr/Life Is Beautiful (1997)/` + `cartoons/life is beautiful/` + ещё копия.
Фильм в `cartoons` — ошибка раскладки, не случайность импорта.
### ⚠️ Ложный дубль: Stranger Things S03
`downloads/.../Очень странные дела.S03` и `series-sonarr/Stranger Things/Season 3`
совпадают байт-в-байт, но в `series-sonarr` **нет S01** (только S02–S04) — библиотека
формировалась из этой же раздачи. Перед удалением `downloads`-копии проверить,
что Sonarr видит S03 как присутствующий.
### Метод: как группировать файлы в «позиции»
Плоский `find` даёт 802 строки — бесполезно. Группировка:
```python
# movies / cartoons / documentaries — файлы в корне = каждая своя позиция
# (иначе единственный «Вивариум» 1.46 ГБ склеивается в группу на 135 ГБ)
if top in ("movies", "cartoons", "documentaries"):
return (top, dirs[0]) if dirs else (top, r["file"])
# downloads/complete/sonarr/<Pack Name>/... — по полному пути пака (сезонный пак)
if top == "downloads" and len(dirs) >= 3 and dirs[0] == "complete":
return (top, "/".join(dirs[:3]))
# сериалы — первый подкаталог = шоу
return (top, dirs[0]) if dirs else (top, r["file"])
```
### 🔴 Матч с watchlist — только СТРОГОЕ равенство
Подстрочный матч (`c in e["name"]`) даёт мусор: короткие нормализованные строки
вроде `гладиатор` совпадают со множеством позиций, счётчик «в watchlist» раздувается
до неверного. Рабочее правило:
```python
if c == e["n"] or (e["o"] and c == e["o"]): # точное равенство, len(c) >= 4
```
Порядок эффекта: наивный подстрочный матч → 42 позиции / 811 ГБ «в watchlist»;
строгий → 29 позиций / 456 ГБ. Разница — целиком ложные срабатывания.
**Нормализация** (обе стороны сравнения, обязательна): снять расширение → `[...]` → `(...)` →
год → не-буквы → шум-слова (качество, релиз-группа, `web-dl`, `bdrip`, `x264`, `megapeer`,
`bluebird`, `hdrezka`, транслит-хвосты) → сжать пробелы. Для сериалов дополнительно
`strip_ep`: `S01E04`, `N серия`, `N выпуск`, `сезон N`.
🔴 **TMDB-ID в `watchlist.json` отдельным полем НЕ лежит.** Он в `href`:
`https://www.themoviedb.org/movie/424781` → `re.search(r"/(\d{2,9})/?$", href)`.
Попытка читать `item["tmdb_id"]` даёт `null` по всем 376 позициям.
### `missing.json` не пересекается с диском
Все 30 позиций из `missing.json` (маркер `❓`) — **рукописные заметки в списке**
(`Солярис Тарковский`, `Идиот Бортко`, `Замок Балабанов`, `Спрут сериал`),
а не скачанные файлы. Совпадений с диском — **0**.
Вывод: «недоступно в Lampa» для файлов на Кра́кене вызывается **отсутствием в watchlist**,
а не отсутствием в TMDB. Это разные причины, не смешивать.
### Где что лежит
```
Диск: /srv/dev-disk-by-uuid-6194539b-03e0-4f33-986b-4da09834e82f/media/
(49e8f586 — symlink на него; отдельного диска нет, проверено docker inspect)
Артефакты инвентаризации на Mac:
/Users/admin/kraken-inventory.json — 233 позиции, полные поля
/Users/admin/kraken-inventory.csv — таблица для Excel
/Users/admin/kraken-dupes.json — 46 групп дублей
/Users/admin/kraken-table-AB.md — markdown A/B таблицы
```
Скрипты инвентаризации: `/tmp/kraken_inventory3.py` (финальный),
`/tmp/kraken_final.py` (дубли + сводка), `/tmp/kraken_break.py` (разбор папки).
### Кандидаты на удаление (по риск-уровню)
1. **`downloads/complete` (78.6 ГБ)** — нулевой риск, всё есть в библиотеке.
2. **Дубли `Life Is Beautiful`** — оставить одну из трёх копий.
3. **`documentaries*` вне watchlist (307 ГБ)** — доксериалы, нужен просмотр глазами.
4. **Всё не из watchlist (780 ГБ)** — включает `Oldboy`, `Project Hail Mary`, `F1`,
`The Cyberfarm`, `Brassic` — возможно нужное.
## ⏳ Осталось добить (2026-09-22)
### 0. 🔴 Удаление медиа на Кра́кене — ждёт выбора Alex
Инвентаризация сделана: [[personal/plans/kraken-media-inventory-cleanup]].
802 файла / 233 позиции / 1236 ГБ. Свободно 477 ГБ.
Предложены 3 варианта, ответа нет:
1. Только `downloads/complete` — **78.6 ГБ**, нулевой риск (всё есть в библиотеке).
2. + доксериалы вне watchlist — ~390 ГБ.
3. Всё не из watchlist — 780 ГБ.
**Порядок действий при любом варианте:** дамп `radarr`/`sonarr` API в файл →
удаление → проверка сырьём. Стект-директории (`movies-radarr`, `series-sonarr`)
удалять только через API, иначе Radarr держит фантом.
### 1. 5 фильмов с Кинопоиск-ID — «здесь пусто», без постера
`film/12432920/`, `film/5454868/`, `film/11888712/`, `film/11825624/`, `film/8184798/`
+26 -4
View File
@@ -45,6 +45,25 @@ related:
10. 🔴 **`luna-send` по SSH печатает хелп вместо ответа** — обернуть в `script -q -c "..." /tmp/o.txt`.
11. Фактический appId Lampa на ТВ — **`com.lampac.tv`** (не `org.lampa.tv` из запроса установки).
## Инвентаризация диска и удаление (добавлено 2026-09-22)
Полная таблица: [[personal/plans/kraken-media-inventory-cleanup]].
12. 🔴 **arr индексирует только 252 ГБ из 1236** (21%). Остальное — ручные закачки,
невидимые в UI Radarr/Sonarr. «Нет в Radarr» ≠ «нет на диске».
13. 🔴 **`downloads/complete/sonarr/` — завершённые раздачи, не удалённые после импорта.**
Байт-в-байт дубли библиотеки = **78,6 ГБ зря**. Самый безопасный кандидат на снос.
14. 🔴 **Матч с watchlist — только СТРОГОЕ равенство** нормализованных названий, `len >= 4`.
Подстрочный матч раздувает счёт: 42 позиции / 811 ГБ вместо реальных 29 / 456 ГБ.
15. 🔴 **В `watchlist.json` нет поля `tmdb_id`** — он в `href`
(`.../movie/424781`), вынимать регексом `/(\d{2,9})/?$`.
16. 🔴 **`missing.json` (30 позиций с `❓`) не пересекается с диском** — это рукописные
заметки в списке. «Недоступно в Lampa» для файлов = **нет в watchlist**, не «нет в TMDB».
17. Группировка 802 файлов: файлы в корне `movies`/`cartoons`/`documentaries` — каждая своя
позиция (иначе «Вивариум» 1,46 ГБ склеивается в группу на 135 ГБ).
18. Удаление только через API arr-стека; `deleteFiles=true` — проверять, что путь внутри
библиотеки. Дамп API в файл перед операцией.
## Установка Lampa на ТВ (сжато)
```bash
@@ -81,13 +100,16 @@ ssh kraken 'sudo rm -rf /srv/dev-disk-by-uuid-6194539b-03e0-4f33-986b-4da09834e8
## Не закрыто
- Лимит кэша TorrServer — дефолт. Рекомендуется ~20 ГБ.
- `init.conf` не смонтирован — правки через `docker exec` не переживают пересоздание контейнера.
- 🔴 Удаление медиа на Кра́кене — ждёт выбора Alex (3 варианта в
[[personal/plans/kraken-media-inventory-cleanup]], раздел «Что дальше»).
- Шаг 7 — watchlist в UI Lampa: [[personal/plans/lampac-watchlist-plugin]].
- Секции Watchlist внутри CUB-фида — инжект залит, приёмка в UI не подтверждена.
## Реальный скилл (файл)
`~/.hermes/hermes-whale/skills/devops/lampac-kraken-deploy/SKILL.md`
⚠️ **Скилл в файловой системе отстал от этой заметки** — в нём нет пунктов 9–11
(установка Lampa на ТВ по SSH, питфолл `luna-send`+`script`, фактический appId `com.lampac.tv`).
При следующей загрузке скилла — подтянуть из [[personal/tech/lampac-deployment]].
✅ **Синхронизирован 2026-09-22 (вечер).** Пункты 9–11 (установка Lampa на ТВ по SSH,
питфолл `luna-send`+`script`, appId `com.lampac.tv`) и новые 12–18 (инвентаризация диска,
дубли `downloads/complete`, строгий матч с watchlist, `tmdb_id` в `href`) перенесены
в файл скилла, включая раздел «Pillar: disk inventory & deletion candidates».