Writing Custom Effects
This method of setting colors was made to be similar (on the front end) to other LED control libraries like FastLED or adafruit’s Neopixel library. It was also optimized better for speed, making it more suitable to creating custom effects that require a fast refresh rate.
Basics
OpenRGB devices with a “direct” mode are the best to use with effects, because
in that mode they don’t save colors to flash storage or have any flickering
problems at higher refresh rates. You can control only these devices by using
the OpenRGBClient.ee_devices
property instead of the
OpenRGBClient.devices
list.
from openrgb import OpenRGBClient
cli = OpenRGBClient()
print(cli.devices)
print(cli.ee_devices)
FastLED-like Control Flow
This control method follows a pattern of setting color values, and then calling a function to apply the changed values to the physical LEDs. Here is an example for setting a device to a rainbow color.
from openrgb import OpenRGBClient
from openrgb.utils import RGBColor, ZoneType
cli = OpenRGBClient()
# finding a linear zone
zone = next(z for dev in cli.ee_devices for z in dev.zones if z.type == ZoneType.LINEAR)
# dividing the color spectrum by number of LEDs in the zone
step = int(360/len(zone.colors))
# Setting the zones colors to the entire spectrum of the rainbow
for i, hue in enumerate(range(0, 360, step)):
zone.colors[i] = RGBColor.fromHSV(hue, 100, 100)
zone.show()