A C# plugin for Logitech MX Creative Console and Loupedeck consoles that allows you to control your LIFX smart lights with ultra-low latency using a hybrid LAN UDP and Cloud API architecture.
Note
- Hybrid LAN & Cloud Architecture: Blends fast local UDP control (latency
< 5ms) with Cloud API fallbacks. - Parallel Execution: Commands are sent to all target bulbs in parallel for near-instant room adjustments.
- Smart Recovery: Automatically bypasses offline or unreachable local bulbs using a 15-second local failure debounce cache, ensuring that online bulbs continue to react instantly.
- Finesse Dial Control: Features fine-tuned tick increments and a highly responsive 100ms coalescing throttle delay for immediate tactile feedback.
- Premium Visual Aesthetics: Custom-rendered keypad buttons featuring a premium black background and vibrant purple (
#8200FF) text. - Asynchronous UI: All API operations run in background threads to keep the console UI and displays completely lag-free.
- Local Settings: Securely reads your Personal Access Token from your Documents or local user profile.
Important
- Room Selector: The first action you map must be a Room Selector key. This button dynamically highlights by inverting to a purple background when a room/group is active. All subsequent buttons will apply their effects to this selected room. If no Room Selector is active, the console defaults to global control.
To enable the plugin to talk to your lights, you need to provide your Personal Access Token:
- Log in to LIFX Cloud Settings.
- Under "Personal Access Tokens", click "Generate New Token".
- Copy the token immediately.
- Save it into a file named
.lifx_tokeninside your Windows user directory (e.g.,C:\Users\YOUR_USERNAME\.lifx_token) orLIFX_Token.txtinside your Documents folder.- Alternatively, in WSL you can run:
echo "your_lifx_token_here" > "/mnt/c/Users/YOUR_USERNAME/.lifx_token"
- Alternatively, in WSL you can run:
You can use the provided Makefile to automate building, deploying, and restarting the service:
- Install the .NET 8.0 SDK (if you don't have it installed in
/home/eole/.dotnet):make prepare
- Build, deploy, and restart the LogiPluginService on Windows in one command:
make
- Individual Makefile targets:
make prepare: Installs the .NET SDK if missing, and automatically verifies/prompts for the LIFX token.make setup-token: Detects if the LIFX token is configured, and prompts you to enter it if missing.make status: View the current build environment configuration (dotNET path, token config, directories, etc.).make build: Only compiles the C# solution (verifies that the .NET SDK is installed first).make deploy: Cleans the Windows plugin AppData directory and copies compiled dlls.make restart: Restarts the Logitech LogiPluginService on Windows.make publish: Packages the plugin as a.lproj4archive and saves it to the Windows Downloads directory.make clean: Cleans build artifacts.
- Open Logi Options+ on Windows and select the MX Creative Keypad.
- Click Customize Keys to open the customization panel.
- Close the Plugins Manager to return to the Action Picker on the right side.
- Click
ALL ACTIONSat the top of the picker, locate the LIFX category, and drag and drop actions (Toggle and Brightness) onto your dial or button keys.
- Local LAN UDP Control: Implemented full local network control on standard port
56700for sub-5ms latency. - Parallel Execution & Smart Recovery:
- Enabled parallel UDP transmission to multiple target lights.
- Added a
15-secondlocal failure cache; if a light goes offline, the plugin routes its commands straight to the background Cloud API queue, avoiding UDP timeout delays (250ms) for other online bulbs. - If a bulb fails local UDP command, only that individual bulb falls back to Cloud API rather than dragging down the entire group command.
- Refined Dial Sensitivity & Detail:
- Increased precision: Brightness changes by 1% per tick, Hue by 2° per tick, and Warmth by 100K per tick.
- Reduced default coalescing throttle delay from 350ms to 100ms to provide instant real-time physical dial responsiveness.
- Diagnostics Clean-up: Filtered self-received discovery broadcast loopback packets (
000000000000MAC) from logs.
- Token Configuration Restore: Restored local file-based token loading via Documents folder (
LIFX_Token.txt) or profile folder (.lifx_token), resolving Options+ UI initialization crashes. - Core C# Plugin Features:
- Room & Group Selector: Implemented room/group selector keys with dynamic button highlight state (inverting to purple background when selected).
- LIFX Scenes: Added support for executing configured Cloud scenes via keypad buttons (rendering custom picture frame templates).
- Light Selector: Added individual light selection keys, featuring mutually exclusive state logic with room selections.
- Light Reachability: Implemented offline/unreachable light detection (displays muted gray bulb icon).
- State Cycle: Created sequential state color wheel cycling.
- Tactile Adjustments: Added dynamic brightness controls (press dial to reset to 100%), full hue/color spectrum sweeping, and white warmth shifting (1500K to 9000K).
- Hardware Effects: Added actions to activate/control Breathe, Pulse, Move, Morph, Flame, Clouds, Sunrise, and Sunset effects, alongside a general "Effects Off" cancellation key.
- Asynchronous Execution: Background-threaded HTTP Cloud API requests to prevent console displays/dials from freezing.
- Logi Actions SDK - Official Logitech Actions SDK repository for building console plugins.
- Logitech MX Creative Console - Official product page for the keypad and dialpad.
- LIFX Smart Lights - Official website for LIFX smart lighting.
- LIFX Developer API - Official LIFX HTTP API documentation.
- .NET SDK - Official homepage for the .NET development platform.
- Google Antigravity - Official website for the Google DeepMind agentic development platform.
This is an unofficial, independent plugin developed using Google DeepMind's Antigravity AI coding assistant. It is not affiliated with, authorized, maintained, sponsored, or endorsed by Logitech, Loupedeck, or LIFX. All product and company names are trademarks™ or registered® trademarks of their respective holders.
