Skip to main content

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)

Source distribution for cm-pixel 0.1.0
File Size Uploaded
cm_pixel-0.1.0.tar.gz 17.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for cm-pixel 0.1.0
File Interpreter ABI Platform
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}

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page