LoupixDeck is an open-source control deck application for Loupedeck devices and the Razer Stream Controller.
It runs on Linux and Windows, lets you build custom touch pages, rotary controls, macros, integrations and plugins, and does not depend on the official vendor software.
Built with Avalonia and .NET 9.
New here? The User Manual walks through pages, buttons, layers, states, macros, integrations and automation step by step.
- Linux and Windows support
- Loupedeck Live, Live S, CT (partial) and Razer Stream Controller support
- Multi-device support with serial-scoped profiles
- Layer-based touch button editor with images, animated images, text, symbols and wallpapers
- Stateful buttons with multiple states and per-state actions
- Rotary encoder pages with rotation, click and press actions
- Visual macro editor with variables, conditions, loops, waits and prompts
- OBS Studio, Elgato Key Lights, Cooler Control, Argus Monitor and Windows Audio integrations
- Local CLI / IPC automation for scripts and external tools
- Plugin SDK for custom commands, dynamic text providers and settings UI
Pre-built releases are available here:
Release builds are self-contained. The .NET runtime is bundled and does not need to be installed separately.
Recommended installer:
LoupixDeck-Setup-win-x64.exe
Portable ZIP:
LoupixDeck-win-x64.zip
For the portable build, extract the ZIP and run:
LoupixDeck.exeRecommended 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, installs LoupixDeck system-wide, adds udev rules and creates a desktop entry.
After installation, start it with:
loupixdeckOr launch it from your application menu.
Prefer to inspect the installer first?
curl -fsSLO https://raw.githubusercontent.com/RadiatorTwo/LoupixDeck/master/install-loupixdeck.sh
less install-loupixdeck.sh
bash install-loupixdeck.sh| Device | Status | Layout | VID:PID |
|---|---|---|---|
| Loupedeck Live | Supported | 4×3 touch grid, 2 side touch strips, 6 rotary encoders, 8 round buttons | 2ec2:0004 |
| Loupedeck Live S | Supported | 5×3 touch grid, 2 rotary encoders, 8 physical buttons | 2ec2:0006 |
| Razer Stream Controller | Supported | 4×3 touch grid, 2 side panels, 6 rotary encoders, 8 LED buttons | 1532:0d06 |
| Loupedeck CT | Partial | 4×3 touch grid, round wheel touchscreen, 6 dials, wheel, round and square buttons | 2ec2:0003/0007 |
Loupedeck CT support is still a work in progress. Some controls and behaviours are not feature-complete yet and need further hardware verification.
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.
Create custom touch buttons from multiple visual layers.
- Image, animated image, text and symbol layers
- Live preview with direct layer manipulation
- Per-page wallpapers with opacity control
- Optional visual touch feedback
- Content-addressed asset store for deduplicated images
- Material Design Icons symbol picker
Buttons can hold several named states and cycle through them on press.
- Per-state visuals and command sequences
- Local mode for simple state cycling
- External mode for states driven by plugins or live status commands
Rotary controls can use separate pages and separate actions for each input type.
- Rotate left / right
- Click
- Press
- Multi-command sequences per action
- Plugin command groups for assigning related rotary actions together
LoupixDeck includes a visual macro editor for reusable automation sequences.
Supported macro actions include keyboard input, mouse input, delays, command execution, variables, conditions, loops, wait conditions and prompts.
Input injection backends:
| Platform | Backend |
|---|---|
| Linux | uinput |
| Windows | SendInput |
| Windows | Optional Interception driver |
Built-in commands and dynamic values are available 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
Play a full-display animated screensaver after a configurable idle time.
- GIF or MP4 source
- Adjustable idle timeout
- Wakes on the next touch or control interaction
Automatically switch pages when the foreground application changes.
Rules can match a process name, an optional window title substring and a fallback page.
| Platform | Status |
|---|---|
| Windows | Supported |
| Linux X11 / XWayland | Supported via xprop |
| Pure Wayland | Not supported, no common focus protocol |
Supported touch buttons can use native vibration effects.
Native haptic support is based on reverse-engineered firmware commands. Technical notes are available in docs/NATIVE_HAPTIC.md.
Huge thanks to @Athorus for the reverse-engineering work that made this possible.
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
| Loupedeck Live S | Razer Stream Controller |
|---|---|
![]() |
![]() |
| Layer Editor | Symbol Picker |
|---|---|
![]() |
![]() |
| Settings | Macro Editor |
|---|---|
![]() |
![]() |
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:
It is also available as the LoupixDeck.PluginSdk NuGet package.
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.
Linux:
./LoupixDeck nextpage
./LoupixDeck page 3
./LoupixDeck updatebutton 6 text=Build_OK backColor=LimeGreen
./LoupixDeck System.ObsStartRecordWindows:
.\LoupixDeck.exe nextpage
.\LoupixDeck.exe page 3
.\LoupixDeck.exe updatebutton 6 text=Build_OK backColor=LimeGreenTarget a specific device:
./LoupixDeck --device A1B2C3 page 3
./LoupixDeck -d "Loupedeck Live S" nextpageIPC endpoints:
| Platform | Endpoint |
|---|---|
| Linux | Unix domain socket /tmp/loupixdeck_app.sock |
| Windows | Named pipe LoupixDeck_Pipe |
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.
- User Manual — complete feature documentation
- Native Haptic Notes — reverse-engineered haptic commands
- Plugin SDK — build custom plugins
- Latest Releases — download pre-built binaries
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-x64git 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-x64Linux device and macro permissions
On Linux, macro execution writes to /dev/uinput and macro recording reads /dev/input/event*.
The bundled install-loupixdeck.sh already writes the uinput rule and adds the invoking user to the input group. Being able to run macros does not automatically mean recording works — recording additionally needs read access to /dev/input/event*, which the input group provides.
Manual uinput rule:
KERNEL=="uinput", SUBSYSTEM=="misc", GROUP="input", MODE="0660", OPTIONS+="static_node=uinput"
Add your user to the input group:
sudo usermod -aG input "$USER"Then log out and back in.
If the device itself is not accessible without sudo, add a udev rule for its 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 triggerManaged 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 for daily use and actively developed.
Most core features are available for Loupedeck Live, Loupedeck Live S and Razer Stream Controller. Loupedeck CT support is still incomplete and depends on further hardware testing.
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.





