Skip to content

vladulus/polylux

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

126 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Polylux

Open-source replacement for ASUS Armoury Crate.
Drives ROG hardware without 700 MB of bloat.

Latest Release GitHub Stars MIT License Windows 10/11 Support on Revolut

DownloadChangelogArchitecture docsSupport

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

Screenshots

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.)

Status

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 controltools/PolyluxSensorDaemon/ (C# / .NET 8 Windows service) wraps LibreHardwareMonitorLib.IControl, exposes HTTP POST /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)

Install

One-liner (PowerShell, downloads + runs the latest installer):

irm https://raw.githubusercontent.com/vladulus/polylux/main/scripts/install.ps1 | iex

Or 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:

  1. Uninstalls any prior Polylux cleanly (so every install produces a pristine %PROGRAMFILES%\Polylux\ tree).
  2. (Optional task, default on) Disables the Armoury Crate service stack (ArmouryCrateService, AsusCertService, AsusFanControlService, LightingService, etc.). Fully reversible — re-enable from services.msc.
  3. Installs PolyluxSensorDaemon as a Windows service running as LocalSystem, auto-starting at boot. Zero further UAC prompts.
  4. (Optional task, default on) Registers Polylux to auto-start in your tray at logon via HKCU\…\Run.
  5. Adds a Start Menu + Desktop shortcut.
  6. 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>.exe

Architecture

Two 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 renderer
  • polylux/drivers/livedash_oled/ — OLED hardware monitor scenes
  • polylux/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 client
  • polylux/service/ — main entry point, signal handling, runner threads, ASUS-stack neutralisation
  • polylux/ui/ — PyQt6 frontend (tabbed window + system tray)
  • tools/PolyluxSensorDaemon/ — the .NET 8 sensor daemon source
  • installer/ — 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.

Status of the broader ASUS ecosystem

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.

Support

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.

License

MIT. See LICENSE.

About

Open-source replacement for ASUS Armoury Crate. Drives ROG hardware (AniMe Matrix, LiveDash OLED, Ryujin LCD, Aura RGB, fan PWM) without 700MB of bloat. Claude's project.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors