[2026-09-24] eagle: family/projects/watchlist-automation.md personal/plans/lampac-watchlist-plugin.md personal/tech/lampac-deployment.md

This commit is contained in:
Alexey Martemyanov committed 2026-09-24 16:57:52 +06:00
1 parent 6d8cd5e1eb
commit 63694c7f57
3 files changed
+93 -3

No files matched your search

+7
View File
@@ -221,6 +221,13 @@ curl -s --max-time 10 "http://localhost:7878/radarr/api/v3/queue?pageSize=50" \
(частичный молча возвращает старое). Через host-config тупик: валидатор требует непустой
`allowedHosts` при `authenticationRequired != Enabled` и не принимает звёздочку.
**🔴 Дальше — консолидация (план согласован 2026-09-24, не реализован):** отдельный
генератор каталога `lampac/scripts/gen_watchlist.py` признан вторым независимым матчером
TMDB — он не знает про `resolve` и его маркеры, из-за чего после удаления arr каталог
разъехался с `.md` на 3 позициях (Олдбой/Unbroken/Shogun). Слияние логики в модуль
проекта `watchlist_sync/feed.py` + CLI-шаг `feed` — см.
[[personal/plans/lampac-watchlist-plugin]] § «2026-09-24 (вечер): ПЕРЕПИСЫВАНИЕ».
### ✅ 2026-09-24 (вечер): контент удалён — Radarr/Sonarr пустые
Alex: «если они ни в чем не участвуют, удали все фильмы/сериалы». Проверка перед удалением:
+50 -2
View File
@@ -8,7 +8,7 @@ related:
- '[[family/projects/watchlist-automation]]'
- '[[family/documents/movies-watchlist]]'
- '[[personal/plans/lampac-watched-to-watchlist]]'
status: cub-sections-working-awaiting-tv-restart-deploy
status: unified-feed-approved-awaiting-implementation
tags:
- lampac
- lampa
@@ -22,13 +22,61 @@ tags:
- torrserver
- tmdb
- card-parse
- feed
title: Watchlist в UI Lampa — каталог из списка
type: plan
updated: '2026-09-22'
updated: '2026-09-24'
---
# Watchlist в UI Lampa — каталог из списка
## 🔴 2026-09-24 (вечер): ПЕРЕПИСЫВАНИЕ — один sync-скрипт вместо отдельного генератора
**Требование Alex:** «перепиши по нормальному чтобы не отдельный скрипт на лампу был
а один sync скрипт и писал сразу lampa feed… обнови синк скрипт чтобы писал фид вместо
добавления закачек в arr, а отдельный lampac script удали».
**Причина (найдено в этой сессии).** `gen_watchlist.py` (Lampac, 878 строк) — ВТОРОЙ,
независимый матчер TMDB: он не читает ни `.resolve_cache.json`, ни маркеры ✅/🗓️/❓.
Годами его связывал с резолвером Radarr неявно (матч по названию → те же версии фильмов,
что выбрал `resolve`). После удаления контента из arr 2026-09-24 мост исчез, и каталог
впервые матчил вслепую → 3 карточки сменили фильм (Олдбой 2003→2013 ремейк,
Unbroken 2003→Несломленный 2014, Shogun 1968→Убийца сёгуна 1980). Лечим не годами
в `.md`, а слиянием матчеров.
**План (согласован, реализация НЕ начата).**
| Шаг | Что |
|---|---|
| 1 | Логику `gen_watchlist.py` перенести в модуль проекта: `watchlist_sync/feed.py`, функция `run()` как у остальных |
| 2 | Новый CLI-шаг `feed`; в nightly — ПОСЛЕ `resolve` (маркеры уже стоят), ПЕРЕД `sync-up` |
| 3 | Пути — через `.env`-ключ `LAMPAC_ROOT=/srv/.../lampac` (не хардкод); модуль сам собирает `wwwroot/watchlist.json`, `wwwroot/cards/`, `cache/` |
| 4 | Проверка на копии фида: ожидание **392 позиции / 390 постеров / missing 30** — точь-в-точь как текущий живой |
| 5 | Живой прогон + `docker restart lampac` (сброс кэша Catalog) |
| 6 | Выпилить: `lampac/scripts/gen_watchlist.py` + `mark_missing.py` → `*.bak-20260924`; `~/scripts/watchlist-catalog.sh` + строка крон `30 2 * * *` |
| 7 | Доки + скилл, коммит/пуш |
**Что НЕ трогаем:** `catalog/sites/watchlist.yaml` (контракт Lampac — `plugin: watchlist`,
категории, `card_parse`/`card_args` с `format`-выражениями), `catalog/plugin.js`
(инжект секций в CUB через `Api.partNext`), структура `cards/card-movie-NNN.json`.
Механика `missing.json` → маркер ❓ уже живёт в проекте и работает.
**`sync-down` остаётся вырезанным из крона** — добавлений в arr из watchlist нет;
`arr.py` не трогаем (автозакачка вернулась для РУЧНЫХ добавлений, коммит `ef7e7af`).
**Реперные метрики живого фида на 2026-09-24** (для сверки после переноса):
```
каналы: new 32 / films 346 / cartoons 7 / anime 7 → карточек 392
источники: Radarr 0, TMDB 371, автопоиск по названию 17,
по номеру из ссылки 4, без TMDB 30, постеров 390
```
🟡 **Рабочее правило (Alex):** код писать сразу в проекте на Маке
(`~/Developer/watchlist-sync/`), `/tmp` — только для чтения чужих файлов и одноразовых
выборок. Мак-репа и Кракен держатся на одном коммите (`4266e37` на момент старта).
---
> Реализовано 2026-09-22. План был переписан после разведки кода модуля Catalog.
> Базовое развёртывание — [[personal/plans/lampac-kraken]] (шаги 1–6 закрыты).
>
+36 -1
View File
@@ -1,7 +1,7 @@
---
title: Lampac — развёртывание и эксплуатация (Кра́кен)
created: '2026-09-22'
updated: '2026-09-22'
updated: '2026-09-24'
type: tech
namespace: personal
tags:
@@ -27,6 +27,41 @@ related:
> Технический справочник. Развёрнуто 2026-09-22. План и статус шагов — [[personal/plans/lampac-kraken]].
## 🔴 2026-09-24: генератор каталога признан вторым матчером — уходит в проект
`lampac/scripts/gen_watchlist.py` (878 строк) + `mark_missing.py` (179) — **отдельные
скрипты вне `watchlist-sync`**. Разбор кода в этой сессии:
- резолв **трёхуровневый**: Radarr по названию → TMDB `/search/{movie,tv}` (кэш
`cache/.lampac_tmdb_cache.json`) → КП по номеру из ссылки в `.md`
(`kp_id_from_url`, приоритет выше поиска по названию) → КП по названию с порогом
`KP_SIM_THRESHOLD = 0.75` и проверкой год ±1 / совпадения `media_type`;
- детали карточек — `cache/.lampac_tmdb_details.json` (описание, жанры, актёры, runtime,
ru-title + year; требование Alex «отображать как в tmdb/kp»);
- пишет: `wwwroot/watchlist.json` (channels), `wwwroot/watchlist-{films,new,cartoons,anime}.json`,
`wwwroot/cards.json` + `wwwroot/cards/card-<type>-<id>.json` (файл на фильм, обёртка
`{"card": {...}}`), `wwwroot/missing.json` (для маркера ❓);
- позиции без TMDB-ID в фид **не отдаются** (требование «чего нет для просмотра — того
нет в списке»), уходят в `missing.json`;
- `load_env()` ищет `.env` в жёстком списке путей (Кракен-пути + Mac-путь) — хрупко.
**Проблема:** скрипт не читает `.resolve_cache.json` и не знает маркеров ✅/🗓️/❓ —
это ВТОРОЙ независимый матчер того же списка. Ранее связывался с `resolve` неявно через
Radarr (матч по названию → те же версии, что выбрал резолвер). После удаления контента
из arr (2026-09-24) мост исчез → 3 карточки сменили фильм.
**Решение (план согласован, не реализован):** логика переезжает в проект как
`watchlist_sync/feed.py` + CLI-шаг `feed`, пути через `.env`-ключ `LAMPAC_ROOT`, шаг
встаёт в nightly между `resolve` и `sync-up`; `gen_watchlist.py` / `mark_missing.py` /
`watchlist-catalog.sh` (крон 02:30) — в `.bak`. Детали и порядок шагов —
[[personal/plans/lampac-watchlist-plugin]] § «2026-09-24 (вечер): ПЕРЕПИСЫВАНИЕ».
⚠️ **НЕ трогать при переносе:** `catalog/sites/watchlist.yaml` (`plugin: watchlist` —
обязателен, кириллица в ключе вырезается регуляркой `ModInit`; первая категория
игнорирует `format` и берёт `list.uri`; `card_args` требуют `format` для числовых типов,
иначе `tmdb_id` приедет строкой и карточка в Lampa будет «здесь пусто»),
`catalog/plugin.js` (инжект секций в CUB через `Api.partNext`), структуру `cards/`.
## Что это
`lampac-nextgen/lampac` (MIT, .NET 10) — серверный бэкенд для Lampa. Один контейнер, порт **9118**.