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.