Hardware overview

The HAL and transport map; how Hypercolor talks to USB, SMBus, and network devices, and links to each setup flow.

Hypercolor device view showing connected hardware

Hypercolor talks to RGB hardware through two parallel systems: a Hardware Abstraction Layer (HAL) for local devices connected over USB or SMBus/I2C, and a set of network driver crates for LAN and cloud-connected devices. Both converge on the same render pipeline, so your effects see one unified canvas and the drivers handle the rest.

This section covers how the transport stack is organized, what device families are supported, and how to get each one working. The compatibility matrix is the authoritative device list; start there if you want to confirm whether your hardware is supported.


πŸ”—Device categories

πŸ”—USB and SMBus devices

The hypercolor-hal crate implements protocol encoding for every device that plugs into your machine or sits on the system bus. It exports a Protocol trait (pure encoding, no I/O) and a Transport trait (async byte-level I/O) as separate layers, so the wire format for a Razer keyboard never reaches into network code, and the SMBus probe for an ASUS motherboard never touches USB.

Transport types live in the TransportType enum in hal/src/registry.rs and are the authoritative taxonomy:

TransportUsed by
UsbHidApiLive input devices (keyboards, mice) β€” keeps the OS HID stack attached without claiming the interface
UsbHidRawLinux /dev/hidraw* nodes β€” direct feature/output reports without claiming the interface
UsbControlHID feature reports over USB control transfers
UsbHidHID interrupt endpoint transport
UsbBulkBulk-transfer transport with HID feature-report sideband (init/keepalive)
UsbMidiComposite: MIDI control + USB bulk display (Ableton Push 2 pad display)
UsbSerialCDC-ACM serial (Dygma Defy β€” currently blocked)
I2cSmBusLinux /dev/i2c-* β€” ASUS Aura motherboard, GPU, and DRAM lighting
UsbVendorVendor-specific control transfers (Lian Li AL v1.0)

Getting USB devices working on Linux requires udev rules. Getting SMBus/I2C devices working requires the i2c-dev kernel module and correct permissions on /dev/i2c-*. These are separate permission paths with separate failure modes. See USB devices and SMBus/I2C for each.

πŸ”—Network devices

Network drivers live in separate crates behind the hypercolor-driver-api trait boundary. The hypercolor-network crate provides only the registry and orchestration shell; protocol logic belongs to each driver crate. Current network backends:

DriverProtocolDiscoveryNotes
HueHue Entertainment API over DTLSmDNS _hue._tcp.local., then N-UPnP fallbackRequires link-button pairing; DTLS streams on port 2100
NanoleafHTTP pairing + UDP External ControlmDNS _nanoleafapi._tcp.local.Hold power button 5-7 s to enter pairing mode
WLEDDDP (default) or E1.31/sACNmDNS _wled._tcp.local.No authentication needed
GoveeLAN UDP + optional cloud APIUDP multicast 239.255.255.250:4001LAN control must be enabled in the Govee Home app first

See network devices for the setup overview, then follow the per-vendor guide for pairing details.

πŸ”—LCD and display devices

Some hardware carries a small LCD or display panel that Hypercolor can drive alongside its RGB zones. The Corsair AIO LCD modules β€” Elite Capellix LCD (PIDs 0x0C39, 0x0C33) and iCUE LINK LCD (PID 0x0C4E) β€” stream 480Γ—480 JPEG frames over USB HID/HIDAPI reports at up to 30 fps. The Ableton Push 2 uses a composite MIDI + bulk transport for its pad-grid lighting and display. These are treated as ordinary device zones in Hypercolor; effect output is composited from the same canvas as everything else.

πŸ”—OpenRGB bridge

For hardware that Hypercolor does not yet support natively, the OpenRGB fallback bridge connects to a user-managed OpenRGB SDK server (default port 6742) and routes frames through it. This lets you bring nearly any device into the render pipeline while native support is in progress. See OpenRGB fallback for configuration and caveats around device ownership.


πŸ”—Transport architecture

The render pipeline delivers zone colors to the HAL; the HAL turns them into wire-format packets and ships them to the device:

graph TD
    C[SparkleFlinger canvas] --> S[SpatialEngine]
    S -->|per-zone colors| BM[BackendManager]
    BM --> HAL[hypercolor-hal]
    BM --> NET[Network drivers]
    HAL --> USB[USB transports]
    HAL --> SMB[SMBus transport]
    NET --> HUE[Hue DTLS :2100]
    NET --> NL[Nanoleaf UDP :60222]
    NET --> WLED[WLED DDP :4048]
    NET --> GV[Govee LAN UDP :4003]
    NET --> ORG[OpenRGB SDK :6742]
    USB --> Razer[Razer peripherals]
    USB --> Corsair[Corsair devices]
    USB --> ASUS_USB[ASUS USB HID]
    USB --> LianLi[Lian Li hubs]
    USB --> Other[QMK Β· PrismRGB Β· Nollie Β· Push 2]
    SMB --> ASUS_SMB[ASUS motherboard / GPU / DRAM]

Device fingerprints are stable across reconnects: USB devices key on VID/PID plus descriptor heuristics; network devices key on MAC address (WLED: net:<mac>, Govee: net:govee:<mac>) or bridge serial (Hue, Nanoleaf). A DHCP IP change does not lose pairing.


πŸ”—Supported hardware

The full device list lives in the compatibility matrix, which is generated from data/drivers/vendors/*.toml (32 vendor files). The summary below shows the driver families and their current status.

FamilyTransportHighlightsStatus
RazerUSB HIDKeyboards, mice, mousepads, laptops, headsetsSupported
CorsairUSB HIDPeripherals (Bragi + legacy HID), Lighting Node, iCUE LINK hub, LCD modulesSupported
ASUSUSB HID + SMBus/I2CAura USB peripherals; motherboard/GPU/DRAM Aura over SMBusSupported
Lian LiUSB HID / USB VendorUni Hub (ENE), TL Fan Hub β€” AL v1.0 uses vendor transport, v1.7+ uses HIDSupported
PrismRGBUSB HIDCustom chunked protocol; Prism 8 is a Nollie 8 v2 rebrandSupported
NollieUSB HIDARGB controllers; distinct from PrismRGB despite overlapping SKUsSupported
QMKUSB HIDRaw HID on any QMK keyboardSupported
Ableton Push 2USB MIDI + USB BulkPad/button RGB via MIDI; display via bulk JPEG streamSupported
Philips HueNetwork / DTLSEntertainment API, gamut mapping, DTLS PSK streamingSupported
NanoleafNetwork / UDPmDNS discovery, token pairing, UDP External ControlSupported
WLEDNetwork / UDPDDP and E1.31/sACN; RGB and RGBW; no authenticationSupported
GoveeNetwork / UDP + CloudLAN UDP control; optional cloud API fallbackSupported
OpenRGB bridgeNetwork / TCPFallback for any hardware OpenRGB supportsSupported
Dygma DefyUSB SerialDriver ready; lighting gated by firmware β€” not yet enabledBlocked

If another RGB manager (OpenRGB, Aura Sync, openrazer daemon, iCUE via Wine) has a USB device open, Hypercolor cannot claim it. The device will appear in lsusb but not in hypercolor devices list. Close or disable the conflicting tool first. See conflicting software.


πŸ”—Device discovery

Hypercolor discovers devices automatically at startup and whenever a rescan is triggered.

USB/SMBus: scans for known VID/PID combinations and probes /dev/i2c-* bus nodes at startup. Hotplug events trigger rescan automatically when the daemon is running.

Network: runs mDNS browsing for each network driver’s service type. Devices can also be added by IP address in the config (known_ips per driver section) for networks where mDNS is blocked across VLANs.

Trigger a manual scan:

# CLI β€” filter by target type
hypercolor devices discover
hypercolor devices discover --target wled --target hue

# REST β€” one scan at a time; concurrent requests return 409
curl -X POST http://localhost:9420/api/v1/devices/discover \
  -H 'Content-Type: application/json' \
  -d '{"targets": ["wled", "hue"], "timeout_ms": 5000}'

If a device does not appear after discovery, see devices not found for a transport-specific diagnosis checklist.


πŸ”—Setup guides

Each transport path has its own setup page because the failure modes are different:

  • USB devices β€” udev rules, hidraw vs hidapi, replug, hotplug
  • SMBus/I2C β€” ASUS Aura motherboard, GPU, DRAM lighting; i2c-dev module; /dev/i2c-* permissions
  • Network devices β€” mDNS discovery, known-IP config, pairing overview
  • Philips Hue β€” link-button pairing, DTLS streaming
  • Nanoleaf β€” power-button pairing, panel layout
  • WLED β€” DDP vs E1.31, RGB vs RGBW
  • Govee β€” LAN control setup, Razer-streaming SKUs, cloud API key
  • OpenRGB fallback β€” bridge config, ownership modes
  • Device quirks β€” rebrands, firmware splits, known edge cases
  • Conflicting software β€” openrazer, OpenRGB, Aura Sync, iCUE

πŸ”—Adding a driver

Driver modules in hypercolor-hal are organized by silicon/OEM family, not by retail branding. Rebranded SKUs are model-enum variants within an existing driver, not new modules. New USB drivers implement the Protocol trait (pure encoding) and register a DeviceDescriptor with the appropriate TransportType; new network drivers implement the hypercolor-driver-api traits and register with the DriverModuleRegistry.

See adding a driver and adding a network driver for the full implementation checklist and wire-format conventions.

In this section

Compatibility Matrix

Every vendor and device tracked in Hypercolor's driver database, with shipping status.

USB devices

Connect USB/HID/serial/MIDI devices on Linux: install udev rules, understand hidraw vs hidapi, fix access errors, and handle hotplug.

SMBus / IΒ²C

ASUS Aura lighting over SMBus on Linux: /dev/i2c-* access, the i2c-dev kernel module, the DRAM remap hub at 0x77, and the permission story.

Network devices

How Hypercolor discovers and pairs Wi-Fi and LAN RGB devices: mDNS, known-IP, and manual discovery, plus per-vendor links.

Philips Hue

Connect a Hue Bridge to Hypercolor: N-UPnP and mDNS discovery, link-button pairing, and low-latency DTLS streaming via the Entertainment API.

Nanoleaf

Set up Nanoleaf panels with Hypercolor: mDNS discovery, power-button token pairing, and UDP External Control streaming.

WLED

Connect WLED controllers via mDNS or static IP. DDP streams pixel data on port 4048; E1.31/sACN is available for DMX workflows. No authentication required.

Govee

LAN UDP discovery and control for Govee LED strips, panels, and bulbs. Enable LAN control per-device in the Govee Home app; cloud API key is optional.

OpenRGB fallback

The OpenRGB SDK bridge: a user-run server on :6742, ownership modes, detector partition, and when to reach for it.

Device quirks & rebrands

Known rebrands, firmware-split behavior, and devices that appear in the compatibility list but are not yet fully routed.

Conflicting software

Another RGB tool holding the HID device means Hypercolor gets nothing. How to detect, diagnose, and resolve the conflict.