Troubleshooting

Symptom-first guide: find your failure mode and jump straight to the fix.

Something is not working. Find your symptom in the table below and follow the link β€” each entry goes directly to the relevant fix, not a general overview.

Device discovery in the Hypercolor web UI

πŸ”—Find your symptom

SymptomWhere to look
Device is plugged in but does not appear in HypercolorDevices not found
Device shows up but will not connect or light upDevices not found β€” connection failures
Permission denied on USB deviceDevices not found β€” udev rules
Another RGB tool (OpenRGB, Aura Sync, openrazer) is holding the deviceDevices not found β€” conflicting software
Lian Li Uni Hub AL detected but not controlling correctlyDevices not found β€” firmware split
PrismRGB Prism 8 shows as β€œNollie 8 v2” in the device listDevices not found β€” known rebrands
Audio-reactive effects are static β€” no reaction to musicAudio not reacting
Microphone is selected instead of system speaker outputAudio not reacting β€” monitor source
Audio capture shows audio_available: false in statusAudio not reacting β€” capture pipeline
WLED / Hue / Nanoleaf / Govee device not discoveredNetwork discovery
Govee shows β€œno devices found” even on the same networkNetwork discovery β€” Govee LAN control
Philips Hue link-button pairing fails or times outNetwork discovery β€” Hue pairing
Network device vanishes after a DHCP lease renewalNetwork discovery β€” stable addressing
Effect applies but all LEDs show the same color (no gradient)Studio β€” spatial layout
Scene switcher or zone controls behave unexpectedlyStudio troubleshooting
Daemon port 9420 already in useCommon issues β€” port conflict
Daemon fails to start on first login (XDG_RUNTIME_DIR not set)Common issues β€” systemd linger
Effects apply but the web UI preview is darkCommon issues β€” WebSocket preview
Low FPS, stuttering, or render loop lagPerformance
Render loop running but no frames are sent to devicesPerformance β€” device output queues
Servo circuit breaker open β€” HTML effects frozenPerformance β€” Servo circuit breaker

πŸ”—Run a quick self-check first

Before digging into a specific page, run the built-in diagnostic command. It checks the render loop, device output queues, and config in about one second:

hypercolor diagnose

Or call the endpoint directly if the CLI is not in scope:

curl -s -X POST http://localhost:9420/api/v1/diagnose | jq '.data.summary'

The response includes a summary with passed, warnings, and failed counts and a checks array with per-subsystem detail. A warning on render_loop or output_queues tells you which page to read next.

Target specific check categories to narrow the output:

# Check only device output state
hypercolor diagnose --check devices

# Check render pipeline only
hypercolor diagnose --check render

# Full report to file β€” attach to bug reports
hypercolor diagnose --report ~/hypercolor-diag.json --system

πŸ”—Check the logs

When a diagnostic check fails and you need more context, structured logs are the fastest path to the root cause. The daemon uses tracing throughout; set RUST_LOG before starting it:

# Recommended starting point for most issues
RUST_LOG=debug just daemon

# USB device problems
RUST_LOG=hypercolor_hal=debug just daemon

# Render pipeline and FPS issues
RUST_LOG=hypercolor_core::engine=trace just daemon

# Audio input
RUST_LOG=hypercolor_core::input=debug just daemon

The daemon defaults to info level, which is quiet by design. debug gives you device connections, protocol steps, and effect changes without flooding the terminal. trace on a specific module is only needed when a subsystem is actively misbehaving.

πŸ”—Troubleshooting pages

Each page below is organized by symptom, not by subsystem. If your symptom does not appear in the table above, check the page closest to your failure category β€” the symptoms within each page are more specific than the summary table here.

πŸ”—Devices not found

USB devices that are visible in lsusb but do not appear in Hypercolor, permission failures, conflicting software holding the HID device, and firmware-split or rebrand quirks for Lian Li and PrismRGB hardware.

πŸ”—Audio not reacting

Audio-reactive effects that stay static: selecting the right PipeWire or PulseAudio monitor source, verifying the audio capture pipeline, and fixing the most common configuration mistakes.

πŸ”—Network discovery

WLED, Philips Hue, Nanoleaf, and Govee devices that do not appear in discovery. Covers mDNS requirements, per-protocol pairing flows (Govee LAN control toggle, Hue link-button timing, Nanoleaf power-button hold), VLAN and AP-isolation issues, and firewall rules.

πŸ”—Studio

Spatial layout problems (all LEDs showing the same color), zone configuration issues, scene activation not behaving as expected, and layer ordering surprises.

πŸ”—Common issues

Linux-specific first-run failures that are not hardware or audio related: daemon port conflicts, systemd user session constraints, XDG_RUNTIME_DIR not available on headless systems, and the WebSocket preview channel not connecting.

πŸ”—Performance

Low FPS, render loop budget misses, device output lag, GPU sampling fallbacks, and Servo circuit breaker trips. Includes how to read the performance snapshot from hypercolor diagnose and how to enable per-phase timing traces.

πŸ”—Still stuck?

If none of the above pages resolve your issue:

  1. Run hypercolor diagnose --report ~/hypercolor-diag.json --system to capture a full diagnostic snapshot.
  2. Check RUST_LOG=debug daemon output for the first ERROR or WARN line that appears when the problem occurs.
  3. Open an issue on GitHub and attach the report file.

For developer-level log analysis, internal bus tracing, and WebSocket stream inspection, see Debugging in the contributing section.