An SDK client for the RGB Software OpenRGB
It is based on the already written, but apparently abandoned, node.js OpenRGB library by zebp and the Python implementation by jath03.
It is still under heavy development, poorly written, and inconvenient to use, but since I'll probably forget this project in the next 5 seconds, I wanted to make this accessible for later generations of confused people.
$ npm install openrgb-sdk
Installation: Gitlab OpenRGB Setup and Usage
After successful installation click on the SDK-Client tab and click on Start Server
, which should then set the Server Status to online
. If you want it to start the SDK client on startup follow this guide. Next, for Windows, right click on the icon and paste --server
behind target
, and for Linux paste --server
behind command
. This also applies if you are launching it through your console.
most of the functions in openrgb-sdk rely on the javascript async/await functionality so you are going to have to put all of your code in a function similar to:
async function start () {
}
start()
const { Client } = require("openrgb-sdk")
async function start () {
const client = new Client("Example", 6742, "localhost")
await client.connect()
/*
- your code -
*/
await client.disconnect()
}
start()
You can familliarise yourself with this syntax here.
You have two functions to get device data:
First, get the amount of devices connected to OpenRGB:
const amount = await client.getControllerCount()
Then, you can get the data of a specific device:
const device_0 = await client.getControllerData(0)
This function needs the ID of the device. The ID is just an ascending number, starting at 0, of the devices you have. They are given to the device just like they are listed in OpenRGB. This means, that if getControllerCount()
gives back 2, you know that there are 3 devices: device 0, 1 and 2. With that knowledge you can just use a for
loop to get all your devices.
let deviceList = []
for (let deviceId = 0; deviceId < controllerCount; deviceId++) {
deviceList.push(await client.getControllerData(deviceId))
}
There are two ways to change the leds of your devices:
Every device has native modes you can set it to. They are saved on a chip inside of the device, and if you set a device to a mode, it will stay in this mode until it is changed by you or another RGB program in the background. This is more convenient, but almost impossible to synchronise across other devices. With the array you created before, you can now see the modes a device has and set a device to one of it's modes. This function takes the device id first, and then either accepts the name (as String/Text) or the id (as Number).
console.log(deviceList[0].modes)
await client.updateMode(0, deviceList[0].modes[5].id)
await client.updateMode(1, deviceList[1].modes[3].name)
You can also change the LEDs of the device by yourself. These will also be set until changed, but you might want animated modes. They need the process to be running, and if its stopped the LEDs will be frozen in their color until they are changed. This is easier to sync, which is the why you'll probably use this more often. Also, you probably want to set the device before to the direct
mode (which should be always mode 0), although they should be set to this at start.
The function first needs the device ID, and then an array of colors in RGB scheme. One item in the array resembles one LED, so to set all LEDs you have to create an array with the amount of LEDs the device has. If you only want one single color for the whole device you can just fill the array with the .fill()
method.
const colors = Array(deviceList[2].colors.length).fill({
red: 0xFF,
green: 0xA5,
blue: 0x00
})
console.log(`Setting the color of ${deviceList[2].name}`)
await client.updateLeds(2, colors)
You can also set the LEDs for only one zone, or for a single LED, with simliar funtions.
An example for a custom mode using with updateLeds is found in rainbow.js
in the examples
folder.
There are few ways to make RGB objects:
This is the regular way to of doing this, every value has to be set manually. All following ways output this kind of object:
let violet = {
red: 138,
green: 43,
blue: 226
}
This is quite long, and there are ways to compact it and/or use a different colour representation.
To simply compact it,
const { utils } = require("openrgb-sdk")
let violet = utils.color(138, 43, 226)
To use a hex-string like CSS uses,
const { utils } = require("openrgb-sdk")
let violet = utils.hexColor("#8a2be2")
to use the HSL-representation:
const { utils } = require("openrgb-sdk")
let violet = utils.HSLColor(271.1, 0.759, 0.527)
or to use the HSV-representation:
const { utils } = require("openrgb-sdk")
let violet = utils.HSVColor(271.1, 0.81, 0.886)
if any of the values are invalid or negative, they will default to 0. Values that are too high will be defaulted to their highest possible value.
A full documentation is available under docs.m4rch.xyz.
For examples, take a look at the examples
folder in the downloaded package in your node_modules
folder.