Android TV — популярная платформа, но с Ambilight на ней всё до сих пор плохо: либо устаревшие приложения, либо нестабильная работа, либо костыли с внешними устройствами. Именно с этой проблемой я и столкнулся…
Ambilight/Ambient light — это технология фоновой подсветки экрана, которая создает эффект расширения изображения за пределы дисплея. Она делает просмотр контента более иммерсивным и снижает усталость глаз при просмотре в темноте. Сегодня я расскажу историю создания приложения Universal Ambient Light — современного решения для Android-устройств, которое поддерживает работу с различными LED-контроллерами.
История создания: от идеи до реализации
Всё началось с покупки TCL телевизора на Google TV (с андроидом под капотом). Почти сразу возникла идея сделать подсветку, т.к. казалось что под андроид уж точно что-то такое уже делали. Начал искать готовое решение, но столкнулся с тем, что большинство приложений либо не работали, либо имели ограничения.
Первая попытка
Я купил приложение Ambient light Application в Google Play , но, к сожалению, оно оказалось нерабочим. Приложение не запускалось корректно, были проблемы с разрешениями и стабильностью работы, особенно на версиях Android 14 и выше, т.к. автор в таргете прописал sdk 34, но не адаптировал приложение под него.
Я начал патчить приложение, пытаясь исправить ситуацию, однако после нескольких попыток стало понятно, что легче найти аналоги, приложение так и не заработало нормально.
Вторая попытка: форк существующего проекта
Затем я нашёл репозиторий hyperion-android-reborn на GitHub. Это был форк оригинального Hyperion Grabber для Android, обновлённый для работы с Android 12+. Проект поддерживал только протокол Hyperion, но мне не хотелось ставить прослойку в виде условной малинки, хотелось прямой поддержки WLED или хотя бы Adalight.
Я сделал форк и совместно с нейронками добавил поддержку WLED с протоколами DDP и UDP Raw. Это было хорошее решение, но кодовая база всё ещё была написана на Java с использованием устаревших подходов, да и на джаве я особо не пишу.
В итоге форк стал рабочим прототипом, но не тем продуктом, который хотелось бы поддерживать и развивать дальше.
В процессе работы над форком я понял, что нужно создать что-то более современное. Так родилась идея написать приложение с нуля на Kotlin с использованием Jetpack Compose для UI, чтобы продолжать вести эту идею, но уже с современными подходами и нормальным UI.
Так и родилось приложение Universal Ambient Light
Universal Ambient Light — это универсальное Android-приложение для создания фоновой подсветки экрана (Ambilight). Приложение захватывает содержимое экрана в реальном времени и передаёт данные на LED-контроллеры для создания эффекта расширенного изображения.
Основные возможности
Приложение поддерживает три основных протокола:
Hyperion
Полная поддержка протокола Hyperion NG
Настройка приоритета сообщений
Подключение по сети (порт 19400 по умолчанию)
WLED
Поддержка протоколов DDP (рекомендуется для WLED 0.11+) и UDP Raw
Настройка порядка цветов (RGB, GRB, BRG, BGR, RBG, GBR)
Поддержка RGBW LED-лент
Автоматическое определение порта (4048 для DDP, 19446 для UDP Raw)
Adalight
Настройка скорости передачи (Baud Rate, по умолчанию 115200)
Подключение через USB OTG
Автоматическое определение USB-устройств
Приложение полностью оптимизировано для работы на Android TV:
Удобная навигация с пульта ДУ (D-pad)
Отображение в Leanback Launcher
Адаптивный интерфейс для больших экранов
Поддержка сенсорного управления на мобильных устройствах
Настройки LED-конфигурации:
Конфигурация по сторонам: настройка количества LED для каждой стороны отдельно
Раскладка LED: настройка начального угла, направления (по/против часовой стрелки), включение/выключение отдельных сторон
Настройки сглаживания (Smoothing):
Включить сглаживание: включено по умолчанию для плавности переходов
Пресеты: Выключено, Быстрый отклик, Сбалансированный (по умолчанию), Плавный
Время перехода
Задержка вывода — полезно для синхронизации с видео, т.к. к своему удивлению столкнулся что в Jellyfin лента обгоняет видео
Частота обновлений
🚀 Дополнительные функции
Автозапуск: автоматический старт сервиса при включении устройства
Автоматическое пере��одключение: попытки переподключения при потере связи с контроллером
Тестовые эффекты: встроенные визуальные эффекты для проверки работы LED-ленты (радуга, движущаяся полоса, однотонные цвета, дыхание, вертикальные и горизонтальные полосы)
Немного медиа:



Настройка и использование
Первоначальная настройка
Установка приложения
Скачайте приложение из Google Play или RuStore, либо соберите из исходников в GitHub
Настройка подключения
Откройте приложение и перейдите в Настройки
Выберите тип подключения: Hyperion, WLED или Adalight
Для сетевых контроллеров (Hyperion/WLED):
Введите IP-адрес контроллера
Порт установится автоматически (можно изменить)
Для Adalight:
Подключите устройство через USB OTG
Выберите протокол (ADA, LBAPA или AWA)
Настройте скорость передачи (Baud Rate)
Конфигурация LED
Настройте количество LED для каждой стороны экрана
Выберите начальный угол и направление обхода
При необходимости отключите отдельные стороны
Настройка сглаживания
Выберите пресет сглаживания (рекомендуется "Сбалансированный")
При необходимости настройте время перехода и задержку вывода
Запуск
Предоставьте разрешение на захват экрана при первом запуске
Нажмите кнопку включения для старта захвата
Используйте тестовые эффекты для проверки работы LED-ленты
Особенности для разных устройств
Android TV:
Приложение автоматически определяет TV-режим и оптимизирует интерфейс
Для ввода IP-адресов удобно использовать приложение "Google TV" или "Android TV Remote" на смартфоне
Высококачественное видео (2K/4K/HDR):
Наблюдаются проблемы на многих Android TV при просмотре 2K/4K контента и одновременном захвате экрана - видео начинает сильно лагать, по сути его становится невозможно смотреть. К сожалению, это не ограничение приложения, а аппаратное ограничение MediaProjection и слабых CPU/GPU на большинстве телевизоров.
Заключение
Приложение уже доступно в Google Play и RuStore. Оно решает проблему отсутствия качественного софта для Ambilight на Android и предоставляет современный, гибкий инструмент для создания фоновой подсветки.
Создание Universal Ambient Light — это пример того, как можно решить проблему отсутствия качественного софта, создав собственное решение с использованием современных технологий. Приложение объединяет поддержку разных протоколов, современный UI и гибкие настройки в едином решении.
Если вы хотите создать свою систему Ambilight для Android TV или просто интересуетесь разработкой под Android, рекомендую изучить исходный код проекта и, возможно, внести свой вклад в его развитие.
Приложение подойдёт тем, кто хочет простую и гибкую Ambilight-систему без внешних серверов и лишних прослоек. Если же вам нужна максимальная производительность с 4K HDR без компромиссов — аппаратные решения всё ещё вне конкуренции.
p.s. Да, я использовал нейросети как при написании кода, так и статьи, т.к. изначально приложение делалось "побыстрее" для себя и только потом уже пришла мысль развернуть его полноценно. Если у вас сильная неприязнь к подобным проектам - просто обойдите его стороной, я предупредил честно, моя совесть чиста:)