LumiSync
Synchronize Govee, iDotMatrix, and LSC/Tuya lights with your screen or music.
Visit the website: lumisync.minlor.net
Features • Installation • Usage • Development • Roadmap
[!NOTE] This project is in active development. Windows is fully supported; Linux X11 is partial, macOS/Wayland are WIP.
✨ Features
| Feature | Description |
|---|---|
| 🖥️ Monitor Sync | Sample colors from screen regions and sync to your LED strip in real-time |
| 🎵 Music Sync | React to audio with dynamic color patterns |
| 🎨 Color Control | Set custom colors and brightness directly from the app |
| 🖌️ Modern GUI | Blue-accented PySide6 interface with selectable Acrylic, Mica, and Solid Dark window materials |
| 🔌 Multi-Vendor | Govee (LAN), iDotMatrix pixel panels (Bluetooth), and LSC/Tuya WiFi lights |
| 🔍 Auto-Discovery | Automatically finds Govee devices on your LAN via UDP broadcast |
| ⚡ Low Latency | Direct LAN communication, no cloud required |
Supported devices
Every device family works out of the box — a single pip install lumisync (or
the packaged Windows build) bundles all transports, no extras to remember.
| Family | Transport | Notes |
|---|---|---|
| Govee strips/bulbs | LAN (UDP) | Enable "LAN Control" in the Govee app |
| iDotMatrix panels | Bluetooth LE | Pixel displays; see docs |
| LSC / Tuya WiFi lights | LAN (Tuya local) | Needs the device's local key — see docs |
📸 Screenshots
Devices
Discover, organize, and directly control LAN and Bluetooth lights.
Monitor and music sync
|
|
|
| Monitor Sync Map display colors across one or more lights. |
Music Sync Choose reactions and palettes or let Auto Director decide. |
📦 Installation
Requirements: Python 3.11 or higher
From PyPI (Recommended)
pip install lumisync
From GitHub (Latest)
pip install git+https://github.com/Minlor/LumiSync.git
Development Install
git clone https://github.com/Minlor/LumiSync.git
cd LumiSync
pip install -e .
Prebuilt downloads
- Windows — a portable
.zipand a single-file.exeare attached to each GitHub release. - Linux — an
x86_64AppImage is attached to each release;chmod +xit and run. Build it yourself withtools/build_linux.sh(needs Python 3.12+ andappimagetooldeps). A Flatpak is scaffolded inpackaging/flatpak/but not yet finished.
Platform notes: Windows is fully supported. On Linux, device control, music sync, and manual control work on X11 and Wayland; screen (monitor) sync currently requires an X11/Xorg session — Wayland capture is planned.
🚀 Usage
Launch the App
lumisync
The GUI opens by default. The legacy interactive terminal is still available
with lumisync --cli; direct headless modes are available through
lumisync --monitor and lumisync --music.
Quick Start
- Discover devices — Click "Discover Devices" for Govee LAN lights or "Scan Bluetooth" for pixel panels.
- Select your lights — Choose one or more devices from the Devices page.
- Control your lights — Set color, brightness and power directly from each device card.
- Start syncing — Open Monitor Sync or Music Sync, choose the target devices and start the mode.
Interface
- Devices — Discover, add and control LAN or Bluetooth lights; multi-select devices for bulk actions.
- Monitor Sync — Map display colors to selected devices, groups, zones, and custom LED regions.
- Music Sync — Choose reactions, palettes, targets and brightness, or use Auto Director.
- Draw — Paint still images or frame-by-frame animations for compatible iDotMatrix panels.
- Settings — Choose Acrylic, Mica, or Solid Dark; select a display, tune sync behavior, manage groups, startup and system-tray options.
Configuration
- LED Mapping - Customize which screen regions map to which LEDs
- Brightness - Adjust per-mode brightness (10-100%)
- Display Selection - Choose which monitor to capture (multi-monitor support)
- Sync Tuning - Tune smoothing, saturation, frame rate, gamma and music response
🛠️ Development
Project Structure
lumisync/
├── lumisync.py # Entry point & CLI
├── connection.py # Govee UDP protocol (port 4001/4002)
├── devices.py # Device discovery & caching
├── config/options.py # Runtime configuration
├── sync/ # Monitor & music sync engines
├── gui/ # PySide6 application
│ ├── controllers/ # Business logic (QObject + pyqtSignal)
│ ├── views/ # UI components
│ └── widgets/ # Reusable widgets
└── utils/ # Logging, colors, file ops
Run Tests
python -m unittest discover -s tests
Brand and documentation assets
The production app icon, transparent mark, tray variants, Windows .ico, and
GitHub banner live in assets/brand. Regenerate the complete
icon set from its single SVG geometry with:
python tools/generate_brand_assets.py
Fresh README screenshots can be captured from the real PySide application on Windows with:
python tools/capture_readme_screenshots.py --material acrylic
Platform Support
| Platform | Screen Capture | Status |
|---|---|---|
| Windows | dxcam | ✅ Full support |
| Linux (X11) | mss | ⚠️ Partial |
| Linux (Wayland) | - | 🚧 WIP |
| macOS | - | 🚧 WIP |
🗺️ Roadmap
- Multi-device support
- Wayland & macOS screen capture
- Basic color control mode
- Custom sync algorithms
- Plugin system for community extensions
🙏 Credits
- Wireshark — Protocol analysis
- See pyproject.toml for all dependencies
📄 License
MIT © Minlor
⭐ Star this repo if you find it useful!
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file lumisync-0.7.2.tar.gz.
File metadata
- Download URL: lumisync-0.7.2.tar.gz
- Upload date:
- Size: 254.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
37f0fb59fe40e1d949c9ea12a34d9ada11df4f5fd420ac3e25924915d3c91480
|
|
| MD5 |
f1b35a62df083cc7eba997761757845b
|
|
| BLAKE2b-256 |
433194d0bafe877f16ca3b98870225a6dd0302dcc231a712aebbad2fa3d36516
|
Provenance
The following attestation bundles were made for lumisync-0.7.2.tar.gz:
Publisher:
pypi.yaml on Minlor/LumiSync
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
lumisync-0.7.2.tar.gz -
Subject digest:
37f0fb59fe40e1d949c9ea12a34d9ada11df4f5fd420ac3e25924915d3c91480 - Sigstore transparency entry: 2661356362
- Sigstore integration time:
-
Permalink:
Minlor/LumiSync@237102eda3a209f3ae8c46f13a8c705eea287c88 -
Branch / Tag:
refs/tags/0.7.2 - Owner: https://github.com/Minlor
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi.yaml@237102eda3a209f3ae8c46f13a8c705eea287c88 -
Trigger Event:
release
-
Statement type:
File details
Details for the file lumisync-0.7.2-py3-none-any.whl.
File metadata
- Download URL: lumisync-0.7.2-py3-none-any.whl
- Upload date:
- Size: 253.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
184c57c4b246e72240728c7caac044f1363317192285fc78935f7e6ea4f241f3
|
|
| MD5 |
ccd4aa50d8652d895eca1735976a2ca2
|
|
| BLAKE2b-256 |
fcc72c1d75756f36528fd0328ac3950ca2f40a43c8de299cd504ad5cfd50b7b4
|
Provenance
The following attestation bundles were made for lumisync-0.7.2-py3-none-any.whl:
Publisher:
pypi.yaml on Minlor/LumiSync
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
lumisync-0.7.2-py3-none-any.whl -
Subject digest:
184c57c4b246e72240728c7caac044f1363317192285fc78935f7e6ea4f241f3 - Sigstore transparency entry: 2661356390
- Sigstore integration time:
-
Permalink:
Minlor/LumiSync@237102eda3a209f3ae8c46f13a8c705eea287c88 -
Branch / Tag:
refs/tags/0.7.2 - Owner: https://github.com/Minlor
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi.yaml@237102eda3a209f3ae8c46f13a8c705eea287c88 -
Trigger Event:
release
-
Statement type: