Open source RGB lighting control that doesn't depend on manufacturer software. Supports Windows and Linux. ASUS, ASRock, Corsair, G.Skill, Gigabyte, HyperX, MSI, Razer, ThermalTake, and more supported See the Wiki for this project for information.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
mike 4a333e9b50 Fixed HyperX Alloy Origins Core HID communication on Windows 1 day ago
.github Create FUDING.yml for GitHub 2 months ago
.gitlab/issue_templates Quick formatting change to correct upstream issue and refresh issue 4 months ago
Controllers Fixed HyperX Alloy Origins Core HID communication on Windows 8 hours ago
RGBController Override UpdateLEDs() for RGBController_Network to always process synchronously 3 weeks ago
debian Philips Hue (Standard and Entertainment Mode) Support using hueplusplus library 1 week ago
dependencies Disable parsing certificate, it doesn't appear to be necessary to control Hue and prevents build on older mbedtls releases 1 week ago
fedora Fix CI for Philips Hue changes 1 week ago
i2c_smbus Don't delete i2c bus list on redetect, as WMI query issues prevent them from being redetected 3 weeks ago
i2c_tools Add i2c tool for reading multiple bytes from an SMBus device register 10 months ago
net_port Fixes for memory issues detected by valgrind 10 months ago
pci_ids Add Non OC 2060S PCIe ID, correct RAM 1 week ago
qt Prevent theme box from saving theme setting until initialized 2 weeks ago
scripts Adding test stages to Linux builds 2 weeks ago
serial_port Clean up serial_port class and add MacOS support (only standard baud rates for now) 3 months ago
super_io Fixes for memory issues detected by valgrind 10 months ago
wmi Revert change disabling redetection of i2c interfaces and fix disconnected WMI failure by always reconnecting before query 3 weeks ago
.gitignore Add lower case openrgb executable name to .gitignore 6 months ago
.gitlab-ci.yml Fix CI for Philips Hue changes 1 week ago
.gitmodules Remove libe131 submodule and add necessary files to main repo. Fixes Gitlab automatic packaging issue 1 year ago
60-openrgb.rules Add Steelseries Rival 650 wireless support 2 days ago
Detector.h Make detectors for QMK OpenRGB controller configurable 2 weeks ago
DeviceDetector.h Implement dynamic detectors - run-once functions that can register detectors dynamically 2 weeks ago
LICENSE Add LICENSE 2 years ago
LogManager.cpp Tiny fixups (server conn info leak closed, log va leak closed, config dir optimized) 3 weeks ago
LogManager.h Small adjustments in LogManager 3 months ago
NetworkClient.cpp Rework network client callback pipeline - route callbacks from clients through ResourceManager so that device list callbacks get called. Fixes remote devices not showing up in plugins. 1 month ago
NetworkClient.h Rework network client callback pipeline - route callbacks from clients through ResourceManager so that device list callbacks get called. Fixes remote devices not showing up in plugins. 1 month ago
NetworkProtocol.cpp Initial network files 1 year ago
NetworkProtocol.h OpenRGB version 0.6 2 weeks ago
NetworkServer.cpp Autoclose updated 3 weeks ago
NetworkServer.h Autoclose updated 3 weeks ago
OpenRGB.h Rename OpenAuraSDK.cpp to OpenRGB.cpp and remove old unused code 1 year ago
OpenRGB.patch Add timeouts to i2c-nct6775 driver and fix kernel segfault caused by byte access with no data 1 year ago
OpenRGB.pro Add HyperX Origins Core support (direct mode) 1 day ago
OpenRGBPluginInterface.h A bit of cleanup (Remove depreciated entry from PluginInfo Struct) 5 months ago
PluginManager.cpp Logger tweaks 3 months ago
PluginManager.h Move plugin initialization into PluginManager and log plugin loading 3 months ago
ProfileManager.cpp Fix mismatched new[] / delete 1 month ago
ProfileManager.h Fixing profile loading #1135 4 months ago
README.md Update README.md for Hue build requirements 6 days ago
ResourceManager.cpp Fix missing % that got lost in transfer 4 days ago
ResourceManager.h Implement dynamic detectors - run-once functions that can register detectors dynamically 2 weeks ago
SettingsManager.cpp SettingsManager: Catch exception with constant reference parameter. 3 months ago
SettingsManager.h Initial commit for Plugins 5 months ago
cli.cpp Enumerate Wireless connected Logitech Lightspeed (Unifying) devices 2 weeks ago
filesystem.h Adding test stages to Linux builds 2 weeks ago
main.cpp Wait up to 5 seconds for the local server connection to retrieve all controllers before continuing, so that CLI mode has all controllers available for applying changes 2 weeks ago

README.md

OpenRGB

Visitors Pipeline Status

Visit our website at https://openrgb.org!

One of the biggest complaints about RGB is the software ecosystem surrounding it. Every manufacturer has their own app, their own brand, their own style. If you want to mix and match devices, you end up with a ton of conflicting, functionally identical apps competing for your background resources. On top of that, these apps are proprietary and Windows-only. Some even require online accounts. What if there was a way to control all of your RGB devices from a single app, on both Windows and Linux, without any nonsense? That is what OpenRGB sets out to achieve. One app to rule them all.

Features

  • Set colors and select effect modes for a wide variety of RGB hardware
  • Save and load profiles
  • Control lighting from third party software using the OpenRGB SDK
  • Command line interface
  • Connect multiple instances of OpenRGB to synchronize lighting across multiple PCs
  • Can operate standalone or in a client/headless server configuration
  • View device information
  • No official/manufacturer software required
  • Graphical view of device LEDs makes creating custom patterns easy

Supported Devices

Configuration

WARNING!

This project interacts directly with hardware using reverse engineered protocols. While we do our best to make sure we're sending the right data, there is always some risk in sending data to hardware when we don't understand exactly how that hardware works.

There have been two instances of hardware damage in OpenRGB's development and we've taken precautions to prevent it from happening again.

  • The MSI Mystic Light code reportedly bricked the RGB on certain MSI boards when sending certain modes. This code has been disabled and MSI Mystic Light motherboards will not work with OpenRGB at this time.
  • There were reports of bricked Gigabyte Aorus Z390 motherboards caused by dumping SMBus address 0x68 in an attempt to reverse engineer the RGB. Due to this, the SMBus Tools page on OpenRGB is hidden by default now as it has no real use to non-developers.
  • To enable the MSI Mystic Light code, you must uncomment the detection macro in the Mystic Light controller detection code and recompile.

OpenRGB_Device_View

Windows

  • Pre-built binaries are available under the Releases section on GitLab. - You will need the Microsoft Visual 2019 C++ runtime installed. You can get it here
  • If you wish to build the application yourself:
    1. Download the latest Visual Studio Community Edition and Qt Creator.
    2. Open the OpenRGB.pro project in Qt Creator.
    3. Use the MSVC compiler kit, either 32- or 64-bit, to build the application.
    4. Run the project from Qt Creator. If you want to use your custom build standalone, download the latest matching Release package and replace the OpenRGB.exe in it with your new build.
  • You must run the application as Administrator the first time to allow InpOut32 to set up. It can be run as a normal user afterwards

USB Access

  • Early versions of OpenRGB used the WinUSB driver, installed using Zadig. This is no longer required, and you need to uninstall the WinUSB driver if you previously installed it. You can uninstall the WinUSB driver by following this guide.

Linux

  • Pre-built binaries in AppImage format are available under the Releases section on GitLab.
  • You can build the project using Qt Creator or on the command line.
    1. Install build dependencies
      • Debian/Ubuntu: sudo apt install git build-essential qtcreator qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools libusb-1.0-0-dev libhidapi-dev pkgconf libmbedtls-dev
      • Debian (before bullseye) or Ubuntu (before 21.04): sudo apt install git build-essential qtcreator qt5-default libusb-1.0-0-dev libhidapi-dev pkgconf libmbedtls-dev
      • Fedora: sudo dnf install git make automake gcc gcc-c++ qt-creator qt5-devel hidapi-devel libusb-devel libmbedtls-devel
    2. git clone https://gitlab.com/CalcProgrammer1/OpenRGB
    3. cd OpenRGB
    4. qmake OpenRGB.pro
    5. make -j8
  • Run the application with ./openrgb
  • You can also build a Debian package (.deb) from this source code with dpkg-buildpackage -us -B

SMBus Access

  • SMBus access is necessary for controlling RGB RAM and certain motherboard on-board LEDs.
  • If you are not trying to use OpenRGB to control RGB RAM or motherboard LEDs, you may skip this section.
  • ASUS and ASRock motherboards have their RGB controller on an SMBus interface that is not accessible by an unmodified Linux kernel (for now). I am working on getting patches submitted upstream, but for now you must patch your kernel with the provided OpenRGB.patch file.
  • Allowing access to SMBus:
    1. Load the i2c-dev module: sudo modprobe i2c-dev
    2. Load the i2c driver for your chipset:
      • Intel:
        • sudo modprobe i2c-i801
        • sudo modprobe i2c-nct6775 - Secondary controller for motherboard LEDs (requires patch)
      • AMD:
        • modprobe i2c-piix4
        • Unmodified kernel will have one interface, patched kernel will have two. The first at 0x0B00 and the second at 0x0B20. The 0x0B20 interface is for motherboard LEDs.
  • Instructions on patching the kernel:
  • Some Gigabyte/Aorus motherboards have an ACPI conflict with the SMBus controller.
    • Add acpi_enforce_resources=lax to your kernel command line and reboot. The controller should now show up.
  • You'll have to enable user access to your SMBus if you don't run as root.
    • List all SMBus controllers: sudo i2cdetect -l
    • Note the number for PIIX4, I801, and NCT6775 controllers.
    • Give user access to those controllers, for instance: sudo chmod 777 /dev/i2c-0

USB Access

  • USB devices require udev rules to access as a normal user.
  • You can run OpenRGB as root to detect all USB devices.
  • Udev rules are included in this repo:
    • Copy the 60-openrgb.rules file to /etc/udev/rules.d/
    • Reload rules with sudo udevadm control --reload-rules && sudo udevadm trigger

MacOS

  • Pre-built binaries in zipped application package format are available under the Releases section on GitLab.
  • You can build the project using Qt Creator or on the command line.
    1. Install build dependencies with Homebrew
      • Install Homebrew by following the instructions at https://brew.sh/
      • brew install git qt5 hidapi libusb
      • brew link qt5
    2. Create a local certificate called OpenRGB with code signing capability
    3. git clone https://gitlab.com/CalcProgrammer1/OpenRGB
    4. cd OpenRGB
    5. qmake OpenRGB.pro
    6. make -j8
    7. macdeployqt OpenRGB.app -codesign=OpenRGB
    8. Copy the OpenRGB.app application package to Applications

SMBus Access

  • SMBus/I2C devices are currently not supported on MacOS.

USB Access

  • USB devices may require the Input Monitoring permission. You can add OpenRGB in System Preferences > Security & Privacy > Privacy.

Join Our Discord

Visit Our Subreddit

How-Tos and FAQs

Support OpenRGB

  • OpenRGB is a project I created to solve a problem I had with the RGB ecosystem. My goal isn't to make money off of this project. That said, people have requested to donate, and donations allow me to buy more RGB stuff to reverse engineer.
  • Donate via PayPal
  • Become a Patron (I'm not doing any Patreon-exclusive content, it's purely for donation)
  • Donate via Bitcoin: 1N83YPu7btXYadPS1neB9zX7X1QTdpyZQ

History of OpenRGB

  • OpenRGB is a continuation of OpenAuraSDK, which itself was created out of reverse engineering work done on the Keyboard Visualizer project. For a complete history of the RGB projects that led to OpenRGB's creation, see the History page.

Contributing

  • Want to contribute support for a new device? Check out the RGBController API page for documentation of how OpenRGB implements device control.

OpenRGB SDK

Applications Supporting OpenRGB SDK

OpenRGB Plugins

Projects Used

Projects Researched

While no code from these projects directly made its way into OpenRGB, these projects have been invaluable resources for protocol information.