You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
Go to file
Tm T 780b0365fb Add ROG STRIX RX570 8G 1 day ago
.github Create FUDING.yml for GitHub 2 years ago
.gitlab Rework and fix Polychrome v1 controller 11 months ago
.vscode Add recomended VSCode extensions 8 months ago
AutoStart FreeBSD: Fix compilation 11 months ago
Controllers Add ROG STRIX RX570 8G 1 day ago
KeyboardLayoutManager Added Remove Row Opcode to the KLM 2 days ago
RGBController Move KeyboardLayoutManager to a new folder 2 months ago
debian Updating Debian version to conform with expected numbering for upgrades 4 months ago
dependencies AMD ADL Multiple bus support 2 weeks ago
fedora Updating Debian version to conform with expected numbering for upgrades 4 months ago
hidapi_wrapper Fix build on musl and rename wrapper function to match hidapi's name 4 months ago
i2c_smbus AMD ADL Multiple bus support 2 weeks ago
i2c_tools Replace most instances of sprintf() with snprintf() 3 months ago
net_port Add timeout to Philips Wiz packet receive so that it doesn't hang on rescan 1 month ago
pci_ids Add ROG STRIX RX570 8G 1 day ago
qt LED view selection should have no effect if not in per-LED mode 6 days ago
scripts Updating Debian version to conform with expected numbering for upgrades 4 months ago
serial_port Initial DMX (Enttec OpenDMX USB) support and serial_port improvements 1 month ago
super_io Initial commit for Gigabyte Super-IO motherboard controller (X570-UD) 9 months ago
wmi Attempt to fix Qt file dialog issue in Windows 2 years ago
.editorconfig Inital commit to .editorconfig file 1 year ago
.gitignore Updating Debian version to conform with expected numbering for upgrades 4 months ago
.gitlab-ci.yml Following on from commit 2e02f1d7 to remove redundant QM files 2 months ago
CONTRIBUTING.md Change Non-Mainline pipelines to be manually triggered 11 months ago
Colors.h Add Electric Ultramarine color 1 year ago
Detector.h Implement the wrapper for Linux in ResourceManager, change IPU to I for HyperX Quadcast S, code cleanup 4 months ago
DeviceDetector.h Implement the wrapper for Linux in ResourceManager, change IPU to I for HyperX Quadcast S, code cleanup 4 months ago
LICENSE Add LICENSE 4 years ago
LogManager.cpp Added support for unicode paths (filesystem::path approach) 5 months ago
LogManager.h Added support for unicode paths (filesystem::path approach) 5 months ago
NetworkClient.cpp Fix MacOS warning in NetworkClient.cpp 9 months ago
NetworkClient.h SDK Listening Options 11 months ago
NetworkProtocol.cpp Initial network files 3 years ago
NetworkProtocol.h SDK plugin control 5 months ago
NetworkServer.cpp SDK Plugins Fix 5 months ago
NetworkServer.h SDK plugin control 5 months ago
OpenRGB.patch Add timeouts to i2c-nct6775 driver and fix kernel segfault caused by byte access with no data 3 years ago
OpenRGB.pro Add support for Lego Dimensions Toypad Base. Closes #3399 7 days ago
OpenRGBPluginInterface.h Increment plugin API version as Segments breaks the existing API 5 months ago
PluginManager.cpp Remove convertQPath functions as it's only used once, fixes a warning for the unused version 1 month ago
PluginManager.h Added support for unicode paths (filesystem::path approach) 5 months ago
ProfileManager.cpp Read I2C bus location more reliably 1 week ago
ProfileManager.h Added support for unicode paths (filesystem::path approach) 5 months ago
README.md Added more informations about i2c 2 days ago
ResourceManager.cpp Detect if udev rules file is not present and present a warning dialog 6 days ago
ResourceManager.h Remove RGB controllers argument from standard detector 4 months ago
SettingsManager.cpp Added support for unicode paths (filesystem::path approach) 5 months ago
SettingsManager.h Added support for unicode paths (filesystem::path approach) 5 months ago
StringUtils.cpp UI: add a dialog that shows local hardware IDs 3 months ago
StringUtils.h UI: add a dialog that shows local hardware IDs 3 months ago
cli.cpp Amending CLI code for "All Devices" to resolve #2918 1 month ago
filesystem.h Adding test stages to Linux builds 2 years ago
main.cpp Remove unnecessary header file OpenRGB.h 4 months ago

README.md

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.

[[TOC]]

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 Mystic Light motherboard code bricked the RGB controller of some MSI motherboards. The code was disabled and reworked. We have been re-adding these motherboards to the support list as we verify that the new code works with them. Affected boards can be unbricked with a Nuvoton Nu-Link adapter.
  • 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.

OpenRGB_Device_View

Windows

  • You will need the Microsoft Visual 2019 C++ runtime installed. You can get it here
  • Pre-built Release binaries are available for Windows 10 / 11 64bit under the Releases section on GitLab.
  • If you want to test the latest (potentially unstable) code you can also get the Windows package from the pipeline builds.
Compiling
  • To build the application yourself on Windows:
    1. Download the latest Visual Studio Community Edition and Qt Creator.
    2. When installing the QT toolset select the latest revision of Qt 5.15.x as OpenRGB is not yet compatible with QT6
    3. Optionally install Git if you intend to contribute your changes to the mainline codebase.
    4. Open the OpenRGB.pro project in Qt Creator.
    5. Use the MSVC compiler kit, either 32- or 64-bit, to build the application.
    6. 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.

SMBus Access

  • You must run the application as Administrator the first time to allow WinRing0 to set up. It can be run as a normal user afterwards
  • Early versions of OpenRGB used InpOut32. This is no longer needed and should be removed to avoid warnings by some anti-cheat software. You can uninstall Inpout32 by following the instructions here.

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

Arch
Binaries
Debian / Ubuntu
Binaries
  • OpenRGB builds an official Debian package for Bullseye and Ubuntu 21.04 onwards for both the 64bit release and pipeline builds
  • There is also a legacy package for Debian 64bit Buster and it's derivatives (Ubuntu prior to 21.04) with release and pipeline builds
Compiling
  1. Install build dependencies
    • 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
  2. git clone https://gitlab.com/CalcProgrammer1/OpenRGB
  3. cd OpenRGB
  4. qmake OpenRGB.pro
  5. make -j$(nproc)
  6. You can then run the application from the compile directory with ./openrgb or install with make install
  7. You will also need to install the latest UDEV rules.
Packaging
  • You can also build a Debian package (.deb) from this source code with dpkg-buildpackage -us -B
    • Building a Debian package requires debhelper to be installed: sudo apt install debhelper
Fedora
Binaries
  • OpenRGB builds an official Fedora package for the latest release of OpenRGB
  • There are also pipeline builds for both Fedora 35 and Fedora 36 available
Compiling
  1. Install build dependencies
    • sudo dnf install automake gcc-c++ qt5-qtbase-devel qt5-linguist hidapi-devel libusbx-devel mbedtls-devel
  2. git clone https://gitlab.com/CalcProgrammer1/OpenRGB
  3. cd OpenRGB
  4. qmake-qt5 OpenRGB.pro
  5. make -j$(nproc)
  6. You can then run the application from the compile directory with ./openrgb or install with make install
  7. You will also need to install the latest UDEV rules.

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 a secondary SMBus interface and requires a Linux kernel > 5.7 commit

  • Allowing access to SMBus:

    1. Install the i2c-tools package.
    2. Load the i2c-dev module: sudo modprobe i2c-dev
    3. Create the i2c group if it does not already exist: sudo groupadd --system i2c
    4. Add yourself to the i2c group: sudo usermod $USER -aG i2c
    5. If you want you can load the i2c-dev module at boot: sudo touch /etc/modules-load.d/i2c.conf && sudo sh -c 'echo "i2c-dev" >> /etc/modules-load.d/i2c.conf'
    6. Load the i2c driver for your chipset:
    Intel
    • sudo modprobe i2c-i801
    • sudo modprobe i2c-nct6775 - Secondary controller for motherboard LEDs (requires kernel patch)
    AMD
    • sudo 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.
    • If RGB RAM or certain motherboard on-board LEDs are not loading the profile on startup, you need to add the loading entries to: /etc/modules-load.d/
      • i2c-dev
      • i2c-i801 or i2c-piix4 (according to your chipset)

  • 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. If you have not installed OpenRGB from a package (e.g. deb, RPM or from the AUR) then most likely you need to install the UDEV rules.
  • The i2c-nct6775 kernel module requires patching, please refer to instructions here

  • Some Gigabyte/Aorus motherboards have an ACPI conflict with the SMBus controller. Please add a kernel parameter to resolve this conflict.

USB Access

  • USB devices require udev rules to access as a normal user.
  • Alternatively you can run OpenRGB as root to detect all USB devices. (Not recommended)
  • USB based Gigabyte AORUS motherboards may also have an ACPI conflict. Please add a kernel parameter to resolve this conflict.

Installing UDEV rules manually

  • If you have installed OpenRGB from a package then latest UDEV rules are installed locally at /usr/lib/udev/rules.d/60-openrgb.rules
  • Flatpak and Appimage "packages" will need to install this file manually.
  • Udev rules are built from the source at compile time. When building locally they are installed with the make install step to /usr/lib/udev/rules.d/60-openrgb.rules
  • If you need to install the UDEV rules file manually you can also download the latest compiled udev rules from Gitlab.
    • Copy this 60-openrgb.rules file to /usr/lib/udev/rules.d/
    • Then reload rules with sudo udevadm control --reload-rules && sudo udevadm trigger

Kernel Parameters

  • To resolve an ACPI conflict add the acpi_enforce_resources=lax kernel parameter.

  • If you want to check if the kernel was loaded with this option you can execute this command from the terminal once you've rebooted.

    • cat /proc/cmdline
    Arch
    • Please see the Arch wiki for details on how to update your bootloader.
    Debian / Ubuntu
    Fedora
    • On Fedora, install grubby and then following command: grubby --update-kernel=ALL --args="acpi_enforce_resources=lax"
    • For more information please refer to the Fedora docs for grubby.

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 mbedtls@2
      • 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

  • For Intel devices using a controller in the I801 family you have to download and install the macUSPCIO driver

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.
  • Want to create a new OpenRGB SDK client implementation? Check out the OpenRGB SDK Documentation page for documentation of how the OpenRGB SDK network protocol functions.
  • Please read the Contributing Guidelines before starting work on your new changes.

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.