Avalon MediaCard Logo

Avalon MediaCard

Персональный онлайн-кинотеатр для вас и ваших друзей.

English • Русский

Docker Container ghcr.io Последний релиз Лицензия ядра: PolyForm Shield 1.0.0 Лицензия SDK плагинов: MIT

---

Интерфейс Avalon MediaCard на различных устройствах

## 🌟 О проекте **Avalon MediaCard** — это современная self-hosted платформа, которая объединяет фильмы, сериалы и аниме в едином минималистичном интерфейсе. Приложение работает прямо в браузере без обязательной установки дополнительных программ, а также доступно в виде нативных приложений для Smart TV (Android TV), компьютеров (Windows, macOS, Linux) и смартфонов. В отличие от традиционных ресурсоемких медиасерверов, Avalon спроектирован с упором на предельную легкость: серверная часть комфортно работает на недорогих VPS, домашних серверах или микрокомпьютерах класса Raspberry Pi. --- ## ✨ Главные преимущества * 🚀 **Мгновенный просмотр без скачивания:** Воспроизведение начинается сразу при подключении гибридных источников (CDN или P2P). Больше не нужно ждать, пока десятки гигабайт загрузятся на диск сервера. * 🍿 **Совместный просмотр (Watch Party):** Смотрите кино синхронно с друзьями, где бы они ни находились. Встроенное лобби позволяет синхронизировать готовность и выбрать статус просмотра (например, *«Смотрю молча, без пауз»* или *«Готов обсуждать»*). * 🧠 **Умные и приватные рекомендации:** Локальный математический движок анализирует ваши предпочтения и подбирает релевантный контент. Вся аналитика и история просмотров хранятся **исключительно на вашем сервере** и никогда не передаются во внешние облачные сервисы. * 👥 **Изолированные профили:** У каждого пользователя — своя домашняя лента, персональные оценки, прогресс просмотра эпизодов и независимая история. * 📺 **Адаптация под любые экраны:** Единый плавный интерфейс, оптимизированный как для управления мышью и клавиатурой на ПК, так и для пультов Smart TV (полноценная D-Pad навигация без задержек). --- ## ⚡ Быстрый старт (Развертывание через Docker) Рекомендуемый и самый надежный способ запустить сервер Avalon MediaCard — использовать **Docker Compose**. Этот метод сохраняет все профили, настройки и данные пользователей между обновлениями и перезапусками. ### Вариант 1: Запуск в терминале за одну команду ```bash mkdir -p avalon && cd avalon curl -fsSL https://raw.githubusercontent.com/ensodai/avalon-media-card/main/docker-compose.yml -o docker-compose.yml docker compose up -d ``` ### Вариант 2: Для Portainer, Dockge или ручной настройки Если вы используете веб-панели управления контейнерами или настраиваете стек вручную, используйте конфигурацию `compose.yaml`: ```yaml services: avalon-server: image: ghcr.io/ensodai/avalon-media-card:latest container_name: avalon-media-card restart: unless-stopped ports: - "8080:8080" volumes: - ./data:/app/data - ./plugins:/app/plugins ``` ### Вход в систему Откройте веб-браузер и перейдите по адресу: `http://localhost:8080` *(или укажите IP-адрес вашего сервера в локальной сети)*. Данные системного администратора по умолчанию: * **Логин:** `admin` * **Пароль:** `admin` > ⚠️ **Важно:** Сразу после первого входа смените пароль администратора в панели управления и создайте персональные аккаунты для членов семьи или друзей. --- ## 📱 Клиентские приложения Смотреть контент можно как напрямую через веб-браузер, так и через нативные приложения: * 📺 **Android TV / Android:** загрузите `avalon-android.apk` из [Последних релизов](https://github.com/ensodai/avalon-media-card/releases/latest). * 💻 **ПК (Desktop):** сборки для Windows (`.exe` / `.msi`) и Linux (`.deb` / AppImage). * 🌐 **Веб-версия:** доступна прямо на запущенном сервере по порту `8080`. Для подключения в приложении укажите адрес вашего сервера `http://:8080` и авторизуйтесь. ---
🔌 Опционально: подключение онлайн-балансеров (Lampac / Accsdb) Плагин `lampac-adapter-plugin` позволяет интегрировать сервер Avalon со шлюзом [Lampac](https://github.com/lampac-nextgen/lampac) для получения онлайн-потоков. Если на стороне Lampac включен механизм авторизации **Accsdb**, Avalon передает идентификатор в каждом запросе. #### 1. Настройка на стороне Lampac (`init.conf`) Создайте выделенный аккаунт для Avalon: ```json "accsdb": { "enable": true, "accounts": { "avalon": "2040-10-17T00:00:00" } } ``` *(Или в панели Lampac Admin → **Users** → Добавить пользователя с ID `avalon`).* Либо используйте общий пароль (`shared_passwd`): ```json "accsdb": { "enable": true, "shared_passwd": "your_shared_secret" } ``` #### 2. Переменные окружения в Avalon При необходимости укажите переменные в секции `environment` вашего `docker-compose.yml`: | Переменная | Обязательна | Описание | |---|---|---| | `LAMPAC_HOST` | Рекомендуется | URL Lampac, например `http://192.168.1.10:9118` (по умолчанию `http://localhost:9118`) | | `LAMPAC_UID` | Если включен Accsdb | ID аккаунта в Accsdb / персональный пароль (передается как `?uid=`) | | `LAMPAC_TOKEN` | Опционально | Передается как `?token=` | | `LAMPAC_ACCOUNT_EMAIL` | Опционально | Передается как `?account_email=` (также используется для `shared_passwd`) | Пример в `docker-compose.yml`: ```yaml environment: - LAMPAC_HOST=http://lampac:9118 - LAMPAC_UID=avalon ``` Если авторизация Accsdb в Lampac выключена, переменные `LAMPAC_UID` / `LAMPAC_TOKEN` / `LAMPAC_ACCOUNT_EMAIL` указывать не требуется.
---
🛠️ Архитектура под капотом (Для разработчиков и энтузиастов) ### Технологический стек * **Сверхлегкий сигнальный сервер:** Бэкенд реализован на **Kotlin 2.1+ / Ktor 3.x (Netty)**. Он выполняет роль координатора API, менеджера базы данных (SQLite / PostgreSQL через JetBrains Exposed ORM) и сигнального узла WebSockets на базе **kotlinx-rpc**. * **Клиентский рендеринг видеопотока:** В отличие от Plex или Jellyfin, сервер Avalon не перегружает процессор тяжелым транскодированием видео на лету. Вся нагрузка по декодированию ложится на конечное устройство пользователя с задействованием **LibMPV** (Desktop JNA), **AndroidX Media3** (Android TV/Mobile) или **WasmGC + FFmpeg** (браузер). * **Server-Driven UI (SDUI):** Интерфейс построен на базе **Compose Multiplatform**. Динамические полки рекомендаций, карточки контента и навигационные манифесты передаются сервером в реальном времени. * **Изолированная модульная система плагинов:** Динамическая подгрузка JAR-плагинов в изолированных `ClassLoader` на базе контракта [`avalon-media-card-core-contract`](https://github.com/ensodai/avalon-media-card-core-contract). Плагины поддерживают горячую перезагрузку без перезапуска сервера. ### Сборка из исходного кода ```bash # Клонирование репозитория git clone https://github.com/ensodai/avalon-media-card.git cd avalon-media-card # Настройка окружения cp .env.example .env # Запуск бэкенда (Ktor) ./gradlew :server:run # Запуск десктопного клиента ./gradlew :desktopApp:run # Сборка Android APK ./gradlew :androidApp:assembleRelease # Сборка WebAssembly клиента ./gradlew :web:wasmJsBrowserDistribution ``` > 📖 Подробную топологию системы, матрицу видеоплееров и инженерный разбор см. в **[ARCHITECTURE.ru.md](ARCHITECTURE.ru.md)**.
--- ## 📜 Лицензирование * **Ядро платформы и приложения (Core):** Распространяются под лицензией [PolyForm Shield License 1.0.0](LICENSE) (полностью бесплатно для личного использования, самостоятельного хостинга и модификаций; действуют условия защиты от прямой коммерческой конкуренции). * **Plugin SDK и базовые плагины:** Контракт [`avalon-media-card-core-contract`](https://github.com/ensodai/avalon-media-card-core-contract) и плагины в каталоге `basePlugins/` лицензированы под свободной лицензией [MIT License](https://opensource.org/licenses/MIT). --- ## ⚖️ Юридическое уведомление и отказ от ответственности (Legal Disclaimer) **Avalon MediaCard** спроектирован исключительно в качестве расширяемого SDK для персональных медиа и локальной экосистемы воспроизведения. Репозиторий проекта предоставляет модульный программный каркас, предназначенный для каталогизации и воспроизведения медиафайлов, находящихся в общественном достоянии (Public Domain), а также законно приобретенных персональных цифровых материалов, размещенных на собственной инфраструктуре пользователя. Программное обеспечение Avalon MediaCard не размещает, не содержит в базовой поставке, не индексирует, не скрейпит и не распространяет защищенный авторским правом контент, инструменты обхода технических средств защиты (DRM) или сторонние конфигурации доступа к нелицензионным материалам. Все внешние плагины, коннекторы P2P-кеширования и резолверы метаданных разрабатываются, устанавливаются и настраиваются конечным пользователем самостоятельно на свой риск. Авторы и контрибьюторы проекта Avalon MediaCard не несут юридической ответственности за сценарии использования API-интерфейсов и характер модулей, загружаемых пользователями в их частные серверные экземпляры.