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. Да, я использовал нейросети как при написании кода, так и статьи, т.к. изначально приложение делалось "побыстрее" для себя и только потом уже пришла мысль развернуть его полноценно. Если у вас сильная неприязнь к подобным проектам - просто обойдите его стороной, я предупредил честно, моя совесть чиста:)
Комментарии (20)

VBDUnit
31.01.2026 10:42Интересно узнать, как обстоят дела с лагом и FPS, а также с HDR — оно там по‑настоящему его обрабатывает или в SDR переводит? То есть именно сам процесс быстрого захвата картинки и анализа. Сам использую DIY подсветку на ПК, были мысли перенести анализ картинки из ПК в сами экраны, но неясно насколько хорошо это будет работать, и стоит ли результат всех танцев с бубном.

vasmarfas Автор
31.01.2026 10:42Касательно лага - у себя практически не наблюдал, напротив у меня при восроизведении видео с Jellyfin клиента - подсветка обгоняет картинку) Поэтому и добавил параметры задержки.
А HDR должен автоматически конвертироваться в SDR через MediaProjection API (8-битный RGBA_8888).

VBDUnit
31.01.2026 10:42Касательно лага — у себя практически не наблюдал, напротив у меня при восроизведении видео с Jellyfin клиента — подсветка обгоняет картинку) Поэтому и добавил параметры задержки.
Ага, то есть анализируется, по‑видимому, не то, что непосредственно на экране, а картинка из буфера плеера. Скажите пожалуйста, Вы случайно не тестировали софт, когда происходит трансляция картинки с внешнего HDMI источника (например, ПК)?
А HDR должен автоматически конвертироваться в SDR через MediaProjection API (8-битный RGBA_8888).
Ясно, спасибо за информацию. Загуглил — вроде бы да, MediaProjection кроме RGBA_8888 в другие форматы пока не умеет :(

vasmarfas Автор
31.01.2026 10:42Скажите пожалуйста, Вы случайно не тестировали софт, когда происходит трансляция картинки с внешнего HDMI источника (например, ПК)?
Тестировал, к сожалению, не работает. Вероятно, там включается отдельный обработчик/модуль и сигнал идёт мимо ОС Андроид, тут уже лучше ставить на ПК тот же hyperion и с него на WLED вещать. Но, думаю, оно может зависеть ещё и от конкретной реализации в конкретном телевизоре, не сильно углублялся в этот вопрос

VBDUnit
31.01.2026 10:42Спасибо за информацию!
Жаль, была надежда что хотя бы в AndroidTV это вменяемо сделано :) На WebOS официально это не работает, насколько я знаю, и народ ставит ломанные прошивки с эксплоитами, с которыми очень не хотелось связываться.
Я думаю, что так сделано для минимизации лага при отображении картинки с ПК. Штош, продолжаем сидеть на DirectX, видимо альтернатив пока не предвидится.

2Grey
31.01.2026 10:42Как убрать фокус из любого текстового поля?
Например "Задержка вывода (мс)".
Ввел значение в поле
Жму Enter на цифровой клавиатуре и клавиатура скрывается.
Нажатия Вверх или вниз не перемещаются на кнопки Cancel или Ок.
Сохранить значение в текстовом поле не могу.
Так же невозможно настроить Раскладку LED, т.к
дальше первого текстового поля на экране никуда не деться.
vasmarfas Автор
31.01.2026 10:42Странно, у меня просто когда нажимаю Enter можно кнопкой вниз переместиться, видимо какие-то нюансы других платформ.
Добавлю в версию 1.0.2 возможность по Enter сразу применять значения тогда. А какой у вас ТВ кстати и какая версия Android?

2Grey
31.01.2026 10:42Устройство: TCL P635
Android TV: 11
Источник приложения: Google Play.Ещё из моментов, при выключении приложения (Большая кнопка по центру основного экрана), подсветка продолжает гореть

vasmarfas Автор
31.01.2026 10:42Ещё из моментов, при выключении приложения (Большая кнопка по центру основного экрана), подсветка продолжает гореть
Если у вас WLED - то попробуйте зайти напрямую на его веб-интерфейс и включить там условный чёрный цвет. Вероятно ТВ подсветку уже отпустил и она переключилась на эффект выбранный в WLED

Fox_Alex
31.01.2026 10:42Я был там 3000 лет назад. А точнее 20+ лет тому назад. Еще не было RGB-лент, все делалось на группах широкоугольных светодиодов. Еще не было контроллеров даже с USB - данные шли с ком-порта. На компе был сраный VB6 и DirectDraw или че-то подобное, было очень трудно сделать так чтоб оно не тормозило и считало адекватный цвет по заданной области. Но я это сделал!


vasmarfas Автор
31.01.2026 10:42Звучит круто) Вы из тех самых великих программистов 90х-нулевых, которые код ассемблера в голове компилировали?)

Fox_Alex
31.01.2026 10:42Не, я тогда еще в школу ходил) Просто рано полез в микроконтроллеры. AVR освоил когда еще ардуины в природе не было.
Телек первый с эмбилайтом на какой-то выставке вживую наблюдал и че-то зацепило. Труднее всего было сделать софт. Комп тогда был слабенький, а я в высших материях с трудом разбирался. В лоб снимать скриншоты конечно-же не прокатило, но через DirectDraw дергать цвета отдельных пикселей получилось. В итоге работало более-менее шустро до 100 пикселей на зону. Но для нормального адекватного цвета надо было 200-250. И это для разрешений тех времен.
Дальше было решено перестать мучить комп, ему и без этого было тяжко. Сначала в железе я пытался оцифровывать VGA, но выходило крайне топорно. Дальше идея была парсить видеопоток DVI на ПЛИС. По-началу даже что-то пошло, но проект забуксовал от недостатка знаний и времени. К тому моменту я уже заканчивал первый курс и начал работать. Ядерная спектрометрия оказалась интереснее и проект улетел в долгий ящик.


DannyMontana
31.01.2026 10:42отличный проект, обязательно надо будет затестить, тк у меня тоже полукастом с ардуино контроллером, который к тому же глючит, делал ручками, ии еще не было особо.

drlight17
31.01.2026 10:42Однозначно лайк! Эхх... Где ж вы были несколько лет назад!.. Из-за проблем приложений под Android TV n лет назад я в итоге с ибея комплект с камерой заказал (Govee Ambilight или как-то так). Работает до сих пор, но задержка конечно ощутимая и качество детализации так себе.

vasmarfas Автор
31.01.2026 10:42Спасибо, пару лет назад у меня андроид тв не было)
По идее у вас на руках же уже готовый контроллер, в теории можно попробовать его в WLED зашить или Adalight и подключить к ТВ
Pelectronik
Проект у тебя крутой, так держать! Использовать нейросети — это не плохо)
vasmarfas Автор
Спасибо) На самом деле и не очень хорошо, если часто, но в рамках проекта для себя и побыстрее - пойдёт