What are Components?
RGB controllers — fan hubs, ARGB headers, LED strip controllers — drive their outputs as a simple chain of LEDs in order. The controller doesn’t know or care what’s physically attached; it just sends colors down the wire one LED at a time.
The problem is that different products arrange those LEDs very differently. A 16-LED fan puts them in a circle. A 30-LED strip puts them in a line. A dual-ring fan might have an inner ring of 8 and an outer ring of 16. If you want those LEDs to sit in the right position on the SignalRGB canvas — so that lighting effects line up correctly across your whole system — you need to know the shape, not just the count.
Components solve this. A component is a JSON description of a specific RGB product: how many LEDs it has, where each one sits in 2D space, and what each one is called. SignalRGB uses that description to correctly map canvas colors to the right position in the LED chain, regardless of which controller is driving it.
The Component Library
Section titled “The Component Library”SignalRGB ships with a large built-in library of components covering fans, strips, pump heads, and other RGB accessories from a wide range of vendors. The library is also open for community contribution — if a product isn’t covered yet, you can create a component JSON file for it and submit it.
See Component Structure for the JSON format.
How Components Are Used
Section titled “How Components Are Used”The user assigns components to channels on their controller device through a picker UI in SignalRGB. For example, a user with three Corsair LL120 fans connected to a Corsair Lighting Node Pro might configure:
- Channel 1 → Corsair LL120 · Corsair LL120 · Corsair LL120
SignalRGB stacks the components in order along the channel’s LED chain and positions each one on the canvas according to its LED coordinates. The user can arrange them however they like — three fans in a row, in an L-shape, wherever they physically sit in their case.
The plugin doesn’t need to know which products are attached. It just calls device.channel("Channel 1").getColors() and gets back the correctly mapped color data for whatever the user configured. The abstraction holds regardless of whether there’s a 16-LED fan or a 30-LED strip on that channel.
Why This Matters for Plugin Authors
Section titled “Why This Matters for Plugin Authors”If you’re writing a plugin for a lighting controller (a device with one or more output channels that drive generic LED chains), you don’t need to build product-specific LED mappings into your plugin. You define the channels, and the component system handles the rest.
This means:
- Your plugin works with any product in the component library automatically
- Users can mix and match different products on the same controller
- New products can be supported just by adding a component JSON file — no plugin changes needed
See Using Components for the plugin-side API, and Component Structure for how to create a component file.