LoupixDeck is an open-source, cross-platform control deck application for the Loupedeck Live S and Razer Stream Controller.
It lets you build custom pages with touch buttons, rotary controls, physical buttons, macros, integrations and plugins — without depending on the official vendor software.
Built with Avalonia and .NET 9.
- Linux and Windows support
- Loupedeck Live S and Razer Stream Controller support
- Multi-device support with serial-scoped configuration
- Layer-based touch button editor with images, text, symbols and wallpapers
- Rotary encoder pages with separate actions for rotation, click and press
- Visual macro editor for keyboard, mouse, delay and command sequences
- Native haptic feedback on supported touch buttons
- OBS Studio, Elgato Key Lights, Cooler Control, Argus Monitor and Windows Audio integrations
- App-focus page switching
- Local CLI / IPC channel for scripts and automation
- Plugin SDK for custom commands, dynamic text providers and settings UI
| Device | VID:PID | Layout |
|---|---|---|
| Loupedeck Live S | 2ec2:0006 |
5×3 touch grid, 2 rotary encoders, 8 physical buttons |
| Razer Stream Controller | 1532:0d06 |
4×3 touch grid, 2 side panels, 6 rotary encoders, 8 LED buttons |
Multiple devices can run in parallel in a single LoupixDeck instance. Even two identical units are separated by USB serial and keep their own configuration.
Pre-built binaries are available on the GitHub Releases page:
https://github.com/RadiatorTwo/LoupixDeck/releases/latest
| Platform | Asset |
|---|---|
| Windows | LoupixDeck-win-x64.zip |
| Linux | LoupixDeck-linux-x64.tar.gz |
Release builds are self-contained. The .NET runtime is bundled and does not need to be installed separately.
Download LoupixDeck-win-x64.zip, extract it and run:
LoupixDeck.exeUse the installer script:
curl -fsSL https://raw.githubusercontent.com/RadiatorTwo/LoupixDeck/master/install-loupixdeck.sh | bashOr with wget:
wget -qO- https://raw.githubusercontent.com/RadiatorTwo/LoupixDeck/master/install-loupixdeck.sh | bashThe installer downloads the latest release build, installs LoupixDeck system-wide, adds udev rules and creates a desktop entry.
After installation, launch it with:
loupixdeckOr start it from your application menu.
To inspect the script first:
curl -fsSLO https://raw.githubusercontent.com/RadiatorTwo/LoupixDeck/master/install-loupixdeck.sh
less install-loupixdeck.sh
bash install-loupixdeck.sh- Stack image, text and symbol layers per button
- Live preview with direct layer manipulation
- Per-page wallpaper with opacity control
- Optional visual touch feedback
- Content-addressed asset store for deduplicated images
- Material Design Icons symbol picker
-
Independent rotary pages
-
Separate commands for:
- rotate left / right
- click
- press
-
Multi-command sequences per action
LoupixDeck includes a visual macro editor for reusable macro sequences.
Supported macro steps:
| Step | Description |
|---|---|
| Text | Type a text string |
| Key Combination | Send combinations like Ctrl+Shift+Esc |
| Key Down / Key Up | Hold or release individual keys |
| Mouse | Click, press, release, move or scroll |
| Delay | Wait for a configured time |
| Command | Run another LoupixDeck command |
Input injection backends:
| Platform | Backend |
|---|---|
| Linux | uinput |
| Windows | SendInput |
| Windows | Optional Interception driver |
LoupixDeck includes built-in commands and dynamic values for:
- OBS Studio via obs-websocket
- Elgato Key Lights via Zeroconf discovery
- Cooler Control
- Argus Monitor on Windows
- Windows Audio via WASAPI
- Shell commands
- Page navigation
- Device power control
- Runtime button updates
Touch buttons can use native vibration effects on supported devices.
Native haptic support is based on reverse-engineered firmware commands. Technical notes are available here:
Huge thanks to @Athorus for the reverse-engineering work that made this possible.
LoupixDeck can automatically switch pages when the foreground application changes.
Rules can match:
- process name
- optional window title substring
- fallback page
Supported platforms:
| Platform | Status |
|---|---|
| Windows | Supported |
| Linux X11 / XWayland | Supported via xprop |
| Pure Wayland | Not supported, no common focus protocol |
LoupixDeck can drive multiple connected devices at the same time.
- Each device gets its own profile
- Identical devices are separated by USB serial
- Devices can be connected or disconnected while LoupixDeck is running
- A device switcher appears when more than one device is connected
- CLI commands can target a specific device
LoupixDeck supports third-party plugins.
Plugins can provide:
- custom commands
- dynamic text providers
- settings UI
- integration-specific functionality
The Plugin SDK is maintained in a separate repository:
https://github.com/RadiatorTwo/LoupixDeck.PluginSdk
It is also available as the LoupixDeck.PluginSdk NuGet package.
| Loupedeck Live S | Razer Stream Controller |
|---|---|
![]() |
![]() |
| Layer Editor | Symbol Picker |
|---|---|
![]() |
![]() |
| Settings | Macro Editor |
|---|---|
![]() |
![]() |
LoupixDeck auto-detects supported devices by USB VID/PID.
Configuration is stored as JSON in the user config directory.
Typical files:
| File | Purpose |
|---|---|
config.json |
Global application settings |
config_<device>.json |
Per-device layout and device settings |
obs.json |
OBS integration settings |
elgato.json |
Elgato integration settings |
macros.json |
Shared macro definitions |
Per-device configuration is scoped by USB serial whenever possible, so two identical devices do not overwrite each other's layouts.
If a configuration file becomes corrupted, LoupixDeck creates a backup before writing a fresh file.
While LoupixDeck is running, external scripts can control it through a local IPC channel.
The easiest way is to call the LoupixDeck binary again. If an instance is already running, the second process forwards the command and exits.
./LoupixDeck nextpage
./LoupixDeck page 3
./LoupixDeck updatebutton 6 text=Build_OK backColor=LimeGreen
./LoupixDeck System.ObsStartRecord.\LoupixDeck.exe nextpage
.\LoupixDeck.exe page 3
.\LoupixDeck.exe updatebutton 6 text=Build_OK backColor=LimeGreenWhen multiple devices are connected, a specific device can be targeted:
./LoupixDeck --device A1B2C3 page 3
./LoupixDeck -d "Loupedeck Live S" nextpageAvailable IPC endpoints:
| Platform | Endpoint |
|---|---|
| Linux | Unix domain socket /tmp/loupixdeck_app.sock |
| Windows | Named pipe LoupixDeck_Pipe |
Requires the .NET 9 SDK.
git clone https://github.com/RadiatorTwo/LoupixDeck.git
cd LoupixDeck
dotnet publish LoupixDeck.csproj -c Release -r linux-x64 --self-contained true \
/p:PublishSingleFile=true \
/p:PublishTrimmed=false \
/p:EnableCompressionInSingleFile=true \
/p:ReadyToRun=true \
-o publish/linux-x64On Linux, macros require access to /dev/uinput.
If the device is not accessible without sudo, add a udev rule for the device VID/PID.
Example for the Loupedeck Live S:
SUBSYSTEM=="usb", ATTRS{idVendor}=="2ec2", ATTRS{idProduct}=="0006", MODE="0666"
SUBSYSTEM=="tty", ATTRS{idVendor}=="2ec2", ATTRS{idProduct}=="0006", MODE="0666"
For the Razer Stream Controller, replace 2ec2:0006 with 1532:0d06.
Reload rules and reconnect the device:
sudo udevadm control --reload-rules
sudo udevadm triggergit clone https://github.com/RadiatorTwo/LoupixDeck.git
cd LoupixDeck
dotnet publish LoupixDeck.csproj -c Release -r win-x64 --self-contained true `
/p:PublishSingleFile=true `
/p:PublishTrimmed=false `
/p:EnableCompressionInSingleFile=true `
/p:ReadyToRun=true `
-o publish/win-x64Managed crash logging can be enabled with:
./LoupixDeck --crashlogOn Windows:
.\LoupixDeck.exe --crashlogFor very noisy first-chance exception logging:
./LoupixDeck --firstchanceCrash logs are written to the LoupixDeck user config directory.
Native crashes are not captured by --crashlog.
For native crashes, use the .NET minidump environment variables instead.
The optional Windows macro driver feature can use the Interception kernel driver to inject keyboard and mouse input at driver level.
This can be useful for applications that read raw input.
Important notes:
- The Interception driver is not bundled with LoupixDeck.
- It is only downloaded when installing it from the settings.
- Interception is free for non-commercial use only.
- Commercial use requires a separate license from its author.
- Without Interception, macros use the standard Windows
SendInputbackend.
LoupixDeck is usable, but still actively developed.
Features may change between releases and some areas may still have rough edges. Bug reports, testing feedback and pull requests are welcome.
LoupixDeck is released under the MIT License.
Third-party components are subject to their own licenses.





