Ambient lighting synchronization for KDE Plasma using cheap ELK-BLEDOM Bluetooth LED strips.
WallGlow is a lightweight Python daemon that recreates an Ambilight-style ambient lighting experience on Linux using inexpensive generic Bluetooth LED strips based on the ELK-BLEDOM chipset.
Instead of capturing the entire screen, WallGlow integrates with KDE Plasma live wallpapers, extracts representative colors from the active wallpaper video, and smoothly transitions your LED strip to match the mood of your desktop.
Naruto Wallpaper
β
Extract dominant ambient color
β
Enhance saturation
β
Smooth LED transition
β
Room lighting changes
Luffy Wallpaper
β
Extract dominant ambient color
β
Smooth transition
β
Warm room lighting
I wanted to recreate an Ambilight-style ambient lighting experience on Linux without spending hundreds of dollars on proprietary hardware.
Most ambient lighting solutions require:
- Philips Hue ecosystems
- HDMI capture hardware
- ESP32 microcontrollers
- Expensive RGB ecosystems
- Screen capture software
Meanwhile, generic Bluetooth LED strips based on the ELK-BLEDOM chipset can be purchased for just a few dollars.
WallGlow explores a different approach:
- Use KDE Plasma live wallpapers as the source of ambient colors.
- Extract representative colors directly from wallpaper videos.
- Control inexpensive ELK-BLEDOM Bluetooth LED strips using Python.
- Create a low-cost ambient lighting experience on Linux.
The result is a lightweight ambient lighting daemon that integrates directly with KDE Plasma while requiring only a generic Bluetooth LED strip.
- β Bluetooth control of ELK-BLEDOM LED strips
- β KDE Plasma 6 integration
- β Smart Video Wallpaper Reborn support
- β Automatic wallpaper detection
- β Dominant color extraction
- β Color saturation enhancement
- β Smooth LED transitions
- β Wayland compatible
- β Extremely low CPU usage
- β No screen capture required
- β No root permissions required
- π§ Dynamic video synchronization mode
- π§ Automatic Bluetooth reconnect
- π§ Wallpaper change debounce
- π§ Ignore insignificant color changes
- π§ Brightness profiles
- π§ KDE tray integration
- π§ Systemd user service
- π§ Color style presets
- π§ AUR package
KDE Live Wallpaper
β
βΌ
plasma-org.kde.plasma.desktop-appletsrc
β
βΌ
WallGlow
β
βββ Detect wallpaper changes
βββ Extract representative colors
βββ Enhance saturation
βββ Smooth transitions
β
βΌ
ELK-BLEDOM Bluetooth LED Strip
Wallpaper changed
β
βΌ
Read current wallpaper path
β
βΌ
Open wallpaper video
β
βΌ
Sample representative frames
β
βΌ
Cluster colors using KMeans
β
βΌ
Select most saturated cluster
β
βΌ
Enhance color vibrancy
β
βΌ
Animate transition
β
βΌ
Update LED strip
WallGlow does not simply average all pixels.
Instead it:
- Samples multiple frames from the wallpaper.
- Downsamples pixels for performance.
- Performs KMeans clustering.
- Removes dark and low-information clusters.
- Selects the most visually dominant saturated color.
- Enhances saturation.
- Uses the median color across sampled frames.
This produces much more pleasing ambient lighting than simple averaging.
- Generic ELK-BLEDOM Bluetooth LED strips
- KDE Plasma 6
- CachyOS
- Wayland
- Smart Video Wallpaper Reborn
Any Bluetooth LED controller exposing:
Service:
0000fff0-0000-1000-8000-00805f9b34fb
Write Characteristic:
0000fff3-0000-1000-8000-00805f9b34fb
Clone the repository:
git clone https://github.com/YOUR_USERNAME/wallglow.git
cd wallglowCreate a virtual environment:
python -m venv .venv
source .venv/bin/activateInstall dependencies:
pip install -e .Edit:
src/wallglow/app_config.pyConfigure your LED controller:
LED_ADDRESS = "XX:XX:XX:XX:XX:XX"
MODE = "ambient"Start WallGlow:
python -m wallglow.mainExample output:
Connected: True
Wallpaper changed:
/mnt/Wallpapers/Naruto.mp4
Target RGB:
(45, 80, 220)
Sent!
Watching KDE wallpaper changes...
wallglow
βββ pyproject.toml
βββ README.md
βββ src
β βββ wallglow
β βββ app_config.py
β βββ ambient_sync.py
β βββ dynamic_sync.py
β βββ elk_bledom.py
β βββ kde_config_monitor.py
β βββ kde_wallpaper.py
β βββ main.py
β βββ video_colors.py
βββ tests
- Dynamic synchronization mode
- Bluetooth auto reconnect
- Wallpaper change debounce
- Color difference threshold
- Brightness profiles
- Color presets
- Systemd user service
- KDE tray integration
- AUR package
- Multi-device support
- Plugin architecture
Contributions, ideas, bug reports, and feature requests are welcome.
If you have another ELK-BLEDOM controller or desktop environment that works with WallGlow, feel free to open an issue or submit a pull request.
This project is licensed under the MIT License.
- KDE Plasma
- Smart Video Wallpaper Reborn
- Bleak
- PyAV
- scikit-learn
- The Linux desktop customization community