[Custom Integration] Ambilight Sync for Philips TVs → any Home Assistant RGB light
Hi everyone!
I’ve been working on Ambilight Sync for Home Assistant, a custom integration that reads the Ambilight colors already calculated by a Philips TV and sends them to standard Home Assistant light.* entities.
No Hue Bridge, no Hue Sync Box, no screen capture and no external video processing.
Current release: v0.3.0
How it works
Philips TV
↓ jointSPACE Ambilight API
Home Assistant
↓
RGB lights
The TV already calculates Ambilight colors internally, so the integration reuses those values instead of analyzing the video signal again.
Everything runs locally inside Home Assistant.
Main features
- Works with standard Home Assistant
light.*entities - Supports Matter, HomeKit, Zigbee, Philips Hue, Govee and other compatible integrations
- Separate TV polling rate and per-light output rates
- Per-light settings and overrides
- Multiple weighted Ambilight sources per light
- Custom presets
- Live per-light color preview
- HomeKit-compatible
switch.ambilight_sync - Average, Perceptual and Dominant color modes
- Hardware transitions when supported by the light
- Software smoothing
- Minimum brightness
- Black threshold and dark-scene handling
- Separate black delay, fade transition and switch-off delay
- Scene-cut detection for fast response to sudden image changes
- Spatial light positioning
- Zone Falloff / Spread
- Live visualization of Ambilight segment influence
- Extended diagnostics for polling rate, output rate, latency and replaced frames
Spatial positioning
Lights can now be positioned around the TV using X/Y coordinates.
TOP
┌───────────┐
LEFT │ TV │ RIGHT
└───────────┘
BOTTOM
Instead of averaging an entire side, Spatial mode uses the individual Ambilight segments reported by the TV and mixes nearby segments based on the light position.
Existing configurations continue to use Manual positioning after updating.
Zone Falloff / Spread
Each Spatial light can control how wide an area of the Ambilight perimeter it reacts to.
A low value focuses mostly on the closest segments.
A higher value creates a wider ambient mix.
The sidebar also visualizes which Ambilight segments influence each light and how strongly they contribute.
Scene-cut detection
Fast scene changes can bypass normal smoothing and output rate limits.
For example:
slow dark scene
↓
sudden bright/red scene
↓
scene cut detected
↓
immediate color update
Scene cuts use their own configurable transition time.
They also interrupt an active dark-scene fade immediately, so the lighting does not continue fading after the image has already changed.
Dark scenes
Dark-scene handling is split into separate stages:
Black detected
↓
Black delay
↓
Fade transition
↓
Minimum brightness
↓
Off delay
↓
OFF
If Minimum brightness is above 0%, the light fades to that level and stays on.
If it is 0%, the light fades to 1%, waits for the configured switch-off delay, and then turns off.
Any new non-black Ambilight frame immediately cancels the black cycle.
Presets
Presets can store different global settings, light mappings and per-light overrides.
For example:
Movie
Gaming
Night
Soft Ambient
They can also be switched from Home Assistant automations:
action: ambilight_sync.activate_preset
data:
preset: Movie
Tested lights
| Device | Connection | Result | Notes |
|---|---|---|---|
| Govee M1 | Govee lights local | Works well. Higher update rates are recommended because smooth hardware color transitions are not available. | |
| Govee M1 | Matter | Slow updates, noticeable lag and no smooth transition. | |
| Xiaomi Mi Bedside Lamp 2 | HomeKit | Very responsive with smooth native color transitions. Tested up to 8 Hz without noticeable slowdown. | |
| Yandex GX53 | Matter | Works well at low update rates with smooth transitions. Higher rates may introduce delay. |
Different lights behave very differently under frequent RGB updates, which is why update rate and transition settings can be configured per light.
Installation
- Download the latest release from GitHub.
- Copy:
custom_components/ambilight_sync
to:
/config/custom_components/ambilight_sync
- Restart Home Assistant.
- Go to Settings → Devices & services → Add integration.
- Search for Ambilight Sync.
- Pair your Philips TV.
- Open Ambilight Sync from the Home Assistant sidebar and configure your lights.
Project status
This is currently a beta and a vibe-coded community project.
It works well in my own setup, but Philips firmware and smart-light behavior can vary significantly, so testing on other TVs and lights would be very useful.
If you test it, please include:
Philips TV model:
jointSPACE API version:
Light model:
Integration used:
Connection type:
TV polling rate:
Light update rate:
Transition:
Color mode:
Observed behavior:
Bug reports, testing and feedback are very welcome.