Skip to content

hyperb1iss/hypercolor

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2,366 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Hypercolor dashboard running the Neon City effect

Hypercolor

Linux-first open-source RGB lighting engine
✦ Your world is a canvas: paint every pixel. ✦

Rust Servo Leptos SDK wgpu

License

VisionHow It WorksFeaturesThe UIThe TUIGet StartedEffect SDKArchitectureStatusSecurityContributing


🔮 The Vision

RGB lighting is a mess. Single-vendor tools that don't talk to each other, half-working daemons, and effects that look like they were designed in 2012. The one great effects engine is proprietary, Windows-only, and behind a subscription.

Hypercolor is the fix.

One daemon. Every RGB device you own. Motherboards, keyboards, mice, LED strips, smart lights, case fans, all driven by the same engine at 60fps. Effects aren't hardcoded routines. They're web pages, rendered by an embedded Servo browser and sampled onto your physical LED layout every frame.

Your world is a canvas. Paint every pixel.

⚡ How It Works

graph LR
    subgraph Input
        A[Audio FFT]
        B[Screen Capture]
        C[Keyboard / MIDI]
    end

    subgraph Engine
        D[Effect Renderer<br><i>Servo · wgpu · Canvas</i>]
        E[Canvas<br><i>640 × 480 default</i>]
        SF[SparkleFlinger<br><i>compositor</i>]
        F[Spatial Sampler]
    end

    subgraph Hardware
        G[Razer · Corsair · ASUS<br><i>USB / HID / I2C</i>]
        H[WLED · Hue · Nanoleaf<br><i>UDP / REST / mDNS</i>]
        I[QMK · Push 2<br><i>USB HID · USB MIDI</i>]
    end

    A & B & C --> D
    D --> E --> SF --> F
    F --> G & H & I
Loading

Effects render to a virtual RGBA canvas, 640×480 by default and tunable in the daemon's rendering settings. SparkleFlinger, the render-thread compositor, latches the newest surface from each producer at the frame boundary and blends them into one canonical frame every tick. The spatial engine samples that frame at each LED's physical position. Effects use normalized [0.0, 1.0] coordinates, so they stay resolution-independent across canvas sizes. Audio, screen capture, and keyboard input feed the render every frame. One effect paints the whole room. Your keyboard, your LED strip, your case fans, all drawing from the same source.

🌈 Features

🔌 Supported Hardware

Hypercolor tracks 414 devices across 32 vendors in data/drivers/vendors/. 179 ship with a working driver today across 12 driver families. 233 more are researched or known, awaiting implementation or hardware to test.

Vendor Supported In progress Researched Blocked Drivers
Ableton 1 push2
Alienware 3
Aqua Computer 4
ASRock 4
ASUS 10 10 asus
Cooler Master 20
Corsair 49 34 corsair
Dygma 2 dygma
EVGA 7
Fnatic 3
Gigabyte 8
Glorious 1 4 qmk
Govee 4 govee
HyperX 16
HYTE 2
Lian Li 9 2 lianli
Logitech 9
Mountain 4
MSI 11
Nanoleaf 1 nanoleaf
Nollie 19 nollie
NZXT 17
Philips 1 hue
PrismRGB 3 nollie, prismrgb
QMK 10 qmk
Razer 70 38 razer
Roccat 14
Sony 3
SteelSeries 6
Thermaltake 10
WLED 1 wled
Wooting 4

New drivers land often. Full matrix: docs/content/hardware/compatibility.md. If you own hardware Hypercolor doesn't support yet, see CONTRIBUTING.md.

🖥️ Dual Render Path

  • Servo: an embedded browser rendering HTML Canvas, WebGL, and GLSL shaders headless at 60fps. Existing community effects work unmodified.
  • wgpu: native GPU shaders compiled to Vulkan, OpenGL, or Metal for maximum performance.

🎨 44 Built-In Effects

Hypercolor ships 44 built-in effects spanning ambient, audio-reactive, shader, and generative styles. Ambient backgrounds, shader-heavy showpieces, and beat-synced visualizers. Every one is open source and built to be forked.

Borealis Neon City Hyperspace Cymatics
Synth Horizon Fractalux Iris Arc Storm
Voidweaver Lava Lamp Ink Tide Wormhole
Nebula Drift Frequency Cascade Spectral Fire Cyber Descent
Bubble Garden Nyan Dash Deep Current Breakthrough

🗺️ Spatial Layout Engine

Map your physical desk in the UI. Drag devices onto a 2D canvas, define LED topologies (strips, matrices, rings), and the spatial sampler resolves pixels to LEDs. Pick nearest, bilinear, area average, or Gaussian sampling at every position.

🎧 Audio-Reactive Pipeline

FFT with beat detection, mel-band analysis, chromagram, and spectral features. Effects react to bass hits, BPM, spectral centroid, or the full 200-bin spectrum. Lock-free buffering keeps the render loop from ever blocking on audio.

🌊 And More

  • Scene engine with priority stacking, Oklab cross-fades, and automation rules
  • REST API + WebSocket for full programmatic control
  • MCP server for AI assistant integration (Claude Code, Cursor, and friends)
  • CLI tool (hypercolor) with table/JSON output and shell completions
  • Hot-reload on effect changes, no restart required
  • Screen capture input for ambient backlighting
  • Linux session integration (logind, screensaver) via D-Bus

💎 The UI

A web UI served directly by the daemon. Browse effects, tweak controls live, manage devices, and design spatial layouts from any browser.

Effects Browser
Effects browser with live preview
Effect Controls
Control panel with canvas preview
Layout Editor
Drag-and-drop spatial layout editor
Devices
Device management
  • Effects browser: search, filter by category, favorites, audio-reactive tags
  • Live canvas preview: the active effect streams in the sidebar and control panel
  • Auto-generated controls: sliders, dropdowns, color pickers, and toggles derived from effect metadata
  • Spatial layout editor: drag-and-drop device placement on a 2D canvas
  • Ambient reactivity: the UI tints its edges to match the active effect
  • Command palette (⌘K) for keyboard-driven navigation

🖥️ The TUI

A terminal UI with true-color LED preview, audio visualization, and fullscreen effect rendering. Runs wherever you have a terminal.

TUI Dashboard
Dashboard with live preview and device table
TUI Effects Browser
Effects browser with control sliders
Bubble Garden fullscreen
Bubble Garden fullscreen
Cymatics fullscreen
Cymatics fullscreen
  • Live effect preview rendered in true-color half-block characters
  • Fullscreen mode (F11) fills the entire terminal with the active effect
  • Audio spectrum with level meter and beat indicators
  • Quick actions: number keys for instant effect switching

🎯 Get Started

Hypercolor is Linux-first. macOS release builds and Windows source builds exist, but Linux is the supported launch path for hardware permissions, services, and full runtime verification.

Install on Linux

git clone https://github.com/hyperb1iss/hypercolor.git
cd hypercolor
cargo install just
just setup
just install

Setup installs the Rust toolchain, system packages, Bun, Trunk, cargo-deny, and frontend dependencies. The installer then builds the daemon, CLI, TUI, web UI, and bundled effects, installs a systemd user service, sets up udev rules for USB device access, and persists i2c-dev so SMBus RGB devices survive reboot.

Install on macOS and Windows

git clone https://github.com/hyperb1iss/hypercolor.git
cd hypercolor
cargo build --release

Linux is the only platform currently gated in CI. macOS arm64 builds through the release pipeline. Windows compiles from source but isn't in CI yet, so treat it as experimental. Service management and permission setup are manual outside Linux.

Run

# Start the daemon (serves UI at http://localhost:9420)
hypercolor-daemon

# Control from the command line
hypercolor effects list
hypercolor effects activate "Neon City"
hypercolor devices

# Or drop into the interactive terminal dashboard (auto-starts a local daemon)
hypercolor tui

Development

Hacking on Hypercolor itself? We use just for development workflows.

just daemon          # Run daemon locally
just tui             # Run the TUI
just ui-dev          # Leptos UI dev server on :9430
just sdk-dev         # SDK dev server with HMR
just verify          # fmt + lint + test

just verify covers the Rust workspace. Use the focused gates for surfaces outside that workspace: just ui-test && just ui-build for the Leptos UI, just sdk-lint && just sdk-check && just sdk-build for the TypeScript SDK, just python-verify for the Python client, just compat-check for device data, and just docs-build for documentation.

✦ The Effect SDK

Effects are TypeScript, Canvas, or pure GLSL. The SDK compiles them to self-contained HTML files that the engine renders at 60fps. Audio data, control values, and canvas context are all injected automatically.

import { effect } from "@hypercolor/sdk";
import shader from "./fragment.glsl";

export default effect(
  "Borealis",
  shader,
  {
    speed: [1, 10, 5], // → slider
    intensity: [0, 100, 82], // → slider
    palette: ["Northern Lights", "SilkCircuit", "Cyberpunk"], // → dropdown
  },
  {
    description: "Aurora borealis, layered curtains of light",
  },
);

Four tiers, pick the one that fits: GLSL (single file, zero JS), effect() (one-liner shader binding), canvas() (Canvas 2D draw functions), and full OOP (class-based with lifecycle hooks).

See the Effect SDK Guide for the full API reference.

🏗️ Architecture

graph TD
    subgraph types [hypercolor-types]
        T[Shared vocabulary<br><i>zero deps</i>]
    end

    subgraph hal [hypercolor-hal]
        H[USB/HID Drivers<br><i>Razer · Corsair · ASUS · Nollie · QMK · ...</i>]
    end

    subgraph platform [Platform Interop]
        LGI[linux-gpu-interop<br><i>GL→wgpu texture import</i>]
        WPI[windows-pawnio<br><i>SMBus via PawnIO</i>]
    end

    subgraph core [hypercolor-core]
        C[Engine<br><i>render loop · spatial · audio · effects</i>]
    end

    subgraph drivers [Network Drivers]
        API[driver-api]
        DB[driver-builtin<br><i>compile-time bundle</i>]
        API --> HUE[Hue]
        API --> NL[Nanoleaf]
        API --> WL[WLED]
        API --> GV[Govee]
        HUE & NL & WL & GV --> DB
    end

    subgraph daemon [hypercolor-daemon]
        D[REST API · WebSocket · MCP<br><i>Axum on :9420</i>]
    end

    subgraph cloud [Cloud]
        CAPI[cloud-api<br><i>contract types</i>]
        CC[cloud-client<br><i>OAuth · sync</i>]
        DL[daemon-link<br><i>mux WebSocket tunnel</i>]
        CAPI --> CC
        CAPI --> DL
    end

    subgraph clients [Clients]
        CLI[CLI<br><i>hypercolor</i>]
        TUI[TUI<br><i>Ratatui</i>]
        UI[Web UI<br><i>Leptos WASM</i>]
        DT[Desktop<br><i>Tauri</i>]
        TR[Tray<br><i>System applet</i>]
        APP[app<br><i>unified shell</i>]
    end

    T --> H & C & LGI & WPI
    H --> C
    LGI & WPI --> C
    C --> API
    H --> DB
    C & H & DB --> D
    D --> CC & DL
    D --> CLI & TUI & UI
    APP --> DT & TR & D
Loading

It's Rust all the way down. The daemon, CLI, TUI, tray applet, and HAL drivers are all Rust. The web UI is Rust compiled to WASM via Leptos. Even the embedded browser is Servo (Rust). The only non-Rust code is the TypeScript effect SDK and the GLSL shaders it compiles.

The render thread runs on a dedicated OS thread with adaptive FPS (10 to 60, auto-shifting across 5 tiers based on measured budget). Each tick, SparkleFlinger composes frame producers into one canonical surface, with a zero-copy bypass fast path when a single full-opacity layer is active. The event bus uses lock-free tokio::sync::watch channels for high-frequency frame data and broadcast for discrete events. zerocopy structs handle wire-format encoding at zero allocation cost per frame. The spatial engine caches LED positions and samples the composed frame with configurable interpolation (nearest, bilinear, area average, Gaussian).

Workspace lints forbid unsafe in application, driver, and domain crates. The explicit exceptions are audited platform interop crates: hypercolor-linux-gpu-interop for Linux GPU surface import and hypercolor-windows-pawnio for Windows service/process boundaries. Both deny undocumented unsafe blocks. Edition 2024. Rust 1.94+.

📡 Status

Hypercolor is in active development (v0.1.0). The core engine, effect SDK, web UI, TUI, and 11 shipping driver families all work today on Linux. macOS arm64 release artifacts and Windows source builds are experimental until their installer and runtime gates match Linux. Every screenshot in this README was captured from a live instance running on real hardware.

Known launch limitations:

  • Linux is the only fully supported install and runtime path for v0.1.0.
  • SDK packages are pre-release and use local checkout or file: dependencies until npm publish.
  • The Python client is source-only for launch and is not published to PyPI yet.
  • Windows hardware service setup remains experimental.

Coming soon: effect marketplace, Wasmtime plugin system for community backends, Wooting analog keyboards, and driver families for Cooler Master, NZXT, and Logitech. See the full compatibility matrix for researched hardware waiting on implementation.

Security And Conduct

Please report vulnerabilities through the process in SECURITY.md. Community participation follows the CODE_OF_CONDUCT.md.

💜 Contributing

Hypercolor grows on contributions. Drivers, effects, UI polish, docs, all of it lands here.

Writing effects is the fastest way in. The SDK compiles TypeScript, Canvas, or GLSL straight to HTML, and the engine picks them up on save. Device drivers are where the leverage is highest. If you own hardware that isn't on the supported list, you're the person to add it.

See CONTRIBUTING.md for guidelines.

📄 License

Apache-2.0. See LICENSE.


Star on GitHub    Ko-fi

If Hypercolor lights up your desk, give us a ⭐ or support the project

✦ Built with obsession by Hyperbliss

Sponsor this project

  •  

Packages

 
 
 

Contributors