Skip to main content

dotmatrix-unlocked

ci

Turn a cheap iDotMatrix-compatible 32×32 Bluetooth LED panel into a desk companion, run from your computer with a local web UI.

  • Dashboard: 16 modules (big, analog or binary clock, weather, 8-hour forecast, sunrise/sunset, moon phase, week, month, day progress, now playing, live Claude Code activity…). Start from 12 ready-made screens, or rearrange, restyle and save your own.
  • Skins: album art, a spinning vinyl, any GIF (16 built-in animations, GIPHY, or your own: GIFs are re-tuned for LEDs with sharper shrinking, contrast stretch and no dither noise), a Winamp-style visualizer, and a mischievous pixel cat that reacts to what you're doing and does tricks on request.
  • Live: Snake, Tetris, Breakout, 2048 and Flappy; YouTube or local video; a countdown timer; quick messages.
  • Everything previews in the browser first and only goes to the panel when you press Apply.

Not affiliated with iDotMatrix. Tested on a 32×32 IDM-* panel; other sizes aren't supported yet.

Install

Needs Python 3.12+ and Bluetooth.

uv tool install dotmatrix-unlocked     # or: pipx install dotmatrix-unlocked
dotmatrix                              # opens http://127.0.0.1:7766; offers to keep running in the background

Don't have uv? See docs.astral.sh/uv, or use pipx.

In the web UI, click Find my panel. Turn the panel on first and close its phone app: the panel accepts only one Bluetooth connection.

No panel? dotmatrix run --fake runs everything with the browser preview standing in for the display.

Then, optionally:

dotmatrix service install   # run in the background: start at login, restart if it crashes (also in Settings)
dotmatrix hooks install     # show Claude Code activity (edits ~/.claude/settings.json, keeps a .bak)
dotmatrix doctor            # checks everything and prints the fix for anything missing

To stop the background copy: turn off Run in the background in Settings, or dotmatrix service uninstall.

Platforms

macOS Linux (incl. Raspberry Pi) Windows
Panel over Bluetooth ✓ ✓ (BlueZ) ✓
Start at login launchd systemd user service Task Scheduler
Now playing media-control playerctl (any MPRIS player) built in (no album art yet)
Idle detection (the cat naps) ✓ X11 with xprintidle ✓
Video ffmpeg + yt-dlp same same

Windows support is new and less tested. Reports are welcome.

macOS: the first connection asks for Bluetooth permission for Python. If it was denied, enable it in System Settings › Privacy & Security › Bluetooth. Raspberry Pi / headless Linux: after dotmatrix service install, run loginctl enable-linger $USER so the service starts without anyone logging in.

Privacy

  • The web UI and API listen on 127.0.0.1 only. Requests must come from that host and be JSON, so other websites can't drive your panel.
  • The microphone (visualizer, clap-to-startle the cat) is off by default. It runs inside your browser, and only 16 loudness levels are sent to the local service; no audio leaves the browser.
  • Network calls: Open-Meteo for weather (only once you set a city), GIPHY if you add a key, and video links you paste.

Command line

dotmatrix                     start + open the web UI
dotmatrix run [--fake]        foreground
dotmatrix scene "HELLO" --ttl 10 --color 255,200,0
dotmatrix status
dotmatrix scan | hello | test | image PATH | brightness PCT   # direct to the panel, service stopped

The local HTTP API (POST /scene, /event, /game, /timer, /cat…) is what the web UI uses. Anything on your machine can push to the panel with a curl.

Development

git clone https://github.com/anishsrinivasan/dotmatrix-unlocked && cd dotmatrix-unlocked
uv sync --group dev
uv run pytest            # runs every module's self-check + the app end to end in --fake mode
uv run dotmatrix run --fake
  • Add a game: subclass Game in game.py and add it to GAMES.
  • Add a dashboard module: write a draw function and add it to MODULES in render.py.
  • Add a visualizer style (skins.py) or a cat trick (cat.py): same idea.

The web UI picks all of these up automatically.

License

GPL-3.0-or-later. It builds on python3-idotmatrix-library, which is also GPL-3.0.

Metadata

Release files for dotmatrix-unlocked 0.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dotmatrix-unlocked 0.1.2
File Size Uploaded Provenance
dotmatrix_unlocked-0.1.2.tar.gz 124.4 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for dotmatrix-unlocked 0.1.2
File Interpreter ABI Platform
dotmatrix_unlocked-0.1.2-py3-none-any.whl Python 3 none any Details

Total release size: 212.9 kB

Release files / dotmatrix_unlocked-0.1.2.tar.gz

Download URL dotmatrix_unlocked-0.1.2.tar.gz
Size 124.4 kB
Tags Source
SHA-256 checksum
How to use checksums
a93b2011370cadac5d3e3bb1f8c7955dcd1b54fa0a4e503b021bf676eaf7e015
BLAKE2b-256 checksum
How to use checksums
3cdc2e707f51a4718e8ecb88b11fda7a93f973473f846ca63a09ddf97757d5e0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.1 {"installer":{"name":"uv","version":"0.13.1","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 / dotmatrix_unlocked-0.1.2-py3-none-any.whl

Download URL dotmatrix_unlocked-0.1.2-py3-none-any.whl
Size 88.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4a9d6dac992f1f785cc6d898217dc4f5abd0c55f6006abe3671c0b91d154162a
BLAKE2b-256 checksum
How to use checksums
2d9bc735f22728b56c2593252c0aeb6c4a797fc70db6f31018c94dc154676f4c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.1 {"installer":{"name":"uv","version":"0.13.1","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}

Security for dotmatrix-unlocked 0.1.2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

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