Files
obsidian-vault/family/how-to/lampac-torrents.md
T

12 KiB
Raw Blame History

Torrents в Lampa — как оно работает и как чинить

Обновлено: 2026-09-24 Связано: personal/tech/lampac-torrserver, personal/tech/lampac-deployment, family/how-to/tv-lampac-plugin, family/how-to/arr-stack-kraken Статус: ✅ работает. Приёмка Alex: «Во! теперь появились торренты. запустил F1..»


TL;DR

Пункт «Торренты» пуст / 500 / 503
→ проверь PidTor.redapi = http://jac.red   (НЕ локальный!)
→ снять кэш ответа (см. «Где на самом деле кэш» ниже)
→ docker restart lampac

Одна причина большинства поломок: redapi указывает на локальный JacRed, который отдаёт формат без поля info → PidTor падает → 500/503.


🔴 Где на самом деле кэш (исправлено 2026-09-24)

Прежняя запись «кэш лежит в cache/fdb/» неверна. Факт:

$H/lampac/cache/fdb/     → только ПУСТЫЕ каталоги 0/ 1/ 2/ … f/   (0 файлов)
$H/lampac/cache/module/  → 76 файлов без расширений, base64-ish имена
                            (OEdMn4LsmVEkyTEYgfu5dg), file = PE32 .NET DLL

cache/module/ — это сборки .NET-модулей, кэш модулей, а не JSON-ответы PidTor. Опознать модуль по содержимому:

grep -l "pidtor" $H/lampac/cache/module/*     # → файл, внутри которого PidTor.dll
strings <файл> | grep -iE "pidtor|\.dll"
# → PidTor.dll, lite/pidtor, lite/pidtor/serial/{id}, lite/pidtor/s{id}

⚠️ Перед «очистить cache/fdb/» проверь, что там есть файлы — find $H/lampac/cache/fdb -type f | wc -l. Пусто → чистка не даст ничего. Кэш модулей в cache/module/ без нужды не трогать: модули пересобираются при старте.

📌 Практический вывод: при 503 первым делом пробовать заголовок, который ещё не запрашивался (другой год / другой title) — свежий ключ не попадёт в старый кэш и даст честный ответ. docker restart lampac кэш ответов не снимает.


По каким трекерам ищет PidTor

Свой список PidTor не держит. Он идёт на {redapi}/api/v2.0/indexers/all/results?title=..&year=.. — суффикс all означает «все индексеры JacRed разом». Состав трекеров определяется стороной jac.red, а не lampac.

🔴 Prowlarr в этой цепочке не участвует. У Prowlarr свои 6 индексера (RuTracker · Kinozal · Kinozal (M) · RuTor · NoNaMe Club · Byrutor), и питает он Radarr/Sonarr (family/how-to/arr-stack-kraken). Прямого моста «Prowlarr → источники Lampa» нет; добавить трекер в Prowlarr ≠ добавить источник в плеер.

Как влиять на список источников (два пути):

Путь Как Блокер
Локальный JacRed lampac править набор трекеров в его БД ($H/lampac/data/), затем переключить redapi на http://127.0.0.1:9118 🔴 формат без info → NPE. Переключать только после появления поля info
Prowlarr в обход PidTor добавить трекеры в Prowlarr и качать ими в Radarr/Sonarr это не «источники в Lampa» — в плеере их не видно

⚠️ Шум «один источник в «Смотреть онлайн» и качество плохое» — это онлайн-балансеры (Online/OnlineRUS/OnlinePaid/SISI), а не PidTor. Качество диктует CDN источника.


Архитектура

Lampa (ТВ) → «Торренты» → PidTor (модуль lampac)
                            ↓ redapi
                       jac.red (ВНЕШНИЙ, 144.31.3.10)
                            ↓ /api/v2.0/indexers/all/results  (все индексеры)
                            ↓ MagnetUri + info{}
                       TorrServer (встроен в lampac, порт 9085 внутр.)
                            ↓
                       качает на HDD Кра́кена

🔴 Поиск раздач идёт на ВНЕШНИЙ jac.red. TorrServer только качает. Локальный JacRed есть, но несовместим по формату (нет info).

Что нужно в config-module/init.conf

"PidTor": {
  "enable": true,
  "redapi": "http://jac.red",
  "min_sid": 15
}

⚠️ Файл именно config-module/init.conf. Правки в config/init.conf не применяются и не дают ошибки — просто ничего не меняется.


Диагностика по коду ответа

Код Время Значение Что делать
503 0.001–0.035s + X-Invoke-Cache: HIT Ответ из кэша. Реальная причина скрыта Запросить новый ключ (другой год/title) для честного ответа; см. «Где на самом деле кэш»
500 0.1–1s Честная ошибка. Обычно NPE на info Смотреть redapi
200 — Работает —

🔴 503 = кэш, 500 = реальная ошибка. X-Invoke-Cache: HIT + время <0.04s — верный признак. 🔴 503 не означает «раздач нет». Это кэшированный отказ. Делать выводы о трекерах можно только по свежему (некэшированному) ответу.


🔴 Главная ловушка: два разных JacRed

ВНЕШНИЙ jac.red — поля ответа:
  [..., 'ffprobe', 'info', 'languages']                 ← info ЕСТЬ
  info = {"quality":480, "voices":["Дубляж"],
          "sizeName":"2.02 GB", "relasted":2025}

ЛОКАЛЬНЫЙ JacRed (127.0.0.1:9118) — поля ответа:
  ['Category','Details','MagnetUri','Peers','PublishDate',
   'Seeders','Size','Title','Tracker']
                                                ↑ info НЕТ → NPE

PidTor падает здесь (PidTor/Controller.cs:97):

string mediainfo = torrent.info.sizeName ?? string.Empty;
//                ^^^^^^^^^^^^^^ info == null → NullReferenceException → HTTP 500

Локальный JacRed быстрее (0.12s против 0.35s), поэтому соблазн переключить есть. Не переключать. Скорость не стоит поломки.


Проверка работоспособности

1. PidTor по фильму (то, чем ходит клиент)

эндпоинт: http://192.168.1.14:9118/lite/pidtor?title=<Название>&year=<Год>
ожидаем:  HTTP 200, непустой ответ

Проверять тем же набором параметров, что посылает клиент — ключ кэша включает title:original_title:year:language:serial. F1 без года → 200, с годом → другой ключ.

2. Прямой источник (JacRed)

{PidTor.redapi}/api/v2.0/indexers/all/results?title=<Название>&year=<Год>

⚠️ Именно маршрут /api/v2.0/indexers/all/results — тот, которым ходит PidTor. /api/v1.0/torrents тоже работает, но это другой эндпоинт; проверка через него ничего не доказывает.

3. Список раздач TorrServer

curl -s -X POST http://127.0.0.1:9118/ts/torrents \
  -H 'Content-Type: application/json' -d '{"action":"list"}'

🔴 Только такой вызов. -d '[]', -d '{}', без тела → 400. GET /ts/torrents → 404. Порт 9085 снаружи недоступен, только /ts/ через 9118.

4. Приёмка

Запустить фильм в плеере. «API отвечает 200» ≠ «работает». Приёмка только в UI.


Питфоллы

  1. 🔴 503 — это кэш, а не ошибка. Сначала снять кэш ответа, потом делать выводы. Иначе час диагностики по закэшированному отказу. ⚠️ Кэш не в cache/fdb/ (там пусто) — см. «Где на самом деле кэш»; быстрее всего запросить новый ключ (другой год/title).
  2. 🔴 503 ≠ «раздач нет». Это кэшированный отказ; выводы о трекерах делать только по свежему ответу.
  3. 🔴 Prowlarr не влияет на источники Lampa. Он питает Radarr/Sonarr; PidTor ходит на jac.red.
  4. 🔴 enabled: false у всех 86 модулей — это НОРМА. Служебное поле (расписание). Смотреть только enable.
  5. 🔴 Лог lampac не показывает исключения PidTor — docker logs пуст. Читать исходник (Controller.cs, Model.cs).
  6. 🔴 docker exec lampac python3 не работает — python3 нет в образе. Парсить конфиги скриптом снаружи через docker cp.
  7. 🔴 Конфиг — в config-module/init.conf, не в config/init.conf.
  8. 🔴 Кириллица в inline-ssh командах → BLOCKED (tirith confusable_text). Только скриптом-файлом.
  9. 🔴 Порт 9085 наружу закрыт — работать через /ts/ на 9118.
  10. ⚠️ Кириллический title в query-параметре через Mac уходит в таймаут апрува (BLOCKED) — использовать %D0%9C...-экранирование или + вместо пробела; + в URL работает (title=Мастерская+сатаны).

Урок

Единственная причина поломки — поменял рабочий параметр по соображению «локальный быстрее», не проверив формат ответа.

Правильный порядок при подозрении на внешнюю зависимость:

1. Сравнить ФОРМАТ ответа (набор полей JSON), не только код и время
2. Отсутствие поля = потенциальный NPE в потребителе
3. Только потом менять источник

Дешевле сравнить два JSON, чем ломать модуль и разбирать час.

⚠️ Второй урок (2026-09-24): не выдумывать расположение файлов. «Кэш в cache/fdb/» прожило в двух доках сутки, хотя папка пустая. Проверять факт (find … | wc -l), а не повторять запись из доки.


Связанные