dotmatrix-unlocked
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.1only. 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
Gameingame.pyand add it toGAMES. - Add a dashboard module: write a draw function and add it to
MODULESinrender.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)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| dotmatrix_unlocked-0.1.2.tar.gz | 124.4 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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.