cm-pixel
Open-source driver + toolkit for the Cooler Master MasterLiquid Atmos II Pixel LED hexagonal pixel screen — a clean, lightweight alternative to the official MasterCTRL app for controlling the LEDs over USB. Screen only (pump/fans are PWM and untouched).
The USB protocol was reverse-engineered from scratch; see PROTOCOL.md.
Hardware
- Cooler Master "Atmos V2 - Pixel", USB
2516:021C, plain HID (no special driver). - 32×32 addressing grid, 556 real LEDs arranged in a hexagon, RGB888.
Install
This project uses uv. From a clone:
uv sync # creates .venv and installs everything (incl. uv.lock)
uv run cm-pixel list # run the CLI
Or add it to your own uv project:
uv add cm-pixel
(Plain pip also works: pip install cm-pixel.)
Close the official MasterCTRL software first — only one program can drive the screen. On Linux you may need a udev rule for HID write access.
CLI
cm-pixel color 255 0 0 # solid red
cm-pixel image photo.png # show an image (auto-fit to the hexagon)
cm-pixel gif spinner.gif # play a GIF
cm-pixel text "HI" # static centered text
cm-pixel scroll "HELLO WORLD" # scrolling marquee
cm-pixel anim plasma # procedural animation
cm-pixel anim fire --speed 1.5
cm-pixel list # list animations
Common flags: --fps, --duration, --mask (blank pixels outside the hexagon), --keep,
--brightness 0-100, --rotate 0|90|180|270. Brightness and rotation are applied in software
(the device has no command for them); 180° is exact, 90/270 clip slightly at the hexagon vertices.
Animations: plasma rainbow swirl ripple breathe sparkle fire starfield.
Library
from cmpixel import PixelDisplay, Canvas
from cmpixel.font import draw_text
with PixelDisplay() as d:
c = Canvas().fill((0, 0, 20))
c.set_pixel(16, 16, (255, 255, 255))
draw_text(c, "GO", color=(0, 255, 0))
d.send_canvas(c)
# play a built-in animation
from cmpixel import PixelDisplay
from cmpixel.animations import plasma
from cmpixel.media import play
with PixelDisplay() as d:
play(d, plasma(speed=1.0), fps=30, duration=10)
How it works (short version)
A frame is 28 HID output reports of 64 bytes: 80 DD <pkt:u16> + 60 data, concatenated to
556×RGB in serpentine LED order. Streaming a frame displays it immediately — no handshake.
Full details and the LED layout map are in PROTOCOL.md and cmpixel/layout.json.
Status
v0.1 — drawing, text, GIF, procedural animations, software brightness & rotation.
Disclaimer
Unofficial, not affiliated with Cooler Master. Use at your own risk; touches only the screen framebuffer (no firmware/DFU).
Metadata
Release files for cm-pixel 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| cm_pixel-0.1.0.tar.gz | 17.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| cm_pixel-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 36.1 kB
Release files / cm_pixel-0.1.0.tar.gz
| Download URL | cm_pixel-0.1.0.tar.gz |
|---|---|
| Size | 17.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c43b97edcbecbf01bfa5bfe447e41a385ebb3e0d6d102b4ad2b0b11883f1480e
|
|
BLAKE2b-256 checksum How to use checksums |
211e52d3b3ea468649b8353e700d0e988d40541666ea2d7081f6dbbafe7038ae
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.11.24 {"installer":{"name":"uv","version":"0.11.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / cm_pixel-0.1.0-py3-none-any.whl
| Download URL | cm_pixel-0.1.0-py3-none-any.whl |
|---|---|
| Size | 18.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9fb738bf5421a494747a8d752b88962ac0d67600e13c6f8f25de1f25aba07714
|
|
BLAKE2b-256 checksum How to use checksums |
48b8f3593d4b18ff5d1e45b9189b3c4164b9c6dc041e09302a713d9ac881ffa7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.11.24 {"installer":{"name":"uv","version":"0.11.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|