{"id":47698155,"url":"https://github.com/lampac-nextgen/lampac","last_synced_at":"2026-05-23T18:01:47.051Z","repository":{"id":347003858,"uuid":"1190331181","full_name":"lampac-nextgen/lampac","owner":"lampac-nextgen","description":"Lampac Next Generation","archived":false,"fork":false,"pushed_at":"2026-05-21T16:16:13.000Z","size":87692,"stargazers_count":144,"open_issues_count":2,"forks_count":36,"subscribers_count":7,"default_branch":"main","last_synced_at":"2026-05-21T16:26:58.666Z","etag":null,"topics":["dlna","lampa","lampac","streaming","torrserver"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lampac-nextgen.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-24T07:18:10.000Z","updated_at":"2026-05-21T15:40:15.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/lampac-nextgen/lampac","commit_stats":null,"previous_names":["lampac-nextgen/lampac"],"tags_count":111,"template":false,"template_full_name":null,"purl":"pkg:github/lampac-nextgen/lampac","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lampac-nextgen%2Flampac","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lampac-nextgen%2Flampac/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lampac-nextgen%2Flampac/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lampac-nextgen%2Flampac/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lampac-nextgen","download_url":"https://codeload.github.com/lampac-nextgen/lampac/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lampac-nextgen%2Flampac/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33406444,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-23T04:15:53.637Z","status":"ssl_error","status_checked_at":"2026-05-23T04:15:53.242Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dlna","lampa","lampac","streaming","torrserver"],"created_at":"2026-04-02T16:50:13.638Z","updated_at":"2026-05-23T18:01:47.012Z","avatar_url":"https://github.com/lampac-nextgen.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Lampac Next Generation\n\n[![Build](https://github.com/lampac-nextgen/lampac/actions/workflows/build.yml/badge.svg)](https://github.com/lampac-nextgen/lampac/actions/workflows/build.yml)\n[![Test — build all projects](https://github.com/lampac-nextgen/lampac/actions/workflows/test-build.yml/badge.svg)](https://github.com/lampac-nextgen/lampac/actions/workflows/test-build.yml)\n[![Release](https://github.com/lampac-nextgen/lampac/actions/workflows/release.yml/badge.svg)](https://github.com/lampac-nextgen/lampac/actions/workflows/release.yml)\n[![Format code](https://github.com/lampac-nextgen/lampac/actions/workflows/format-code.yml/badge.svg)](https://github.com/lampac-nextgen/lampac/actions/workflows/format-code.yml)\n\n[![GitHub release (latest SemVer)](https://img.shields.io/github/v/release/lampac-nextgen/lampac?label=version)](https://github.com/lampac-nextgen/lampac/releases)\n[![GitHub tag (latest SemVer pre-release)](https://img.shields.io/github/v/tag/lampac-nextgen/lampac?include_prereleases\u0026label=pre-release)](https://github.com/lampac-nextgen/lampac/tags)\n[![License: MIT](https://img.shields.io/github/license/lampac-nextgen/lampac)](LICENSE)\n[![.NET 10](https://img.shields.io/badge/.NET-10.0-512BD4?logo=dotnet)](https://dotnet.microsoft.com/)\n[![Docker — GHCR image](https://img.shields.io/badge/ghcr.io-lampac--nextgen%2Flampac-2496ED?logo=github)](https://github.com/lampac-nextgen/lampac/pkgs/container/lampac)\n[![GitHub Repo stars](https://img.shields.io/github/stars/lampac-nextgen/lampac?style=flat\u0026logo=github)](https://github.com/lampac-nextgen/lampac/stargazers)\n[![GitHub forks](https://img.shields.io/github/forks/lampac-nextgen/lampac?style=flat\u0026logo=github)](https://github.com/lampac-nextgen/lampac/forks)\n[![GitHub last commit](https://img.shields.io/github/last-commit/lampac-nextgen/lampac)](https://github.com/lampac-nextgen/lampac/commits/main)\n[![GitHub Issues](https://img.shields.io/github/issues/lampac-nextgen/lampac)](https://github.com/lampac-nextgen/lampac/issues)\n\n[![Telegram](https://img.shields.io/badge/Telegram-Chat-2CA5E0?logo=telegram\u0026logoColor=white)](https://t.me/LampacTalks/13998)\n[![DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/lampac-nextgen/lampac)\n\n\u003e Самохостируемый backend-сервер для [Lampa](https://github.com/yumata/lampa). Собирает ссылки на публично доступный контент с 70+ источников и отдаёт их Lampa в виде плагинов. Построен на ASP.NET Core (.NET 10).\n\n---\n\n[Lampa](https://github.com/yumata/lampa) — бесплатное приложение для просмотра информации о фильмах. **Lampac NextGen** расширяет его: собирает ссылки с десятков российских, украинских, аниме- и западных источников, отдаёт в виде JSON API, и дополнительно предоставляет TorrServer, DLNA, транскодинг, синхронизацию закладок и многое другое. Порт по умолчанию — **9118**.\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eВозможности\u003c/strong\u003e\u003c/summary\u003e\n\n- **70+ VOD, аниме и 18+ источников** — провайдеры в `Modules/OnlineRUS`, `OnlinePaid`, `OnlineAnime`, `OnlineENG`, `OnlineUKR`, `OnlineGEO`, `Adult/`\n- **TorrServer** — встроенный торрент-сервер как подпроцесс\n- **DLNA/UPnP** — медиасервер для локальных файлов\n- **JacRed** — агрегатор торрент-индексаторов (совместим с Jackett)\n- **Transcoding** — транскодинг через FFmpeg (до 5 потоков)\n- **Tracks** — управление субтитрами и дорожками (FFprobe)\n- **Sync** — кросс-девайсная синхронизация закладок и истории (SQLite)\n- **TimeCode** — сохранение позиции воспроизведения\n- **TmdbProxy** — локальный кеш TMDB API\n- **LampaWeb** — встроенный хостинг Lampa UI (авто-обновление с GitHub)\n- **WebLog** — отладка HTTP и Playwright-трафика в реальном времени\n- **Playwright** — автоматизация Chromium/Firefox для обхода JS-защит\n- **RCH** — WebSocket-реле для клиентов за NAT\n- **WAF** — брандмауэр с геоблокировкой, лимитами и защитой от брутфорса\n- **GeoIP** — MaxMind GeoLite2 (базы включены в поставку)\n- **Горячая перезагрузка конфига** — `init.conf` применяется без перезапуска\n- **Многоплатформенность** — `linux/amd64`, `linux/arm64`\n\n\u003c/details\u003e\n\n---\n\n## Содержание\n\n- [Lampac Next Generation](#lampac-next-generation)\n  - [Содержание](#содержание)\n  - [Быстрый старт](#быстрый-старт)\n    - [Docker](#docker)\n    - [Нативная установка (Linux)](#нативная-установка-linux)\n    - [Нативная установка (Windows)](#нативная-установка-windows)\n    - [Ручная сборка](#ручная-сборка)\n  - [Конфигурация](#конфигурация)\n  - [Модули](#модули)\n  - [Провайдеры контента](#провайдеры-контента)\n  - [API](#api)\n  - [Архитектура](#архитектура)\n  - [Зависимости](#зависимости)\n  - [Структура проекта](#структура-проекта)\n  - [Дополнительная документация](#дополнительная-документация)\n\n---\n\n## Быстрый старт\n\n### Docker\n\n**Основной сценарий** — `docker-compose.yaml`, порт **9118**.\n\n```bash\ngit clone https://github.com/lampac-nextgen/lampac.git\ncd lampac\n\nmkdir -p lampac-docker/config lampac-docker/plugins\ncp config/example.init.conf lampac-docker/config/init.conf\nprintf '%s' 'ваш_пароль_root' \u003e lampac-docker/config/passwd\n\n# Раскомментируйте блок volumes в docker-compose.yaml\ndocker compose up -d\n```\n\nПо умолчанию все тома закомментированы — контейнер стартует с `init.conf` и `passwd` из образа. Рабочая директория в контейнере — `/lampac`; файлы читаются из её корня, а не из подкаталога `config/`.\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eТома и сеть\u003c/strong\u003e\u003c/summary\u003e\n\n| Путь на хосте | Путь в контейнере | Назначение |\n| --- | --- | --- |\n| `./lampac-docker/config/passwd` | `/lampac/passwd` | Пароль root (WebLog, служебные функции) |\n| `./lampac-docker/config/init.conf` | `/lampac/init.conf` | Конфигурация |\n| `./lampac-docker/plugins/lampainit.js` | `/lampac/plugins/override/lampainit.js` | Переопределение клиентского плагина |\n| `./lampac-docker/cache` | `/lampac/cache` | Кеш |\n| `./lampac-docker/database` | `/lampac/database` | БД (Sync, TimeCode, SISI) |\n| `./lampac-docker/mods/\u003cName\u003e` | `/lampac/mods/\u003cName\u003e` | Пользовательские модули |\n\nСеть по умолчанию — bridge с IP `10.10.10.10`. Для `host`-режима раскомментируйте `network_mode: host` в compose-файле и согласуйте блоки `ports` / `networks`.\n\nМинимальный пример сервиса:\n\n```yaml\nservices:\n  lampac:\n    image: ghcr.io/lampac-nextgen/lampac\n    ports:\n      - \"9118:9118\"\n    shm_size: 1024mb\n    restart: unless-stopped\n    volumes:\n      - ./lampac-docker/config/passwd:/lampac/passwd\n      - ./lampac-docker/config/init.conf:/lampac/init.conf\n      - ./lampac-docker/plugins/lampainit.js:/lampac/plugins/override/lampainit.js\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eDev-режим (порт 29118)\u003c/strong\u003e\u003c/summary\u003e\n\n`docker-compose.dev.yaml` — отдельная инстанция на порту **29118** для разработки. Тома включены по умолчанию.\n\n```bash\nmkdir -p lampac-docker/config lampac-docker/plugins\ncp config/example.init.conf lampac-docker/config/development.init.conf\n# В development.init.conf установите: \"listen\".\"port\": 29118\n\nprintf '%s' 'ваш_пароль_root' \u003e lampac-docker/config/passwd\ncp Modules/LampaWeb/plugins/lampainit.js lampac-docker/plugins/lampainit.js\n\ndocker compose -f docker-compose.dev.yaml up -d\n```\n\n\u003e Оба compose-файла используют `container_name: lampac` — одновременный запуск без правки невозможен.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eУправление модулями в Docker\u003c/strong\u003e\u003c/summary\u003e\n\nСостав загружаемых модулей задаётся двумя механизмами:\n\n1. **`BaseModule.SkipModules`** в `init.conf` — имена модулей, которые не загружаются даже если код есть в образе.\n2. **`manifest.json`** в каталоге модуля — ключ `\"enable\": true|false`. Часть модулей ([AdminPanel](Modules/AdminPanel/manifest.json), [ExternalBind](Modules/ExternalBind/manifest.json)) поставляется с `\"enable\": false`.\n\nЧтобы включить выключенный модуль без пересборки образа: скопируйте его каталог, отредактируйте `manifest.json` и смонтируйте в `/lampac/module/\u003cName\u003e/` (штатный) или `/lampac/mods/\u003cName\u003e/` (пользовательский).\n\n\u003c/details\u003e\n\n---\n\n### Нативная установка (Linux)\n\nПоддерживаются Debian/Ubuntu, amd64 и arm64. Скрипт устанавливает .NET 10 runtime, создаёт системного пользователя `lampac` и регистрирует systemd-сервис.\n\n```bash\n# Установка\ncurl -fsSL https://raw.githubusercontent.com/lampac-nextgen/lampac/main/install.sh | sudo bash\n\n# Обновление\ncurl -fsSL https://raw.githubusercontent.com/lampac-nextgen/lampac/main/install.sh | sudo bash -s -- --update\n\n# Проверка обновления без изменений\ncurl -fsSL https://raw.githubusercontent.com/lampac-nextgen/lampac/main/install.sh | sudo bash -s -- --update --dry-run\n\n# Пред-релиз\ncurl -fsSL https://raw.githubusercontent.com/lampac-nextgen/lampac/main/install.sh | sudo bash -s -- --pre-release\n\n# Удаление\ncurl -fsSL https://raw.githubusercontent.com/lampac-nextgen/lampac/main/install.sh | sudo bash -s -- --remove\n\n# Подробный лог при установке (для диагностики ошибок)\ncurl -fsSL https://raw.githubusercontent.com/lampac-nextgen/lampac/main/install.sh | sudo bash -s -- --verbose\n\n# Подробный лог при обновлении (для диагностики ошибок)\ncurl -fsSL https://raw.githubusercontent.com/lampac-nextgen/lampac/main/install.sh | sudo bash -s -- --update --verbose\n```\n\n```bash\n# Управление сервисом\nsystemctl status lampac\nsystemctl restart lampac\njournalctl -u lampac -f\n```\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eПеременные окружения\u003c/strong\u003e\u003c/summary\u003e\n\n| Переменная | По умолчанию | Описание |\n| --- | --- | --- |\n| `LAMPAC_INSTALL_ROOT` | `/opt/lampac` | Директория установки |\n| `LAMPAC_USER` | `lampac` | Системный пользователь |\n| `LAMPAC_UID` | `1000` | UID (если занят — выбирается свободный) |\n| `LAMPAC_GID` | `1000` | GID (если занят — выбирается свободный) |\n| `LAMPAC_PORT` | `9118` | Порт (для подсказки после установки) |\n| `LAMPAC_GITHUB_REPO` | `lampac-nextgen/lampac` | GitHub-репозиторий релизов |\n| `LAMPAC_DOTNET_ROOT` | `/usr/share/dotnet` | Путь установки .NET |\n| `LAMPAC_DOTNET_CHANNEL` | `10.0` | Версия .NET runtime |\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eЧто сохраняется при обновлении (rsync excludes)\u003c/strong\u003e\u003c/summary\u003e\n\n`--update` использует `rsync --delete` — удаляет файлы отсутствующие в релизе, но следующие пути **защищены**:\n\n| Путь | Описание |\n| --- | --- |\n| `install.sh` | Сам скрипт |\n| `init.conf`, `init.yaml` | Конфигурация |\n| `mods/` | Пользовательские модули |\n| `data/kinoukr.json`, `data/PizdatoeDb.json` | Локальные БД |\n| `*.db`, `*.db-shm`, `*.db-wal` | SQLite (Sync, SISI, TimeCode) |\n| `logs/`, `cache/` | Логи и кеш |\n| `TorrServer`, `torrserver/`, `data/ts/` | TorrServer и его данные |\n| `.local/`, `.aspnet/`, `.claude/`, `.config/`, `.playwright/` | Домашние директории пользователя |\n| `users.json`, `passwd`, `current.conf`, `database/` | Пользовательские данные |\n| `wwwroot/*.js` | Пользовательские JS (темы, кнопки) |\n| `wwwroot/lampa-main/` | Кеш Lampa UI |\n| `plugins/override/` | Переопределения плагинов |\n| `notifications_date.txt` | Состояние уведомлений |\n| `excludes.conf` | Файл дополнительных исключений |\n\nЧтобы защитить свои файлы, создайте `excludes.conf` рядом с `Core.dll`:\n\n```bash\n# /opt/lampac/excludes.conf — одно исключение на строку, # — комментарий\nmy_custom_folder/\nconfig/local.conf\n*.custom\n```\n\nПути относительно `LAMPAC_INSTALL_ROOT`, для папок — trailing slash, поддерживаются glob-паттерны.\n\n\u003c/details\u003e\n\n---\n\n### Нативная установка (Windows)\n\n1. **Установите .NET 10 Runtime**\n   Скачайте и установите **.NET 10.0 Runtime** с [официального сайта](https://dotnet.microsoft.com/download/dotnet/10.0) (выберите `ASP.NET Core Runtime` под Windows).\n\n2. **Скачайте релиз**\n   Перейдите на [страницу релизов](https://github.com/lampac-nextgen/lampac/releases) и скачайте архив `lampac-nextgen.zip`. Распакуйте в любое место, например `C:\\lampacNG`.\n\n3. **Настройте конфигурацию**\n   Переименуйте `example.init.conf` в `init.conf` и отредактируйте под свои нужды.\n\n4. **Запустите сервер**\n   Откройте командную строку (cmd или PowerShell) в распакованной папке и выполните команду: `dotnet Core.dll`\n\nСервер запустится на порту 9118 (или другом, указанном в init.conf). Для остановки нажмите `Ctrl+C`.\n\n\u003e **NOTE**\n\u003e Для запуска в фоне можно использовать NSSM (создать сервис в Windows):\n\u003e\n\u003e - Для создания сервиса необходимо скачать инструмент [NSSM](https://nssm.cc/download) и распаковать, например, в `C:\\nssm`\n\u003e\n\u003e - Создание сервиса через **CMD** от имени администратора:\n\u003e\n\u003e ```cmd\n\u003e \"C:\\nssm\\win64\\nssm.exe\" install Lampac \"C:\\Program Files\\dotnet\\dotnet.exe\" \"C:\\lampacNG\\Core.dll\"\n\u003e \"C:\\nssm\\win64\\nssm.exe\" set Lampac AppDirectory \"C:\\lampacNG\"\n\u003e \"C:\\nssm\\win64\\nssm.exe\" set Lampac Start SERVICE_AUTO_START\n\u003e \"C:\\nssm\\win64\\nssm.exe\" start Lampac\n\u003e ```\n\u003e\n\u003e - Удаление сервиса:\n\u003e\n\u003e ```cmd\n\u003e \"C:\\nssm\\win64\\nssm.exe\" stop Lampac\n\u003e \"C:\\nssm\\win64\\nssm.exe\" remove Lampac\n\u003e ```\n\u003e\n\u003e Важно помнить, что для обновления сервиса необходимо сначала его остановить, затем заменить файлы в папке `C:\\lampacNG` на новые из архива, и после этого снова запустить сервис.\n---\n\n### Ручная сборка\n\n**Требования:** .NET SDK 10.0+\n\n```bash\n./build.sh                          # сборка в publish/\nRUNTIME_ID=linux-arm64 ./build.sh   # кросс-компиляция\n\ndotnet publish Core/Core.csproj -c Release -o publish   # напрямую\ndotnet build NextGen.slnx                               # проверка компиляции всего solution\n\ncd publish \u0026\u0026 dotnet Core.dll\n```\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eОпции build.sh\u003c/strong\u003e\u003c/summary\u003e\n\n| Флаг | Описание |\n| --- | --- |\n| `--clean` | Удалить bin/ и obj/ из всех проектов |\n| `--format` | Форматирование кода (`dotnet format`) |\n| `-o /path` | Кастомная директория вывода |\n| `-c Debug` | Debug-конфигурация |\n\n\u003c/details\u003e\n\n---\n\n## Конфигурация\n\nКонфигурация хранится в `init.conf` (JSON) или `init.yaml` рядом с `Core.dll`. Проверяется каждую секунду и **перезагружается без перезапуска**. Резервные копии — в `database/backup/init/`.\n\nПримеры: [`config/example.init.conf`](config/example.init.conf), [`config/example.init.yaml`](config/example.init.yaml).\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eОсновные параметры\u003c/strong\u003e\u003c/summary\u003e\n\n```jsonc\n{\n  // Режим низкой памяти (~−140 МБ RSS в типичном сценарии, см. раздел ниже)\n  \"lowMemoryMode\": false,\n\n  // Сетевые настройки\n  \"listen\": {\n    \"ip\": \"0.0.0.0\",\n    \"port\": 9118,\n    \"scheme\": \"http\",\n    \"version\": true,\n    \"ResponseCancelAfter\": 15    // таймаут ответа, секунды\n  },\n\n  // Модули\n  \"BaseModule\": {\n    \"SkipModules\": [],           // имена модулей для отключения\n    \"LoadModules\": [\".*\"],       // whitelist: имя, группа (OnlineUKR), маска (LME.*)\n    \"ValidateRequest\": true,\n    \"BlockedBots\": true\n  },\n\n  // Кеш\n  \"cache\": {\n    \"extend\": 180                // продление TTL, минуты\n  },\n\n  // Playwright\n  \"chromium\": { \"enable\": false, \"count\": 1, \"restart\": 3600 },\n  \"firefox\":  { \"enable\": false, \"count\": 1 },\n\n  // Remote Client Hub (WebSocket-реле для клиентов за NAT)\n  \"rch\": { \"enable\": false, \"requiredConnected\": 1 },\n\n  // Логирование в файл (logs/, 14 дней)\n  \"serilog\": false,\n\n  // Управление памятью GC\n  \"GC\": {\n    \"Concurrent\": true,\n    \"ConserveMemory\": 0,\n    \"HighMemoryPercent\": 90,\n    \"RetainVM\": false\n  },\n\n  // Шифрование потоков\n  \"kit\": { \"aesgcmkeyName\": \"\" }\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eРежим низкой памяти (lowMemoryMode)\u003c/strong\u003e\u003c/summary\u003e\n\nВ корне `init.conf` или `init.yaml` задайте:\n\n```json\n\"lowMemoryMode\": true\n```\n\nПо умолчанию значение `false`. В типичной установке рабочая память процесса получается **примерно на 140 МБ меньше**, чем без этого режима (оценка; фактический выигрыш зависит от ОС, Docker-лимитов и характера нагрузки).\n\n**Что меняется внутри:** уменьшаются размеры пулов буферов и вспомогательных аллокаций для JSON/строк; базы GeoIP открываются через memory-mapped файл вместо полной загрузки в RAM; не поднимается агрессивный минимум `ThreadPool`; для прокси изображений NetVips работает без оперативного кэша; при простое чаще срабатывает уплотнение кучи (в т.ч. LOH); часть модулей отключает второстепенные кеши.\n\n**Компромисс:** при очень высокой параллельной нагрузке возможно немного ниже пиковая пропускная способность по сравнению с режимом по умолчанию.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eWAF и безопасность\u003c/strong\u003e\u003c/summary\u003e\n\n```jsonc\n{\n  \"WAF\": {\n    \"enable\": true,\n    \"countryAllow\": [\"RU\", \"UA\", \"BY\"],   // геоблокировка (пустой — все страны)\n    \"whiteIps\": [\"192.168.1.0/24\"],        // белый список IP/CIDR\n    \"bruteForceProtection\": true,\n    \"limit_map\": {\n      \"/lite/\": 10,\n      \"/externalids\": 10\n    }\n  }\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eАутентификация (accsdb)\u003c/strong\u003e\u003c/summary\u003e\n\n```jsonc\n{\n  \"accsdb\": {\n    \"enable\": true,\n    \"accounts\": \"user1:2026-12-31,user2:2027-06-01\",\n    // или подробный формат:\n    \"users\": [\n      { \"id\": \"user1\", \"expires\": \"2026-12-31\" },\n      { \"id\": \"user2\", \"expires\": \"2027-06-01\" }\n    ]\n  }\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eVOD, SISI и плагины Lampa UI\u003c/strong\u003e\u003c/summary\u003e\n\n```jsonc\n{\n  // VOD-плагин\n  \"online\": {\n    \"name\": \"Lampac NextGen\",\n    \"version\": true,\n    \"btn_priority_forced\": true\n  },\n\n  // SISI (18+)\n  \"sisi\": {\n    \"lgbt\": false,\n    \"NextHUB\": true,\n    \"history\": { \"enable\": false }\n  },\n\n  // Статистика (/stats/*)\n  \"openstat\": { \"enable\": false },\n\n  // Плагины Lampa UI\n  \"LampaWeb\": {\n    \"initPlugins\": {\n      \"online\": true, \"sisi\": true, \"torrserver\": true,\n      \"timecode\": true, \"jacred\": true, \"tmdbProxy\": true,\n      \"cubProxy\": true, \"pirate_store\": true\n    }\n  }\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eКонфигурация провайдеров (пример)\u003c/strong\u003e\u003c/summary\u003e\n\nКаждый провайдер настраивается в своём разделе `init.conf`:\n\n```jsonc\n{\n  \"Rezka\":  { \"enable\": true, \"host\": \"https://rezka.ag\", \"priority\": 1 },\n  \"Filmix\": { \"enable\": true, \"host\": \"https://filmix.biz\", \"token\": \"TOKEN\", \"priority\": 2 },\n  \"KinoPub\":{ \"enable\": true, \"token\": \"TOKEN\" },\n  \"Kodik\":  { \"enable\": true, \"token\": \"TOKEN\" }\n}\n```\n\n\u003c/details\u003e\n\n---\n\n## Модули\n\nПо умолчанию в `SkipModules` ([`config/base.conf`](config/base.conf)): **Catalog**, **DLNA**, **Tracks**, **Transcoding**, **WebLog**, **CacheMedia**, **ProxyLimiter**, **ForkPlayerXML**, **MsxNative**, **TelegramAuth**, **TelegramAuthBot**. WAF и accsdb тоже отключены по умолчанию.\n\n\u003e Служебные модули **Sync**, **SyncEvents**, **Storage** и **TimeCode** в `SkipModules` **нет** — они загружаются вместе с ядром, пока их не добавите в `SkipModules` вручную.\n\n\u003e [!WARNING]\n\u003e Модули **DLNA**, **Tracks**, **Transcoding** и **Catalog** не выполняют экранирование входящих запросов. Не включайте их на публично доступном VPS без ограничения доступа через firewall или reverse proxy.\n\n| Модуль | По умолч. | Описание |\n| --- | :---: | --- |\n| **Online** | ✅ | VOD-ядро: плагин `/online.js`, агрегатор `/lite/*`. Провайдеры в `Modules/Online*/`. WAF: 10 req/s. [README](Online/README.md) |\n| **SISI** | ✅ | 18+: плагин `/sisi.js`, SQLite (история, закладки). Платформы в `Modules/Adult/*`. [README](SISI/README.md) |\n| **LampaWeb** | ✅ | Хостинг Lampa UI. Авто-обновление с GitHub каждые 90 мин. |\n| **TorrServer** | ✅ | Управление процессом TorrServer, прокси `/ts/`. Случайный пароль за сессию. |\n| **JacRed** | ✅ | Агрегатор торрент-индексаторов (Rutor, Kinozal, RuTracker, NNMClub, Toloka, Bitru и др.). |\n| **NextHUB** | ✅ | 18+ витрина на YAML (`Modules/NextHUB/sites/`). Маршрут `/nexthub`. WAF: 5 req/s. [README](Modules/NextHUB/README.md) |\n| **TmdbProxy** | ✅ | Локальный кеш TMDB API (`cache/tmdb/`). |\n| **CubProxy** | ✅ | HTTP/HTTPS прокси с файловым кешем (`cache/cub/`). |\n| **TimeCode** | ✅ | Сохранение и восстановление позиции воспроизведения. SQLite. |\n| **Kit** | ✅ | Шифрование потоков (CryptoKit), конфиг `kit` в `init.conf`. |\n| **PidTor** | ✅ | Источник PidTor, маршрут `/lite/pidtor`. |\n| **Catalog** | ⛔ | Браузер каталогов из YAML (`sites/`). Маршрут `/catalog/`. Только в доверенной сети. |\n| **DLNA** | ⛔ | DLNA/UPnP медиасервер. Форматы: mp4, mkv, ts, webm, avi, flac и др. Только в доверенной сети. |\n| **Sync** | ✅ | Синхронизация закладок и истории. Эндпоинты `/storage/`, `/bookmark/`. SQLite. Отключение: добавьте `Sync` в `SkipModules`. |\n| **SyncEvents** | ✅ | Трансляция событий синхронизации через WebSocket (NwsEvents). Отключение: `SyncEvents` в `SkipModules`. |\n| **Storage** | ✅ | Хранилище данных для Sync, NWS (`onlyreg`). Отключение: `Storage` в `SkipModules`. |\n| **Tracks** | ⛔ | Субтитры и дорожки (`database/tracks/`), интеграция FFprobe (`/ffprobe`). Только в доверенной сети. |\n| **Transcoding** | ⛔ | HLS/DASH транскодинг FFmpeg. До 5 потоков, таймаут 5 мин. `cache/transcoding/`. Только в доверенной сети. |\n| **WebLog** | ⛔ | Страница `/weblog`: поток HTTP и Playwright-событий через WebSocket. Требует пароль root. Не включайте публично. |\n| **CacheMedia** | ⛔ | Кеширование потоков SISI (события `ProxyApiCacheStream` для отдельных платформ). |\n| **ProxyLimiter** | ⛔ | Лимиты параллельных запросов к медиапрокси для SISI. Конфиг `ProxyLimiter`. [README](Modules/Proxy/ProxyLimiter/README.md) |\n| **ForkPlayerXML** | ⛔ | ForkPlayer: плейлисты `/fxml`, редирект `/` для клиента ForkPlayer. [README](Modules/ForkPlayerXML/README.md) |\n| **MsxNative** | ⛔ | MSX/MS X: адаптация Sisi и доступ при `accsdb`. [README](Modules/MsxNative/README.md) |\n| **WatchTogether** | ⛔ | Синхронный просмотр (WebSocket-комнаты). |\n| **AdminPanel** | ⛔ (manifest) | Веб-админка и JSON API (`/adminpanel/`). `\"enable\": false` в [manifest.json](Modules/AdminPanel/manifest.json). |\n| **ExternalBind** | ⛔ (manifest) | Привязка Lite/Online для удалённых URL (FilmixPro, Rezka, KinoPub). [README](Modules/ExternalBind/README.md) |\n| **TelegramAuth** | ⛔ | HTTP API `/tg/auth/…`, интеграция с accsdb. [README](Modules/Community/TelegramAuth/README.md) |\n| **TelegramAuthBot** | ⛔ | Telegram-бот для привязки устройств (long polling). [README](Modules/Community/TelegramAuthBot/README.md) |\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eПользовательские модули\u003c/strong\u003e\u003c/summary\u003e\n\nСоздайте подкаталог в `mods/` с `manifest.json` и `.cs`-файлами — Roslyn скомпилирует при запуске:\n\n```json\n{\n  \"name\": \"MyModule\",\n  \"description\": \"Описание модуля\",\n  \"version\": \"1.0\",\n  \"enable\": true,\n  \"dynamic\": true\n}\n```\n\n`dynamic: true` — горячая пересборка при изменении `.cs` файлов без перезапуска сервера. Ориентируйтесь на примеры в `Modules/*/manifest.json`.\n\n\u003c/details\u003e\n\n---\n\n## Провайдеры контента\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eVOD — онлайн-кино\u003c/strong\u003e\u003c/summary\u003e\n\n| Провайдер | Группа | Примечания |\n| --- | --- | --- |\n| `Alloha` | OnlinePaid | |\n| `CDNvideohub` | OnlineRUS | |\n| `Collaps` | OnlineRUS | Включая DASH-вариант |\n| `FanCDN` | OnlineRUS | |\n| `Filmix` | OnlinePaid | FilmixPartner, FilmixTV варианты |\n| `FlixCDN` | OnlineRUS | |\n| `GetsTV` | OnlinePaid | |\n| `HDVB` | OnlineRUS | |\n| `IptvOnline` | OnlinePaid | |\n| `iRemux` | OnlinePaid | |\n| `Kinobase` | OnlineRUS | |\n| `Kinogo` | OnlineRUS | |\n| `Kinotochka` | OnlineRUS | |\n| `Kinoflix` / `AsiaGe` / `Geosaitebi` | OnlineGEO | |\n| `KinoPub` | OnlinePaid | Требует токен |\n| `LeProduction` | OnlineRUS | |\n| `Mirage` | OnlineRUS | |\n| `Phantom` | OnlineRUS | |\n| `PiTor` | Online | Стриминг через торрент |\n| `PizdatoeHD` | OnlineRUS | |\n| `Rezka` / `RezkaPremium` | OnlinePaid | |\n| `RutubeMovie` | OnlineRUS | |\n| `SakhTV` | OnlinePaid | |\n| `Spectre` | OnlineRUS | |\n| `VeoVeo` | OnlineRUS | Офлайн БД `data/veoveo.json` |\n| `Vibix` | OnlineRUS | |\n| `VideoDB` / `Videoseed` | OnlineRUS | Маршруты `/lite/videodb`, `/lite/videoseed` |\n| `VkMovie` | OnlineRUS | |\n| `VoKino` | OnlinePaid | |\n| `Zetflix` / `ZetflixDB` | OnlineRUS | |\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eАниме (12 источников)\u003c/strong\u003e\u003c/summary\u003e\n\n| Провайдер | Сервис |\n| --- | --- |\n| `AniLiberty` | AniLiberty |\n| `AniLibria` | AniLibria |\n| `AniMedia` | AniMedia |\n| `AnimeGo` | AnimeGo |\n| `AnimeLib` | AnimeLib |\n| `Animebesst` | AnimeBesst |\n| `Animevost` | Animevost |\n| `Dreamerscast` | Dreamerscast |\n| `Kodik` | Kodik (универсальный, VOD + аниме) |\n| `Mikai` | Mikai |\n| `MoonAnime` | MoonAnime |\n| `AnimeON` | AnimeON |\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eАнглоязычный контент (10 источников)\u003c/strong\u003e\u003c/summary\u003e\n\n| Провайдер | Сервис |\n| --- | --- |\n| `AutoEmbed` | AutoEmbed |\n| `HydraFlix` | HydraFlix |\n| `MovPI` | MovPI |\n| `PlayEmbed` | PlayEmbed |\n| `RgShows` | RgShows |\n| `SmashyStream` | SmashyStream |\n| `TwoEmbed` | TwoEmbed |\n| `VidLink` | VidLink |\n| `VidSrc` | VidSrc |\n| `Videasy` | Videasy |\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eУкраинские CDN (8 источников)\u003c/strong\u003e\u003c/summary\u003e\n\n| Провайдер | Сервис |\n| --- | --- |\n| `Ashdi` | Ashdi |\n| `BamBoo` | BamBoo |\n| `Eneyida` | Eneyida |\n| `HdvbUA` | HDVB (UA) |\n| `Kinoukr` | KinoUkr (офлайн БД `data/kinoukr.json`, ~130k записей) |\n| `Tortuga` | Tortuga |\n| `UAFilm` | UAFilm |\n| `UaKino` | UaKino |\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eSISI — контент 18+ (15 платформ)\u003c/strong\u003e\u003c/summary\u003e\n\n| Платформа | Маршруты |\n| --- | --- |\n| BongaCams | `/bgs` |\n| Chaturbate | `/chu` |\n| Ebalovo | `/elo` |\n| Eporner | `/epr` |\n| HQporner | `/hqr` |\n| PornHub | `/phub`, `/phubgay`, `/phubsml` |\n| PornHubPremium | `/phubprem` |\n| Porntrex | `/ptx` |\n| Runetki | `/runetki` |\n| Spankbang | `/sbg` |\n| Tizam | `/tizam` |\n| Xhamster | `/xmr`, `/xmrgay`, `/xmrsml` |\n| Xnxx | `/xnx` |\n| Xvideos | `/xds`, `/xdsgay`, `/xdssml` |\n| XvideosRED | `/xdsred` |\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eNextHUB — витрина 18+ на YAML\u003c/strong\u003e\u003c/summary\u003e\n\nМодуль **NextHUB** — витрина сайтов 18+ по YAML-описаниям из `Modules/NextHUB/sites/` (имя файла без расширения = значение параметра `plugin` в URL).\n\n- **Маршрут:** `GET /nexthub?plugin=\u003cname\u003e` — параметры: `plugin` (обязателен), опционально `search`, `sort`, `cat`, `model`, `pg`\n- **Конфиг:** `NextHUB.sites_enabled` — если задан, допускает только плагины, имя которых содержится в строке (например `pornhub,beeg`)\n- **Переопределения:** `Modules/NextHUB/override/{plugin}.yaml` или `_.yaml` — слияние поверх базового YAML\n- **WAF:** лимит 5 req/s на `/nexthub`\n\n[Подробнее — README](Modules/NextHUB/README.md)\n\n\u003c/details\u003e\n\n---\n\n## API\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eCore\u003c/strong\u003e\u003c/summary\u003e\n\n| Метод | Путь | Описание |\n| --- | --- | --- |\n| `GET` | `/version` | Версия сервера |\n| `GET` | `/api/headers` | Заголовки текущего запроса |\n| `GET` | `/api/geo[?ip=]` | GeoIP-локация IP-адреса |\n| `GET` | `/api/myip` | IP-адрес клиента |\n| `GET` | `/api/chromium/ping` | Пинг Playwright (`pong`) |\n| `POST` | `/rch/result?id=` | RCH-реле: запись результата (макс. 10 МБ) |\n| `POST` | `/rch/gzresult?id=` | RCH-реле: запись gzip-результата (макс. 10 МБ) |\n| `WS` | `/ws` | NativeWebSocket для RCH push |\n| `GET` | `/stats/gc` | Память: heap, WorkingSet, PrivateMemory |\n| `GET` | `/stats/request` | Счётчики запросов, активные соединения, топ медленных путей |\n| `GET` | `/stats/tempdb` | Кеши и пулы буферов |\n| `GET` | `/stats/threadpool` | Диагностика ThreadPool |\n| `GET` | `/stats/browser/context` | Состояние Playwright (контексты, счётчики) |\n\n\u003e `/stats/*` (кроме `/stats/gc`) доступны только при `openstat.enable: true`.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eOnline / SISI / Модули\u003c/strong\u003e\u003c/summary\u003e\n\n**Online (VOD)**\n\n| Метод | Путь | Описание |\n| --- | --- | --- |\n| `GET` | `/online.js` | Lampa VOD-плагин |\n| `GET` | `/online/js/{token}` | Плагин с авторизацией по токену |\n| `GET` | `/lite/{provider}` | Список источников от провайдера |\n| `GET` | `/externalids` | Маппинг ID (TMDB ↔ KinoPoisk и т.д.) |\n| `GET` | `/lifeevents` | SSE-поток событий здоровья провайдеров |\n\n**SISI (18+)**\n\n| Метод | Путь | Описание |\n| --- | --- | --- |\n| `GET` | `/sisi.js` | Lampa SISI-плагин |\n| `GET` | `/sisi/js/{token}` | Плагин с авторизацией по токену |\n| `GET` | `/{provider}` | Контент платформы (напр. `/phub`, `/xnx`) |\n| `GET` | `/sisi/bookmark` | Управление закладками |\n| `GET` | `/sisi/history` | История просмотров |\n\n**Модули**\n\n| Метод | Путь | Описание |\n| --- | --- | --- |\n| `GET` | `/catalog/{site}/…` | Каталог сайтов |\n| `GET` | `/dlna/…` | DLNA медиасервер |\n| `GET` | `/storage/…` | Хранилище Sync |\n| `GET` | `/bookmark/…` | Закладки Sync |\n| `GET` | `/timecode/…` | Позиции воспроизведения |\n| `GET` | `/tmdb/…` | TMDB прокси/кеш |\n| `GET` | `/transcoding/…` | HLS/DASH транскодинг |\n| `GET` | `/ffprobe` | Метаданные дорожек (FFprobe) |\n| `GET` | `/nexthub` | NextHUB: браузер 18+ по YAML |\n| `GET` | `/nexthub/vidosik` | NextHUB: просмотр элемента (`uri`, `related`) |\n| `GET` | `/ts/…` | TorrServer |\n| `GET` | `/weblog` | Отладка HTTP/Playwright в реальном времени |\n| `GET` | `/fxml` … | ForkPlayer: JSON/XML-плейлисты (**ForkPlayerXML**, см. модуль [`Modules/ForkPlayerXML/README.md`](Modules/ForkPlayerXML/README.md)) |\n\n\u003c/details\u003e\n\n---\n\n## Архитектура\n\n```text\n┌─────────────────────────────────────────────────────────────────┐\n│  Core  (ASP.NET Core Web Host, порт 9118)                       │\n│  Program.cs → Startup.cs → Middleware Pipeline                  │\n├────────────────────┬────────────────────────────────────────────┤\n│  Shared (lib)      │  BaseController, CoreInit (конфиг),        │\n│                    │  модели, сервисы, Playwright, HTTP-пулы    │\n├────────────────────┴────────────────────────────────────────────┤\n│  Динамически загружаемые модули                                 │\n│  ┌─────────┐ ┌─────────┐ ┌──────────┐ ┌───────────────────┐     │\n│  │ Online  │ │  SISI   │ │ Catalog  │ │    LampaWeb       │     │\n│  │(VOD API)│ │ + Adult │ │(каталог) │ │(Lampa UI)         │     │\n│  └─────────┘ └─────────┘ └──────────┘ └───────────────────┘     │\n│  ┌─────────┐ ┌─────────┐ ┌──────────┐ ┌───────────────────┐     │\n│  │TorrServr│ │  DLNA   │ │  JacRed  │ │   Transcoding     │     │\n│  └─────────┘ └─────────┘ └──────────┘ └───────────────────┘     │\n│  ┌─────────┐ ┌─────────┐ ┌──────────┐ ┌───────────────────┐     │\n│  │TmdbProxy│ │  Sync   │ │ TimeCode │ │     Tracks        │     │\n│  │CubProxy │ │ WebLog  │ │ NextHUB  │ │  AdminPanel, Kit  │     │\n│  └─────────┘ └─────────┘ └──────────┘ └───────────────────┘     │\n│  ┌───────────────────────────────────────────────────────────┐  │\n│  │  Modules/OnlineRUS · OnlinePaid · OnlineAnime · OnlineENG │  │\n│  │  OnlineUKR · OnlineGEO  — по одному проекту на провайдера │  │\n│  │  Modules/Adult/* — платформы 18+                          │  │\n│  │  Modules/Community/* — TelegramAuth, TelegramAuthBot      │  │\n│  └───────────────────────────────────────────────────────────┘  │\n└─────────────────────────────────────────────────────────────────┘\n```\n\n| Слой | Описание |\n| --- | --- |\n| **Core** | Точка входа, Middleware Pipeline, `ApiController`. [README](Core/README.md) |\n| **Shared** | Модели, контроллеры, конфигурация, HTTP-пулы, Roslyn. [README](Shared/README.md) |\n| **Online** | VOD-ядро: `/online.js`, `/lite/*`, провайдеры в `Modules/Online*/`. [README](Online/README.md) |\n| **SISI** | 18+-ядро: `/sisi.js`, SQLite. Платформы в `Modules/Adult/`. [README](SISI/README.md) |\n| **Modules/** | Функциональные модули, прокси, Community, Sync и др. |\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eЗагрузка модулей, Roslyn и middleware\u003c/strong\u003e\u003c/summary\u003e\n\n**Загрузка модулей:**\n\nСкомпилированные сборки загружаются из `runtimes/references/`. Исходники модулей из `module/` и `mods/` компилирует **Roslyn** (`CSharpEval`) при запуске — это даёт горячую подгрузку и пользовательские оверлеи.\n\nПорядок загрузки:\n\n1. Сначала `mods/` (пользовательские), затем `module/` (встроенные)\n2. Фильтрация: `SkipModules`, `LoadModules` (regex/имя/группа), флаг `enable` в manifest.json\n3. `dynamic: true` → горячая пересборка при изменении `.cs` файлов\n4. `IModuleConfigure.Configure` → регистрация в DI\n5. `IModuleLoaded.Loaded` → вызов после старта приложения\n\n**Middleware Pipeline:**\n\n```\nForwardedHeaders → BaseMod → ModHeaders → RequestInfo\n  → [/nws WebSocket] → Routing → Compression\n  → ProxyImg → StaticFiles → WAF → Authorization\n  → Accsdb → Controllers\n```\n\n**Конфигурация:**\n\n- `init.conf` / `init.yaml` — основной конфиг\n- `base.conf` — дефолты (fallback)\n- Горячая перезагрузка: watcher каждые ~1 сек, бэкапы в `database/backup/init/`\n\n\u003c/details\u003e\n\n---\n\n## Зависимости\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eNuGet пакеты (.NET 10.0)\u003c/strong\u003e\u003c/summary\u003e\n\n| Пакет | Версия | Назначение |\n| --- | --- | --- |\n| `Microsoft.CodeAnalysis.CSharp` + `.Scripting` | 5.0.0 | Roslyn: компиляция модулей на лету |\n| `Microsoft.Playwright` | 1.50.0 | Chromium/Firefox автоматизация |\n| `HtmlAgilityPack` | 1.12.4 | Парсинг HTML |\n| `HtmlKit` | 1.2.0 | Парсинг HTML |\n| `MaxMind.GeoIP2` | 5.4.1 | GeoIP (базы `GeoLite2-*.mmdb` включены в поставку) |\n| `Newtonsoft.Json` | 13.0.4 | JSON-сериализация |\n| `Microsoft.EntityFrameworkCore` (+ Sqlite, Design) | 10.0.2 | ORM для SQLite (Sync, TimeCode, SISI, ExternalIds) |\n| `Microsoft.Extensions.DependencyModel` | 10.0.2 | Загрузка зависимостей при динамической компиляции |\n| `Microsoft.IO.RecyclableMemoryStream` | 3.0.1 | Пул памяти для потоков |\n| `NetVips` / `NetVips.Native` | 3.2.0 / 8.18.0 | Обработка изображений (libvips) |\n| `YamlDotNet` | 16.3.0 | Парсинг YAML-конфигурации |\n| `Serilog.AspNetCore` + `.Sinks.File` | 9.0.0 / 7.0.0 | Структурное логирование |\n| `System.Management` | 10.0.2 | Информация об ОС и железе |\n\n\u003c/details\u003e\n\n---\n\n## Структура проекта\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eДерево каталогов\u003c/strong\u003e\u003c/summary\u003e\n\n```text\nlampac/\n├── Core/                       # Точка входа, middleware, загрузка модулей\n│   ├── Program.cs              # Запуск, инициализация\n│   ├── Startup.cs              # DI, HTTP-клиенты, загрузка модулей\n│   ├── Controllers/            # ApiController, RchApiEndpoints\n│   ├── Middlewares/            # WAF, Accsdb, BaseMod, ProxyImg и другие\n│   ├── Services/               # NativeWebSocket, CronCacheWatcher\n│   ├── data/                   # GeoIP базы, статические JSON-базы\n│   ├── plugins/                # JS-плагины (RCH, NWS)\n│   └── wwwroot/                # Статика (SISI UI, stats и др.)\n├── Shared/                     # Общая библиотека\n│   ├── CoreInit.cs             # Загрузка и hot-reload конфигурации\n│   ├── BaseController.cs       # Базовый контроллер\n│   ├── Models/                 # Общие модели данных\n│   └── Services/               # HTTP, кеш, Playwright, GeoIP, Roslyn\n├── Online/                     # VOD-ядро (/online.js, /lite/*, externalids)\n├── SISI/                       # 18+-ядро (/sisi.js, SQLite, закладки)\n├── Modules/\n│   ├── AdminPanel/             # Веб-админка (manifest: enable: false)\n│   ├── Adult/                  # Платформы 18+ (15 источников)\n│   ├── Catalog/                # Каталог сайтов (YAML)\n│   ├── Community/              # TelegramAuth, TelegramAuthBot\n│   ├── DLNA/                   # DLNA/UPnP медиасервер\n│   ├── ForkPlayerXML/          # ForkPlayer: /fxml\n│   ├── ExternalBind/           # Привязка URL (manifest: enable: false)\n│   ├── MsxNative/              # MSX-плеер, Sisi\n│   ├── JacRed/                 # Агрегатор торрент-индексаторов\n│   ├── Kit/                    # Криптография\n│   ├── LampaWeb/               # Хостинг Lampa UI\n│   ├── NextHUB/                # 18+ витрина на YAML, sites/*.yaml\n│   ├── OnlineAnime/            # 12 аниме-источников\n│   ├── OnlineENG/              # 10 англоязычных источников\n│   ├── OnlineGEO/              # 3 грузинских источника\n│   ├── OnlinePaid/             # 9 платных VOD-источников\n│   ├── OnlineRUS/              # 21 российский CDN\n│   ├── OnlineUKR/              # 8 украинских источников\n│   ├── PidTor/                 # PidTor источник\n│   ├── Proxy/                  # CubProxy, TmdbProxy, CacheMedia, CorsMedia, Corseu, ProxyLimiter\n│   ├── Sync/                   # Sync, SyncEvents, Storage, TimeCode\n│   ├── TorrServer/             # Управление TorrServer\n│   ├── Tracks/                 # Субтитры и дорожки (FFprobe)\n│   ├── Transcoding/            # FFmpeg транскодинг\n│   ├── WatchTogether/          # Синхронный просмотр\n│   └── WebLog/                 # Отладочный лог HTTP/Playwright\n├── TestModules/                # Примеры модулей → mods/ при publish\n├── config/\n│   ├── base.conf               # Дефолтные значения\n│   ├── example.init.conf       # Пример конфига (JSON)\n│   └── example.init.yaml       # Пример конфига (YAML)\n├── docker-compose.yaml         # Production (порт 9118)\n├── docker-compose.dev.yaml     # Dev (порт 29118)\n├── charts/lampac/              # Helm-чарт для Kubernetes\n├── Dockerfile                  # Multi-arch образ (amd64, arm64)\n├── build.sh                    # dotnet publish Core/Core.csproj → publish/\n├── install.sh                  # Нативная установка Linux\n└── NextGen.slnx                # Solution (128+ проектов)\n```\n\nПосле `dotnet publish`: исходники модулей — в `module/` (Online, SISI, Modules), TestModules — в `mods/`, DLL-зависимости — в `runtimes/references/`.\n\n\u003c/details\u003e\n\n---\n\n## Дополнительная документация\n\n| Документ | О чём |\n| --- | --- |\n| [Core/README.md](Core/README.md) | `Program`/`Startup`, middleware, загрузка `module/` и `mods/` |\n| [Shared/README.md](Shared/README.md) | `CoreInit`, контроллеры, `CSharpEval`, кеш, HTTP, Playwright |\n| [Online/README.md](Online/README.md) | VOD-ядро, `/online.js`, `/lite/`, PiTor, Externalids |\n| [SISI/README.md](SISI/README.md) | 18+-ядро, платформы `Modules/Adult/*`, таблица маршрутов |\n| [Modules/NextHUB/README.md](Modules/NextHUB/README.md) | YAML-сайты, `/nexthub`, конфиг, WAF |\n| [Modules/Community/README.md](Modules/Community/README.md) | Telegram-авторизация, клиент Lampa, API |\n| [Modules/Community/TelegramAuth/README.md](Modules/Community/TelegramAuth/README.md) | HTTP API `/tg/auth/…`, accsdb, хранилище |\n| [Modules/Community/TelegramAuthBot/README.md](Modules/Community/TelegramAuthBot/README.md) | Long polling-бот, команды, конфиг |\n| [Modules/ExternalBind/README.md](Modules/ExternalBind/README.md) | Привязка Lite/Online, флаг локального IP |\n| [charts/lampac/README.md](charts/lampac/README.md) | Helm-чарт для Kubernetes (`ghcr.io/lampac-nextgen/lampac`) |\n\n---\n\n[![Star History Chart](https://api.star-history.com/svg?repos=lampac-nextgen/lampac\u0026type=Date)](https://star-history.com/#lampac-nextgen/lampac\u0026Date)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flampac-nextgen%2Flampac","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flampac-nextgen%2Flampac","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flampac-nextgen%2Flampac/lists"}