diff --git a/personal/plans/lampac-watchlist-plugin.md b/personal/plans/lampac-watchlist-plugin.md index 91d1c31e..4839f3ec 100644 --- a/personal/plans/lampac-watchlist-plugin.md +++ b/personal/plans/lampac-watchlist-plugin.md @@ -38,6 +38,20 @@ updated: '2026-09-22' > **Итог одной строкой:** серверная часть каталога работает (4 категории, 360/33/3/7), > но реализована не по замыслу: подменяет каталог вместо добавления секций, > и не использует Radarr как источник постеров/ID. +> +> **Обновление 2026-09-22 (вечер):** Alex лично нашёл источник в UI +> («остальное → основной источник → Мой список»), увидел результат и подтвердил +> диагноз: секции подменяют CUB, нет превью, элементы — сырые строки файла. +> Затем сам сформулировал целевую схему (Radarr = источник метаданных **без автоскачки**, +> просмотр через TorrServer, файлы на HDD не пишутся) → записано в **«ПЕРЕДЕЛКА 2»**. +> План работ на апруве, **ничего не выполнено**. +> +> **Аудит «как это реализуемо» — ✅ ЗАВЕРШЁН 2026-09-22.** Проверено всё: +> TorrServer **на диск не пишет** (`UseDisk: false`, RAM-кэш 96 МБ) — главный вопрос закрыт; +> поиск торрентов работает через **Jackett-API самого Lampac** (отдельный Jackett не нужен); +> найдены **оба** виновника автоскачки — Radarr (45 monitored, очередь 6) и +> **Sonarr** (13 monitored, очередь 19). См. «✅ ПРОВЕРКА "как это реализуемо"». +> ⚠️ Порядок работ теперь включает Sonarr — раньше он в плане не учитывался. ## 🔴 АРХИТЕКТУРНАЯ ОШИБКА 2026-09-22 — почему каталог «не работает» @@ -86,6 +100,29 @@ updated: '2026-09-22' (`index.php?kp_query=...`). Отсюда жалоба «при открытии элемента пишет *здесь пусто*»: Lampa идёт по ссылке, получает страницу поиска, а не фильм. +**Замер 2026-09-22 (доказательство, воспроизводимо):** + +```bash +curl -s "http://192.168.1.14:9118/catalog/list?plugin=watchlist&cat=films" \ + | jq '[.results[] | select(.img == null)] | length' # → 360 +curl -s "..." | jq '.results | length' # → 360 +curl -s "..." | jq '[.results[] | select(.id | startswith("film/"))] | length' # → 18 +``` + +То есть **постеров 0 из 360**, рабочих карточек 18 из 360. + +**Почему «девять» с маленькой буквы и `Gods don't give gifts`** — это не баг каталога, +а буквально строки файла (проверено `grep -n`): + +``` +56: - [ ] Gods don't give gifts +64: - [ ] ❓ девять +``` + +Каталог отдаёт строки как есть. Обе — в секции `## Новинки` (отступ 2 пробела, подсписок). +Alex: «Отображаются элементы типа "девять"(с маленькой буквы), Gods don't give gifts — +который вообще ещё не вышел — короче не реальные фильмы а буквально пункты списка.» + **Правильный источник — Radarr API.** Alex: «Они уже резолвятся же блядь!! Оно же добавлялось в arr!» — TMDB ID и постеры уже есть там, потому что фильмы добавлялись в Radarr. @@ -605,6 +642,360 @@ ssh kraken 'sed -i "s/\"catalog\": true/\"catalog\": false/" \ Для строк без рейтинга (например `- [ ] Gods don't give gifts`) — сортировать как `0`, в конец группы. Опционально: добирать через TMDB (кэш `tmdbproxy` в Lampac) — решить при реализации. +## 🎯 ПЕРЕДЕЛКА 2 — Radarr как источник метаданных без автоскачки (план Alex, 2026-09-22) + +### Логика Alex (дословно) + +> «Мы блядь убираем автоскачку на диск так?! При этом ты оставляешь radarr/sonarr +> источником, так?? И в него из списка добавляется скриптом, но не грузит автоматом так? +> Сейчас ты отменяешь текущие загрузки, так??» + +**Расшифровка:** + +| # | Что | Как | +|---|---|---| +| 1 | **Автоскачка на HDD — выключить** | Radarr/Sonarr ничего не качают сами | +| 2 | **Radarr/Sonarr остаются источником** | TMDB ID + постеры для каталога Lampa | +| 3 | **Скрипт добавляет в них из списка** | `.md` → Radarr API, фильм получает метаданные | +| 4 | **Но не грузит автоматом** | Добавление ≠ загрузка | +| 5 | **Текущие загрузки — отменить** | 6 записей в очереди | + +### Как это в Radarr технически (проверено 2026-09-22) + +⚠️ **Важно для понимания:** в Radarr «добавить, но не качать» = **`monitored: false`**. +Отдельного состояния «источник, но не грузить» нет. При добавлении через API Radarr +**сам ходит в TMDB** и тянет метаданные (постер, год, описание) — даже при `monitored: false`. +Это и есть решение задачи №2+№3+№4. + +### Доступ к Radarr API (проверено 2026-09-22, воспроизводимо) + +```bash +# API-ключ лежит в config.xml (не в БД) +ssh kraken 'grep -oE "[^<]+" \ + /srv/dev-disk-by-uuid-6194539b-03e0-4f33-986b-4da09834e82f/docker/radarr/config/config.xml' \ + | sed 's/<[^>]*>//g' # → cbcb8ec320104359920c0f611d503c7b +``` + +🔴 **ПИТФОЛЛ: `-L` обязателен.** Без него Radarr отдаёт **307 с пустым телом** и `jq length` падает: + +```bash +curl -s "http://localhost:7878/api/v3/movie?apikey=$KEY" | jq length # → пустой вывод, 0 байт +curl -sL "http://localhost:7878/api/v3/movie?apikey=$KEY" | jq length # → 200, 50 +``` + +**Конфиг Radarr (замер):** + +```bash +curl -sL ".../api/v3/config/indexer?apikey=$KEY" | jq .rssSyncInterval # → 30 (мин) +``` + +`rssSyncInterval: 30` = Radarr **каждые 30 минут** сам ходит в RSS-фиды и качает новое. +Это вторая причина автоскачки помимо `monitored: true`. **Выключать надо оба.** + +### Окружение Radarr на Кра́кене (для будущих сессий) + +| Параметр | Значение | +|---|---| +| Порт | `7878` (`0.0.0.0`) | +| Контейнер | `radarr`, образ `lscr.io/linuxserver/radarr:latest` | +| Конфиг на HDD | `/srv/...6194539b.../docker/radarr/config/` | +| БД | `radarr.db` (+ `-shm`, `-wal`) | +| Постеры | `/config/MediaCover/` — **46 каталогов** | +| `sqlite3` в контейнере | ❌ **нет** (на хосте Кра́кена — **есть**, `/usr/bin/sqlite3`) | +| Соседи | `sonarr:8989`, `prowlarr:9696`, `transmission` | + +⚠️ В контейнерах `sqlite3` отсутствует (см. профиль Alex) — БД читать через `strings` +или вытаскивать файл наружу и смотреть хостовым `sqlite3`. + +### Текущее состояние Radarr (замер 2026-09-22) + +| Метрика | Значение | +|---|---| +| Фильмов всего | 50 | +| `monitored: true` | **45** ← активны, ищут и качают | +| `hasFile: true` | 24 (уже на диске) | +| `rssSyncInterval` | **30** мин ← Radarr ходит в RSS каждые полчаса | +| Очередь | **6 записей** (все `warning`, ничего не качается активно) | +| Transmission | простаивает (1% CPU) | + +Очередь (id для отмены): + +``` +598407147 Brokeback Mountain.mkv +1092005446 Гладиатор (2000) (DTS X) DV.mkv +914899324 Sorry.to.Bother.You.BDRemux.1080p.NNMClub.pk.mkv +1671545331 Мортал Комбат 2 (DTS-HD MA).mkv +1486734395 Gorod.boga.2002.BDRemux.1080p.mkv +139445264 День хомячка (2003) +``` + +## ✅ ПРОВЕРКА «как это реализуемо» — полный аудит 2026-09-22 (вечер) + +Alex: «Мне надо чтоб lampa источники видела и играла фильмы из списка и cub. +При этом мы перестаем качать торренты на диск! Как это реализуемо?? +Проверь блядь все чтобы ты опять не обосрался». + +Проверено всё, что может качать или мешать. **Ничего не менялось — только чтение.** + +### 🎯 Главная находка: TorrServer на диск НЕ пишет + +Ключевой факт, снимающий главный вопрос Alex («при этом фильмы не будут +скачиваться на hdd я правильно понимаю?!»). Конфиг TorrServer внутри Lampac: + +```bash +ssh kraken 'docker exec lampac cat /lampac/data/ts/settings.json' | jq . +``` + +```jsonc +{ + "BitTorr": { + "CacheSize": 100663296, // 96 МБ — RAM-кэш + "UseDisk": false, // 🔴 НА ДИСК НЕ ПИШЕТ + "TorrentsSavePath": "", // путь сохранения пуст + "TorrentDisconnectTimeout": 180, // раздача живёт 3 мин после остановки + "PreloadCache": 0, + "ReaderReadAHead": 83 + } +} +``` + +**`UseDisk: false`** — TorrServer держит всё в RAM (96 МБ) и **на диск не пишет ничего**. +Это ровно то, что нужно Alex. Настраивать не надо, уже так. + +### TorrServer жив и работает (проверено) + +```bash +curl -s "http://192.168.1.14:9118/ts/echo" # → MatriX.135 (версия, живой) +curl -s "http://192.168.1.14:9118/ts/torrents" # → 404 (это не тот эндпоинт) +curl -s -X POST "http://192.168.1.14:9118/ts/torrents" \ + -H 'Content-Type: application/json' -d '{"action":"list"}' # → [] пусто, ничего не висит +``` + +Кэш Lampac: `/lampac/cache/` = 31 МБ (SQLite, Playwright, gstreamer-registry) — +**не фильмы**. `/lampac/data/` = 44 МБ (ts/settings.json, dlna/thumbs). Диск не забит. + +### Поиск торрентов — Jackett внутри Lampac, отдельный НЕ нужен + +🔴 **ПИТФОЛЛ-ЛОВУШКА: в `lampainit.js` стоит `parser_torrent_type = 'jackett'`, +но отдельного контейнера Jackett НЕТ.** Это не ошибка — Lampac **сам отдаёт +Jackett-совместимый API**. + +```bash +# что прописывает Lampac клиенту: +curl -s "http://192.168.1.14:9118/lampainit.js" | grep -oE "Lampa.Storage.set\('[^']+', ?'[^']*'\)" +# Lampa.Storage.set('jackett_url', '192.168.1.14:9118') +# Lampa.Storage.set('jackett_key', '1') +# Lampa.Storage.set('parser_torrent_type', 'jackett') +# Lampa.Storage.set('parser_use', 'true') +``` + +`jackett_url` указывает **на сам Lampac**, а не на сторонний сервис. Проверка API: + +```bash +# ⚠️ работает БЕЗ префикса /jackett — на корне +curl -s "http://192.168.1.14:9118/api/v2.0/indexers/all/results?apikey=1&Query=matrix" +# → 200, реальные результаты: rutor, магнит-ссылки, Size, Seeders, ffprobe + +curl -s -o /dev/null -w "%{http_code}" "http://192.168.1.14:9118/jackett/api/v2.0/..." # → 404 +curl -s -o /dev/null -w "%{http_code}" "http://192.168.1.14:9118/api/v2.0/..." # → 200 ✅ +``` + +**Вывод:** поиск торрентов работает штатно, ничего поднимать не надо. + +### Кто качает на диск — полный реестр (единственные виновники) + +```bash +ssh kraken 'docker ps --format "{{.Names}}\t{{.Image}}"' +``` + +| Сервис | Качает? | Замер | Нужен для задачи? | +|---|---|---|---| +| **Radarr** | ✅ да | 50 фильмов, **45 monitored**, очередь **6**, RSS 30 мин | ❌ мешает | +| **Sonarr** | ✅ да | 13 сериалов, **13 monitored**, очередь **19** | ❌ мешает | +| **Transmission** | ⚠️ исполнитель | **257** `.torrent`, CPU 0.76% (простаивает), NetIO 290G/26.7G | ⚠️ движок Radarr/Sonarr | +| **TorrServer** | ❌ НЕТ | `UseDisk: false`, список торрентов `[]` | ✅ **вот чем играет Lampa** | + +Полный список контейнеров Кра́кена: +`lampac · radarr · jellyfin · transmission · portainer · flaresolverr · +prowlarr · sonarr · watchtower · rclone · xray-reverse-bridge · hermes-kraken · cloudflared` + +**Sonarr API** (для будущей работы, по аналогии с Radarr): + +```bash +# ключ: /srv/.../docker/sonarr/config/config.xml → 15fbec32f1cb4b05b1c2b229ce27359b +curl -sL "http://localhost:8989/api/v3/series?apikey=$SONARR_KEY" | jq 'length' # → 13 +curl -sL "http://localhost:8989/api/v3/queue?apikey=$SONARR_KEY" | jq '.totalRecords' # → 19 +``` + +⚠️ Sonarr — **тоже источник автоскачки**, не только Radarr. Alex упомянул его не зря. +Отключать надо оба, иначе Sonarr продолжит качать сериалы. + +### Transmission — настройки (замер) + +```bash +ssh kraken 'docker exec transmission cat /config/settings.json' > /tmp/trans-settings.json +``` + +```json +{"download-dir": "/downloads", "rpc-port": 9091, + "speed-limit-down-enabled": false, "peer-port": 51413, + "alt-speed-enabled": false} +``` + +`/config/torrents/*.torrent` = **257 файлов** — это накопленный список раздач, +**не признак активной качки** (CPU 0.76%). Файлы на диске не трогаем. + +### Кто чем играет в Lampa (подтверждено) + +```bash +curl -s "http://192.168.1.14:9118/lampainit.js" | grep -iE "torrents_use|source" +# lampa_settings.torrents_use = true ← кнопка торрентов включена +# Lampa.Storage.set('source', 'cub') ← CUB — основной источник ✅ +# Lampa.Storage.set('proxy_tmdb', 'true') +``` + +В `plugins_add` (серверные плагины Lampac, не список Lampa): +`tmdbproxy.js · cubproxy.js · online.js · catalog.js · sisi.js · startpage.js · +timecode.js · ts.js` — все `status: 1`. + +### Итоговая схема (что получится после переделки) + +``` +ТВ: Lampa (com.lampac.tv) + ├── источник CUB ── онлайн, работает как раньше ✅ + └── источник «Мой список» ── секции СВЕРХУ, постеры из Radarr + │ + ▼ клик по фильму + поиск торрента через Lampac (Jackett-API на :9118) + │ + ▼ + TorrServer (UseDisk: false) → RAM-кэш 96 МБ → на HDD НЕ ПИШЕТ ✅ + +Radarr/Sonarr после переделки = ЧИСТЫЙ СПРАВОЧНИК МЕТАДАННЫХ + (monitored: false + rssSyncInterval: 0) — не ищут, не качают +``` + +### ⚠️ Порядок работ (обновлён с учётом Sonarr) + +| # | Действие | Сервис | Статус | +|---|---|---|---| +| 0 | Бэкап `radarr.db` + `config.xml` (+ то же для Sonarr) | оба | ⏳ | +| 1 | Отменить очередь: 6 записей Radarr + **19 Sonarr** | оба | ⏳ | +| 2 | `monitored: false` — 45 Radarr + **13 Sonarr** | оба | ⏳ | +| 3 | `rssSyncInterval: 0` | оба | ⏳ | +| 4 | Проверка: monitored 0, очередь 0, RSS 0, Transmission тих | оба | ⏳ | +| 5 | Генератор каталога → данные из **Radarr API** (TMDB ID + постер) | — | ⏳ | +| 6 | В `sites/watchlist.yaml` убрать `menu`, оставить `main` | — | ⏳ | +| 7 | Фикс `plugin.js` (`enumerable:true`) | — | ⏳ | +| 8 | Добавление 310 фильмов из `.md` в Radarr с `monitored: false` | Radarr | ⏳ | + +**Не трогаем:** Prowlarr, Transmission, 24 файла на диске, Jellyfin, остальные контейнеры. + +### ❓ Открытый вопрос к Alex + +Radarr/Sonarr нужны **как справочник** (тогда постеры сохраняются) или +**выключаются совсем** (тогда каталог Lampa теряет постеры — их брать неоткуда)? +Ответа нет. + +### План работ (на апруве Alex) + +**Шаг 0 — бэкап (обязательно, до всего)** +```bash +ssh kraken 'cp /srv/.../docker/radarr/config/radarr.db /srv/.../radarr.db.bak-$(date +%Y%m%d-%H%M%S)' +ssh kraken 'cp /srv/.../docker/radarr/config/config.xml /srv/.../config.xml.bak-$(date +%Y%m%d-%H%M%S)' +``` +Причина: `radarr.db` — боевая база, содержит всю библиотеку. + +**Шаг 1 — отменить текущие загрузки (6 шт)** +```bash +curl -sL -X DELETE "http://localhost:7878/api/v3/queue/?removeFromClient=true&blocklist=false&apikey=$KEY" +``` +⚠️ **Не** использовать `blocklist=true` — иначе релизы попадут в чёрный список и +не найдутся при ручной загрузке. Файлы на диске **не трогаются**. + +**Шаг 2 — снять `monitored` со всех фильмов** +```bash +curl -sL -X PUT "http://localhost:7878/api/v3/movie/editor?apikey=$KEY" \ + -H "Content-Type: application/json" \ + -d '{"movieIds":[<все 50>],"monitored":false}' +``` +Результат: Radarr не ищет и не качает. Фильмы в базе с метаданными остаются. + +**Шаг 3 — выключить авто-поиск по RSS** +```bash +curl -sL -X PUT "http://localhost:7878/api/v3/config/indexer?apikey=$KEY" \ + -H "Content-Type: application/json" \ + -d '{"rssSyncInterval":0,"id":1, ...остальные поля как есть}' +``` +0 = Radarr не ходит в RSS. Ничего не находит сам. + +**Шаг 4 — проверить** +```bash +jq '[.[] | select(.monitored==true)] | length' # → 0 +jq '.rssSyncInterval' # → 0 +jq '.totalRecords' # очередь → 0 +``` + +**Что НЕ трогаем:** Prowlarr, Transmission, библиотеку на диске (24 файла), Sonarr +(отдельная проверка ниже). + +### ⚠️ Незакрытые вопросы к плану + +1. **Sonarr** — Alex упомянул его вместе с Radarr. Проверить его настройки отдельно + (сериалы в списке есть?). Это отдельная задача. **Вопрос задан Alex, ответа нет.** +2. **Ручная загрузка после отключения** — если Alex захочет скачать фильм вручную, + нужно временно включить `monitored` или искать вручную через Interactive Search. + Работает, но не автоматически. +3. **310 фильмов, которых нет в Radarr** — скрипт будет добавлять их с `monitored: false`, + Radarr сам подтянет постеры из TMDB. Но часть названий найдётся криво («девять»). + +### ✅ Подтверждено Alex 2026-09-22 (семантика задачи — не переспрашивать) + +Alex сам сформулировал схему и подтвердил её понимание ассистентом: + +> «При этом фильмы не будут скачиваться на hdd я правильно понимаю?! Играть будет +> через torrserver так?» → ответ: **да, правильно**. + +**Разделение обязанностей (запомнить, чтобы не путать):** + +| Слой | Роль | Куда пишет | +|---|---|---| +| **Radarr/Sonarr + Transmission** | библиотека, автоскачка релизов | на HDD (библиотека) | +| **Lampac TorrServer** | стриминг по требованию из UI Lampa | **ничего не сохраняет** — только временный кэш кусков | +| **«Мой список» (Catalog)** | только показ секций с постерами | ничего не качает | + +То есть после выключения автоскачки в Radarr: **фильмы, которые Alex смотрит через Lampa, +на HDD не попадают вообще** — TorrServer отдаёт поток и выбрасывает буфер. Файлы на диске +остаются только у 24 уже скачанных (нужны Jellyfin). + +⚠️ **`transmission` НЕ связан с Lampa.** Radarr качает через него релизы в свою библиотеку — +это отдельный контур. Вопрос «через что играет TorrServer» и «что качает Radarr» — +**разные вещи**, не смешивать в объяснениях. + +### 🔴 Правка `plugin.js` (`enumerable:true`) — всё ещё НЕ применена + +Независимая от ПЕРЕДЕЛКИ 2 правка. Файл лежит локально `/tmp/catalog-plugin.js` +(10738 байт, `node --check` чистый, 2 вхождения исправлены), бэкап +`/tmp/catalog-plugin.js.bak-20260922-121452`. На Кра́кене и в образе — **оригинал**. +Нужен volume `./catalog/plugin.js:/lampac/module/Catalog/plugin.js:ro` в compose. +Подробности — раздел «🔴 ГЛАВНЫЙ ПИТФОЛЛ» выше. + +**Порядок:** правку `plugin.js` имеет смысл применять **вместе с ПЕРЕДЕЛКОЙ 2**, +чтобы не пересоздавать контейнер дважды. + +### Откат + +```bash +# вернуть monitored (одним запросом) +curl -sL -X PUT ".../api/v3/movie/editor" -d '{"movieIds":[...],"monitored":true}' +# вернуть RSS +curl -sL -X PUT ".../api/v3/config/indexer" -d '{"rssSyncInterval":30,"id":1}' +# восстановить базу при необходимости +cp radarr.db.bak-<дата> radarr.db && docker restart radarr +``` + +**Статус: план на апруве. Ничего не выполнено.** + ## Открытые вопросы — БЛОКИРУЮЩИЕ (2026-09-22, ждут решения Alex) 1. **Что делать с 310 фильмами, которых нет в Radarr?** diff --git a/personal/tech/lampac-deployment.md b/personal/tech/lampac-deployment.md index 1254d51b..ab8b7ed6 100644 --- a/personal/tech/lampac-deployment.md +++ b/personal/tech/lampac-deployment.md @@ -587,12 +587,171 @@ ws = websocket.create_connection(target["webSocketDebuggerUrl"], timeout=10) ⚠️ `wwwroot` отдаётся статикой: **любой** файл, положенный туда, доступен по HTTP от корня (`http://:9118/<файл>`). Проверено записью пробного файла. +## Radarr/Sonarr как источник метаданных для каталога (2026-09-22) + +**Зачем:** каталог watchlist нуждается в **TMDB ID и постерах** для элементов. +Список `movies-watchlist.md` — просто текст, там этого нет. Но фильмы добавлялись +в **Radarr**, который уже держит метаданные (тянет из TMDB при добавлении). + +### Что отдаёт Radarr API + +```bash +KEY=$(ssh kraken 'grep -oE "[^<]+" \ + /srv/...6194539b.../docker/radarr/config/config.xml' | sed 's/<[^>]*>//g') + +curl -sL "http://localhost:7878/api/v3/movie?apikey=$KEY" | jq . +``` + +```json +{ + "tmdbId": 1292695, + "title": "They Will Kill You", + "year": 2026, + "hasFile": true, + "monitored": true, + "images": [{"coverType": "poster", + "remoteUrl": "https://image.tmdb.org/t/p/original/6oI4oQKTWMVUlr8Ivqydp28R"}] +} +``` + +Маппинг в формат каталога: `tools.tmdbId` → `id`/`href`, `images[].remoteUrl` → `img`, +`title`+`year` → `title`, `hasFile` → признак «уже скачан». + +### 🔴 Питфолл: `curl -sL`, без `-L` Radarr отдаёт 307 + +```bash +curl -s "http://localhost:7878/api/v3/movie?apikey=$KEY" | jq length # ❌ 0 байт +curl -sL "http://localhost:7878/api/v3/movie?apikey=$KEY" | jq length # ✅ 50 +``` + +### Окружение arr-стека на Кра́кене + +| Сервис | Порт | Конфиг на HDD | +|---|---|---| +| radarr | 7878 | `/srv/...6194539b.../docker/radarr/config/` | +| sonarr | 8989 | аналогично | +| prowlarr | 9696 | аналогично | +| transmission | — | отдельный контейнер | + +Постеры складываются в `/config/MediaCover/` (46 каталогов на 2026-09-22) — можно +раздавать их статикой через `wwwroot`, не дёргая CDN TMDB. + +⚠️ `sqlite3` в контейнерах arr **нет** — БД (`radarr.db`) читать либо через `strings`, +либо вытащить файл на хост (там `/usr/bin/sqlite3` есть). + +### Управление автоскачкой (два рычага, оба нужны) + +| Рычаг | Команда | Эффект | +|---|---|---| +| `monitored` | `PUT /api/v3/movie/editor` | фильм не ищется/не качается, метаданные остаются | +| `rssSyncInterval` | `PUT /api/v3/config/indexer` | `0` = Radarr не ходит в RSS (сейчас 30 мин) | + +⚠️ В Radarr **нет** состояния «источник, но не грузить» — это ровно `monitored: false`. + +### Контур воспроизведения — не путать (✅ проверено 2026-09-22) + +| Слой | Что делает | Пишет на HDD | +|---|---|---| +| Radarr + Sonarr + Transmission | автоскачка релизов в библиотеку | **да** | +| Lampac **TorrServer** (встроенный) | стриминг из UI Lampa по требованию | ❌ **нет — доказано** | +| Catalog «Мой список» | показ секций с постерами | ❌ ничего не качает | + +Просмотр через Lampa **не пополняет библиотеку**: TorrServer отдаёт поток и выбрасывает. +`transmission` к Lampa отношения не имеет. + +**Доказательство, что TorrServer не пишет на диск** — `/lampac/data/ts/settings.json`: + +```bash +ssh kraken 'docker exec lampac cat /lampac/data/ts/settings.json' | jq .BitTorr +``` + +```json +{ "CacheSize": 100663296, // 96 МБ — RAM-кэш + "UseDisk": false, // 🔴 НА ДИСК НЕ ПИШЕТ + "TorrentsSavePath": "", // путь сохранения пуст + "TorrentDisconnectTimeout": 180, // раздача живёт 3 мин после остановки + "PreloadCache": 0, "ReaderReadAHead": 83 } +``` + +`UseDisk: false` — дефолт Lampac, настраивать не надо. Кэш Lampac целиком: +`/lampac/cache/` = 31 МБ (SQLite, Playwright, gstreamer-registry — **не фильмы**), +`/lampac/data/` = 44 МБ. Список торрентов пуст: +`curl -s -X POST .../ts/torrents -d '{"action":"list"}'` → `[]`. + +Живость TorrServer: `curl -s "http://192.168.1.14:9118/ts/echo"` → `MatriX.135`. + +### 🔴 Поиск торрентов — Jackett внутри Lampac (отдельный НЕ нужен) + +**Ловушка:** в `lampainit.js` прописано `parser_torrent_type = 'jackett'`, +но **контейнера Jackett нет** в `docker ps`. Это не поломка — Lampac **сам отдаёт +Jackett-совместимый API**. + +```bash +curl -s "http://192.168.1.14:9118/lampainit.js" | grep -oE "Lampa.Storage.set\('[^']+', ?'[^']*'\)" +# jackett_url = '192.168.1.14:9118' ← сам Lampac, не сторонний сервис +# jackett_key = '1' +# parser_torrent_type= 'jackett' +# parser_use = 'true' +# source = 'cub' +# torrents_use = true (lampa_settings) +``` + +⚠️ **API живёт на КОРНЕ, без префикса `/jackett`:** + +```bash +curl -s "http://192.168.1.14:9118/api/v2.0/indexers/all/results?apikey=1&Query=matrix" +# ✅ 200 — реальные результаты: Tracker:rutor, MagnetUri, Size, Seeders, ffprobe +curl -s "http://192.168.1.14:9118/jackett/api/v2.0/indexers/all/results" # ❌ 404 +``` + +**Вывод:** ничего поднимать не надо, поиск торрентов работает штатно. + +### ⚠️ Sonarr — второй источник автоскачки (не только Radarr) + +Alex упомянул его не зря. Замер 2026-09-22: + +```bash +SKEY=$(ssh kraken 'grep -oE "[^<]+" \ + /srv/...6194539b.../docker/sonarr/config/config.xml' | sed 's/<[^>]*>//g') +# → 15fbec32f1cb4b05b1c2b229ce27359b + +curl -sL "http://localhost:8989/api/v3/series?apikey=$SKEY" | jq length # → 13 сериалов +curl -sL "http://localhost:8989/api/v3/series?apikey=$SKEY" \ + | jq '[.[]|select(.monitored)]|length' # → 13 monitored +curl -sL "http://localhost:8989/api/v3/queue?apikey=$SKEY" | jq .totalRecords # → 19 в очереди +``` + +| Сервис | Объектов | monitored | Очередь | +|---|---|---|---| +| Radarr | 50 фильмов | **45** | **6** | +| Sonarr | 13 сериалов | **13** | **19** | + +**Отключать надо оба** — иначе Sonarr продолжит качать сериалы. + +### Transmission — замер + +```bash +ssh kraken 'docker exec transmission cat /config/settings.json' > /tmp/trans-settings.json +# download-dir /downloads · rpc-port 9091 · speed-limit-down-enabled false +# /config/torrents/*.torrent = 257 файлов (накопленный список РАЗДАЧ, не активная качка) +# CPU 0.76% — простаивает. NetIO 290G↑/26.7G↓ (суммарно за жизнь контейнера) +``` + +Полный состав контейнеров Кра́кена: +`lampac · radarr · jellyfin · transmission · portainer · flaresolverr · +prowlarr · sonarr · watchtower · rclone · xray-reverse-bridge · hermes-kraken · cloudflared` + ## Что осталось -1. **Лимит кэша TorrServer** — сейчас дефолт. Задать ~20 ГБ, чтобы не сожрать 396 ГБ свободных. - Единственный незакрытый шаг базового плана. Не критично — диск 396 ГБ. +1. **Лимит кэша TorrServer** — сейчас дефолт (`CacheSize` 96 МБ, `UseDisk: false`). + Диск 396 ГБ свободно, на HDD TorrServer не пишет вовсе — вопрос неактуален. 2. **Шаг 7 плана — watchlist в UI Lampa** — ✅ **серверная часть сделана** 2026-09-22, - см. [[personal/plans/lampac-watchlist-plugin]]. Осталось Alex добавить плагин на ТВ пультом. + 🔴 **архитектура признана неверной**, переделывается: см. + [[personal/plans/lampac-watchlist-plugin]], разделы «ПЕРЕДЕЛКА 2» и + «✅ ПРОВЕРКА "как это реализуемо"». 3. **Проверка полосы на торрент-источнике** (remux 60–80 Мбит) — не сделана. - Первый просмотр шёл через онлайн-источник (HLS ~3–4 Мбит), полосу не проверял. -4. **Постеры/карточка в каталоге** — не сделаны, `image` пустой. +4. **Постеры/карточка в каталоге** — не сделаны, `image` пустой. Решение — брать + из Radarr (`images[].remoteUrl`) или `MediaCover/`, см. раздел выше. +5. **Автоскачка Radarr + Sonarr** — 45 monitored / очередь 6 у Radarr, + 13 monitored / очередь 19 у Sonarr. План отключения на апруве + ([[personal/plans/lampac-watchlist-plugin]], «ПЕРЕДЕЛКА 2»).