Open-source replacement for ASUS Armoury Crate.
Drives ROG hardware without 700 MB of bloat.
Download • Changelog • Architecture docs • Support
Claude's project. v0.5 ships an end-to-end installer + Windows service + tray app. Daily-driveable on a ROG Maximus Z690 Extreme. If it saves you 700 MB of RAM and your sanity, tip Vlad — he runs the test rig.
A lightweight, native Windows app that drives ROG hardware — AniMe Matrix, motherboard LiveDash OLED, Ryujin AIO LCD, Aura RGB, fan PWM — without 700 MB of telemetry, auto-updaters, and background services.
Before: Armoury Crate + AsusCertService + Aac3572MbHal + ArmouryCrateService
+ Aura Service + LiveUpdate + LightingService ≈ 700 MB RAM
After: Polylux.exe + PolyluxSensorDaemon.exe ≈ 230 MB RAM
Tabbed UI, live previews, fan PWM control with radial gauges.
(Screenshots coming with the next push — the live app is what ships
in v0.5.)
v0.5 — installer ships, daily-driveable.
What's running end-to-end on a ROG Maximus Z690 Extreme:
- AniMe Matrix — clock (3 bitmap fonts: Bold 7 / Slim 7 / Mini 5), scrolling text marquee (Arial Bold uppercase, font picker), static image / animated GIF (auto-scrolls when bigger than the panel), rotation 0/90/180/270, brightness, live preview that matches the physical panel.
- LiveDash OLED — hardware monitor (CPU/GPU temp/load, fan RPM, memory) with single or rotating metric modes, custom text mode with horizontal scroll for long values, factory-preset GIF mode.
- Aura RGB — every OpenRGB mode exposed as a scene (Static, Breathing, Spectrum Cycle, Rainbow, etc.), HSV colour picker, motherboard-only by default with explicit opt-in for keyboard / mouse / RAM.
- Ryujin LCD — firmware-driven hardware monitor.
- Fan PWM control —
tools/PolyluxSensorDaemon/(C# / .NET 8 Windows service) wrapsLibreHardwareMonitorLib.IControl, exposes HTTPPOST /control/fan/<id>so any client can set PWM 0-100% on any Super-IO fan header. Polylux UI presets: AUTO / OFF / SILENT (30%) / MEDIUM (60%) / FULL (100%) / CURVE (4 anchor points, linear interp against a temperature source). Auto- calibration on first run measures each fan's max RPM so the radial gauges scale correctly. - Dashboard — radial gauges (CPU + GPU temp), fan RPM cards, memory bar, per-device status row.
- Tray app with auto-launch on install, auto-start at logon, proper close-to-tray.
What's tested:
- ROG Maximus Z690 Extreme (motherboard with AniMe Matrix + LiveDash OLED + 7 PWM fan headers via Nuvoton NCT6798D)
- Aura RGB on the motherboard controller
- 73 Python unit tests green
What's not tested yet:
- Ryujin II 360 custom image upload (protocol decoded but unverified)
- Other ASUS motherboard models (only Z690 Extreme captures exist)
- OLED brightness control + per-preset GIF selection (USBPcap
research ongoing — see
docs/PROJECT_STATE.md§15.9)
One-liner (PowerShell, downloads + runs the latest installer):
irm https://raw.githubusercontent.com/vladulus/polylux/main/scripts/install.ps1 | iexOr manual: download
Polylux-Setup-<version>.exe
from Releases and run it. One UAC prompt for the whole install — never
again afterwards.
What the installer does:
- Uninstalls any prior Polylux cleanly (so every install produces
a pristine
%PROGRAMFILES%\Polylux\tree). - (Optional task, default on) Disables the Armoury Crate
service stack (
ArmouryCrateService,AsusCertService,AsusFanControlService,LightingService, etc.). Fully reversible — re-enable fromservices.msc. - Installs
PolyluxSensorDaemonas a Windows service running as LocalSystem, auto-starting at boot. Zero further UAC prompts. - (Optional task, default on) Registers Polylux to auto-start
in your tray at logon via
HKCU\…\Run. - Adds a Start Menu + Desktop shortcut.
- Launches Polylux immediately in the tray so you don't have to reboot to start using it.
Build from source (developers):
git clone https://github.com/vladulus/polylux.git
cd polylux
python -m venv .venv && .venv\Scripts\activate
pip install -r requirements.txt
python -m polylux.service # dev mode, no installer
# OR
.venv\Scripts\pyinstaller installer\polylux.spec --noconfirm
"C:\Program Files (x86)\Inno Setup 6\ISCC.exe" installer\Polylux.iss
# -> installer\Output\Polylux-Setup-<version>.exeTwo cooperating processes:
┌────────────────────────────────────────────────────┐
│ Polylux.exe (PyQt6 tray app, user-mode) │
│ ───────────── │
│ - matrix/oled/aura/ryujin/fans drivers │
│ - tabbed UI (Dashboard / per-device / Settings) │
│ - reads sensors via HTTP from the daemon │
│ - writes hardware via libusb / OpenRGB SDK │
└──────────────────────┬─────────────────────────────┘
│ HTTP localhost:8085
▼
┌────────────────────────────────────────────────────┐
│ PolyluxSensorDaemon.exe (Windows service) │
│ ────────────────────────── │
│ - wraps LibreHardwareMonitorLib │
│ - GET /data.json → sensors (LHM-compat tree) │
│ - POST /control/fan/<id> → IControl write │
│ - runs as LocalSystem (ring-0 access for │
│ SuperIO fan control without UAC at runtime) │
└────────────────────────────────────────────────────┘
Plugin-based core. Each device family is a separate driver module:
polylux/drivers/anime_matrix/— AniMe Matrix USB direct, bitmap clock fonts, image rendererpolylux/drivers/livedash_oled/— OLED hardware monitor scenespolylux/drivers/ryujin_lcd/— Ryujin II/III LCD (320×240)polylux/drivers/aura_rgb/— Aura RGB (delegates to OpenRGB SDK)polylux/sensors/— LHM-tree parser + fan-control HTTP clientpolylux/service/— main entry point, signal handling, runner threads, ASUS-stack neutralisationpolylux/ui/— PyQt6 frontend (tabbed window + system tray)tools/PolyluxSensorDaemon/— the .NET 8 sensor daemon sourceinstaller/— PyInstaller spec + Inno Setup script
Documentation:
docs/PROJECT_STATE.md— full architectural log, protocol decode notes, every shipped milestone (§1 → §19).docs/NEXT_SESSION.md— pickup file for the next dev session.
Polylux is a clean-room reverse engineering effort. Where ASUS ships a driver / SDK we use it (OpenRGB, LHM). Where they don't, the USB protocols were decoded from USBPcap captures of the AC stack.
The decoded protocols live in docs/PROJECT_STATE.md §6, §8, §9. Pull
requests to extend Polylux to other ROG motherboards are welcome —
typically all you need is a USBPcap capture of the manufacturer software
controlling the new hardware, plus a willingness to send single-frame
test commands to find the chip's command opcodes.
If Polylux saved you the headache of running AC:
- Revolut: revolut.me/vladrev76 (UK / EU, zero fees, instant). Vlad runs the Z690 Extreme test rig and burns the test cycles.
- Star the repo — it costs you nothing and helps people find the project.
- Report breakage with
polylux.crash.log(in%APPDATA%\Polylux\) and we'll get to it.
MIT. See LICENSE.