OmniLED is a program allowing you to control devices with an OLED screen. It's designed to work on both Linux and Windows, while supporting all SteelSeries devices, virtually any custom USB device, and allowing for in-depth customization.
- Customizability with the Lua scripting engine:
- Create custom layouts
- Write event handlers
- Use any font
- Built-in applications:
- Extensibility:
- Create custom applications using the gRPC interface
- Configure the usb settings and data format to work with your device
- Versatility:
- Works on Linux and Windows
- Choose from multiple backends: Raw USB, Emulator, SteelSeries GG
OmniLED can be customized to support virtually any USB device, but it comes with some configurations that should work right out of the box.
Officially supported devices:
- SteelSeries Apex 5
- SteelSeries Apex 7 TKL
- SteelSeries Apex Pro
- SteelSeries Apex Pro TKL Wireless Gen 3 (Wired mode)
- SteelSeries Apex Pro TKL Wireless Gen 3 (2.4G Wireless mode)
You can help expand this list by submitting a PR with a tested configuration. See the contributing guide for more information.
If SteelSeries GG supports your device, then OmniLED will support it too via the SteelSeries GG backend. All you need to know is its screen size.
Emulator will render a window on your screen. Useful to test the application or new layouts without affecting your physical device.
Install OmniLED (see the installation steps for both Linux and Windows) and run it.
At this point you should see an emulator window using a default config.
Now you can proceed to actually make OmniLED send data to your device.
-
Navigate to the
<CONFIG_DIR>inside the installation directory. This will by default be:- Windows:
C:\Users\<username>\AppData\Roaming\OmniLED\config - Linux:
~/.config/OmniLED/config
- Windows:
-
Open
<CONFIG_DIR>/devices.luato see if your device is already listed.
If it is, skip to step 4. -
Create a new configuration file for your device.
You can use
<CONFIG_DIR>/devices.luaas examples. -
Update the
<CONFIG_DIR>/scripts.luato register the scripts for your device instead of the emulator.SCREEN_BUILDER - :new('Emulator') + :new('YOUR_DEVICE_NAME') :with_layout_group({ { layout = volume, run_on = { 'AUDIO.Input', 'AUDIO.Output' }, }, { layout = spotify, run_on = { 'SPOTIFY.Artist', 'SPOTIFY.Progress', 'SPOTIFY.Title' }, }, { layout = clock, run_on = { 'CLOCK.Seconds' }, }, }) :with_layout_group({ { layout = weather, run_on = { 'CLOCK.Seconds' }, } }) :with_layout_group_toggle({ 'KEY(RAlt)', 'KEY(Slash)' }) :register()
-
Run the application again. You should now see the data on your device's screen.
-
Now you can customize the layout to your liking or keep it as is.
If the application doesn't start or crashes, check the logs and see if this helps you resolve the problem. If this doesn't help, feel free to open an issue.
You can find the logs in your systems' config directory. By default, this will be:
- Windows:
C:\Users\<username>\AppData\Roaming\OmniLED\data\logging.log - Linux:
~/.config/OmniLED/data/logging.log
All contributions are welcome! See the contributing guide for more information.
- GIF support
- Loading custom images (Load images and GIFs from disk)
- Hardware info (CPU usage, temps, RAM usage, etc.)
- Discord info (Mic status, currently speaking user, etc.)
- Graphical interface for installer and settings
This project is licensed under the GNU General Public License v3.0, see the LICENSE file for details.




