A fast, lightweight, and fully-featured desktop controller for Philips WiZ lights, built with Python and CustomTkinter for Windows.
This app provides instant local control of WiZ lights without relying on cloud services, while offering advanced features like presets, automatic discovery, persistent saved lights, and a custom-built color engine.
- Direct LAN control of WiZ lights
- Extremely fast response using UDP commands
- Built-in debounce to prevent firmware overload
- Scan your local network for WiZ lights
- Lists:
- Device name
- IP address
- MAC address (used as stable identifier)
- Works even if IP addresses change
- Save lights permanently using MAC address
- Automatically updates saved IPs when they change
- Supports:
- Renaming saved lights
- Deleting saved lights
- Double-click any saved light to connect instantly
- Custom-built anti-aliased color wheel
- Fully synced:
- Color wheel
- RGB sliders
- HSV sliders
- Hex input
- Changes propagate correctly in all directions
- Last used RGB values persist across restarts
- White mode with Kelvin temperature slider
- Temperature rendered as a gradient canvas
- Smooth animated transitions
- Supports:
- Presets
- Sync from light
- Manual adjustment
- Gradient-based brightness slider
- Gradient reflects actual bulb color, not UI-only state
- Works consistently across:
- RGB mode
- White mode
- Presets
- Sync from light
- Smooth animation when changed by presets
- Separate presets for:
- RGB mode
- White mode
- Presets store:
- Color / Temperature
- Brightness
- Mode
- Features:
- One-click apply
- Automatic highlight when active
- De-highlights if state no longer matches
- Right-click to:
- Rename
- Reorder (Move Left / Right)
- Inspect values
- Presets persist across restarts
- Reads the actual state of the bulb
- Updates:
- Mode
- Color / Temperature
- Brightness
- Preset highlight state
- Safe to use at any time
- Optional Auto-Sync on startup
- Accessible via gear icon
- Supports:
- Accent color customization
- Highlighted preset color customization
- Auto-Sync toggle
- Live preview of color values
- Reset to defaults supported
- All settings persist in AppData
- Full in-app help dialog
- Covers:
- First-time setup
- Discovery vs manual IP
- Presets usage
- Sync behavior
- Known WiZ firmware quirks
- Non-modal (can use app while reading)
- Non-blocking discovery (UI never freezes)
- Handles WiZ firmware “micro-sleeps”
- Prevents invalid sync attempts (empty IP)
- Gracefully handles destroyed dialogs
- No duplicate network commands within debounce window
- Windows (tested)
- Python 3.10+
- Local network required, the same one to which your WiZ lights are connected
A pre-packaged EXE is provided in the releases section, but the app can be packaged into a single executable using PyInstaller: (Assets folder is required in the same location as the .py file)
pyinstaller --onefile --noconsole --name "KeksWizLightController" --icon=assets/app_icon.ico --add-data "assets;assets" wiz.pyYou are free to use AND modify the program for personal use, but you must credit this page in the case you decide to publish it anywhere, under the GPL-3.0 license. I am not responsible for any damange caused by the modification of this program.