WallpaperMachine
당신이 사랑하는 배경화면, 맥에서 새롭게 만나보세요
iDotMatrix: iDotMatrix 32×32 LED 패널을 데스크톱 동반자로 활용
Turn your iDotMatrix 32×32 LED panel into a live desktop companion: 100 apps, multiplayer games, live data, a studio for browser and phone, and an MCP server so AI agents can drive it. Free, open sour
라이프스타일Python · HTMLGitHub @shivpatel2468온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
댓글을 불러오는 중입니다.
로그인 상태를 확인하는 중입니다.
DeskDot: turn your iDotMatrix into a live desktop companion. The all-in-one app for your iDotMatrix: 90 apps, 25 games (21 multiplayer), a fruit-fly brain that plays, live data, a studio for browser & phone, and an MCP server for AI agents. Unofficial.
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Turn your iDotMatrix into a live desktop companion — the all-in-one app for your iDotMatrix.
90+ apps, 22 multiplayer games, live data from 45+ free sources, a studio for your browser and phone,
and an MCP server so AI agents like Claude can see the panel and drive it.
1,024 pixels. Zero subscriptions.README 전문 보기 ↗110+ apps, 22 multiplayer games, live data from 70+ free sources, a studio for your browser and phone, and an MCP server so AI agents like Claude can see the panel and drive it.
1,024 pixels. Zero subscriptions.
Download · Quick Start · First Five Minutes · The Studio · Games · Talk to It · Live Data · Spec Sheet · Under the Hood · What's Next · What's New
[!NOTE] DeskDot is an independent, community-built project. It is not affiliated with, endorsed by or supported by the makers of iDotMatrix. "iDotMatrix" is used only to say which panels it works with; all trademarks belong to their owners. DeskDot talks to your own panel over Bluetooth, and nothing is sent to the manufacturer.
⌚ Watch: my Wear OS launcher, workout app and watch faces wear DeskDot's table themes. See them on my GitHub profile and on idotmatrix.com/showcase.
The iDotMatrix is a lovely little 32×32 RGB pixel frame. Out of the box, its phone app lets you push a picture or a GIF and walk away. DeskDot turns the same panel into something that's alive:
It's built for the panel's real physics. Every rule about Bluetooth pacing, flow control, GIF budgets and colour calibration was measured on the hardware (HARDWARE_PROTOCOL.md). It's also built so that anyone, including an AI agent, can make a new app in one Python file.
Half the fun is that it looks like a toy. The other half is that it's a real-time engine with 4,400 tests.
| What you get | Count | Details |
|---|---|---|
| Apps | 116 | time, live data, media, pets, games, creative, focus & agents, ambient |
| Games | 25 | every one with an AI that plays itself; most with 2–4 player modes, maps and themes |
| Live data sources | 70+ | Open-Meteo, USGS, adsb.lol, Launch Library 2, ESPN, Binance, Yahoo Finance and more |
| Phone controller layouts | 7 | d-pad, analog stick, swipe, tap zones, keyboard, gamepad, tilt |
| MCP tools | 21 | panel_snapshot, show_app, draw_pixel_art, notify, agent_state, playlist… |
| Automated tests | 4,400+ | protocol bytes, every app × every option, games, studio API, Android bridge |
| Category | Apps | |
|---|---|---|
| 🕐 | Time | Clock (analog, digital, hero), Countdown, Day & Night world map, Five O'Clock Somewhere, Holidays, Progress, Sun & Moon |
| 📡 | Live data | Weather, What to Wear, Air Quality, Rain Radar, Earthquakes, Flight Radar, Tides & Surf, Planets Tonight, Space, Crypto Ticker, Stocks, Currency, Live Scores, Headlines, GitHub Graph, System Monitor, Home Assistant |
| 🎵 | Media | Now Playing (19 layouts: album art, karaoke and word-pop lyrics, vinyl, CD, cassette, VU meters, radio dial, mosaic…), Visualizer, Photo Frame, Gallery, Media Server, Screen & Camera Mirror |
| 🐾 | Pets & characters | Pet World (rooms, park, football), Pet, Pokédex, Pixel Avatar |
| 🎮 | Games | Pong, Breakout, Flappy, Dino, Racer, Snake, Tetris, 2048, Invaders, Maze Chase, Asteroids, Infinity, X and 0, Four Up, Mines, Starship, Light Cycles, Dig World, Neon Heat, Street Surge, Leaf Leap, Penguin Escape, Chess Puzzle, Trivia |
| 🎨 | Creative | Fly Brain 🪰, Synthwave Horizon, 3D Wireframe, Flocking Boids, Falling Sand, Neuromorphic Cortex, Raycaster, Emotes, Pixabots, Text, Font Lab, Canvas, Player Card, Composer |
| 🎯 | Focus & agents | Agent (Claude mascot), Focus Timer, Focus Pet, Eye Break, On Air, Calendar, Habits, Anki, Active App, CI radiator, OBS, Uptime, 3D Printer |
| 🌌 | Ambient | Ambient (rain, snow, plasma, fireworks…), Loops |
All media in this README is rendered by DeskDot itself from the simulated panel, drawn with an LED-panel look.
The easy way: install DeskDot like any other app. No Python, no terminal.
| Your device | Download (latest release) |
|---|---|
| Windows 10 / 11 (64-bit) | DeskDot-Setup-…-x64.exe |
| Mac with Apple silicon (M1 and newer) | DeskDot-…-macOS-arm64.dmg |
| Mac with an Intel chip | DeskDot-…-macOS-x64.dmg |
| Android phone (8.0+, runs the panel all day) | DeskDot-….apk |
All files are on the latest release page, with
checksums.txt so you can check a download. Close the iDotMatrix phone app first: the panel talks to one app at a time.
After that, DeskDot updates itself. When there's a new version a small "Update available" sign appears at the top. Click it to open the Updates window, read what's new, and press Install & restart. It downloads the new version, checks that it's genuine and installs it. Your settings stay. (You can turn the automatic check off there.)
The installer isn't signed with a paid certificate yet, so Windows doesn't know it.
DeskDot-Setup-…-x64.exe.Your settings live in %LOCALAPPDATA%\DeskDot (they stay when you update or uninstall). Uninstall from
Settings → Apps.
The app isn't notarized by Apple yet, so the first start needs one extra step.
.dmg and drag DeskDot into Applications.You only do this once. Your settings live in ~/Library/Application Support/DeskDot.
DeskDot-….apk.Updating from inside the app asks once more, this time to let DeskDot install apps. Had a test build of DeskDot before 3.8? Uninstall it once first: the new app is signed with a different key.
Want the latest code, or to change DeskDot itself? Run it from source with the Quick Start below.
You need: an iDotMatrix 32×32 panel, a computer with Bluetooth LE, uv (it installs Python 3.13 for you) and Node.js 20+ (only to build the studio once). Close the iDotMatrix phone app first: the panel accepts one Bluetooth connection at a time.
git clone https://github.com/shivpatel2468/idotmatrix.git deskdot
cd deskdot
uv sync --extra mcp # engine + MCP server
(cd web && npm ci && npm run build) # the studio, built once
uv run deskdot scan # find your panel (IDM-xxxxxx)
uv run deskdot doctor # draws a test pattern on it
uv run deskdot serve # → open http://127.0.0.1:8765
No panel yet? uv run deskdot serve --sim runs everything against a simulated panel.
A Pi Zero 2 W / 3 / 4 / 5 has built-in Bluetooth LE and runs DeskDot at 1–3 W, 24/7.
# on your computer: build the studio, then copy the folder over
(cd web && npm ci && npm run build)
scp -r . [email protected]:~/deskdot
# on the Pi
cd ~/deskdot && bash scripts/install-pi.sh # installs uv + a systemd service
Then open http://raspberrypi.local:8765 from any device on your Wi-Fi. More hosts and trade-offs:
docs/DEPLOY.md.
The DeskDot Android app runs the whole Python engine on the phone (via Chaquopy) as a foreground service. It keeps the panel connected with the screen off, restarts itself after a reboot, and shows the studio full screen.
It runs edge to edge under see-through system bars, opens with a short LED intro, and has a glass tab bar you can drag between Panel, Apps, Presets and Settings.
[!NOTE] Still a beta. Install it from the latest release (
DeskDot-….apk); build steps are in android/README.md.
Copy deskdot.example.toml to deskdot.toml; it's git-ignored, so it never leaves your
machine. Every key can also be set as an environment variable (DESKDOT_<KEY>). The two you'll care about:
address = "AA:BB:CC:DD:EE:FF" # your panel's MAC from `deskdot scan` (empty = first IDM-* found)
lan_studio = false # true = open the full studio to other devices on your Wi-Fi
Light or dark. The studio, phone pages, casino and TV come in a premium light theme (paper, porcelain and gold leaf) and the original dark one — Settings → Display & colour → Studio theme, or the round key bottom-left on phones. The panel connection lives behind the status pill at the top (Connection sheet: reconnect, move it to this tab, release it).
The studio on a phone (bottom tabs) · the game controller friends get after scanning the QR code.
Every game plays itself when nobody is touching it, so they make great screensavers. When you press a key, you're in.
| Controller | Where | Best for |
|---|---|---|
| ⌨️ Keyboard | studio | everything (arrows / WASD + Space / Shift) |
| 🎮 Gamepad | studio | racers, platformers (standard browser mapping) |
| 🕹️ Analog stick | phone | Pong, Asteroids, Neon Heat |
| ✛ D-pad | phone | Tetris, X and 0, Four Up, Mines |
| 👆 Swipe | phone | Snake, Light Cycles, 2048 |
| 👇 Tap zones | phone | Flappy, Dino, Street Surge |
| 📐 Tilt | phone (HTTPS only) | racing |
DeskDot ships an MCP server, a thin client over the engine's HTTP API, so Claude Code, Claude Desktop or any MCP client can see the panel and drive it:
{ "mcpServers": { "deskdot": { "command": "uv", "args": ["run", "--project", "/path/to/deskdot", "deskdot-mcp"] } } }
| Tool | What the agent can do |
|---|---|
panel_snapshot | look at what's on the LEDs right now (as an image) |
list_apps · show_app · update_app_settings · app_action | run any app, change any setting |
show_text · draw_pixel_art · set_pixels · show_image · compose | put anything on the panel |
notify · set_indicator · push_custom_app | alerts, status LEDs, AWTRIX-style custom apps |
agent_state | drive the Claude mascot (thinking, working, waiting for you, done) |
playlist · set_playlist · presets · autopilot · set_display · panel_status | run the show |
The Claude Code hook makes the mascot react to your coding session in real time. Details: docs/MCP.md. New apps are one file each: docs/APP_SDK.md.
A search bar for the whole desk: uv run deskdot launcher puts a Spotlight-style command bar on
Ctrl+Alt+Space (apps with live previews, presets, games, brightness, "let the fly play"); on a Mac there's the
native DeskDot Bar menu-bar app, and a Raycast extension for both. See docs/LAUNCHERS.md.
Location-aware apps follow one shared location: your setting, or a city lookup, or IP geolocation. (🟢 no key · 🟡 optional key or local service · 🔴 paid)
| Layer | What you get | Source | Auth |
|---|---|---|---|
| 🌦️ Weather · Wear · Air | conditions, forecast, AQI, UV, pollen, what to wear | Open-Meteo | 🟢 |
| 🌧️ Rain Radar | animated precipitation over your area | RainViewer + Open-Meteo Elevation | 🟢 |
| ✈️ Flight Radar | aircraft overhead on a radar scope | adsb.lol, adsb.fi, OpenSky | 🟢 |
| 🌋 Earthquakes | world map + "near me" alerts | USGS | 🟢 |
| 🚀 Space | next launch countdown, ISS, people in space | Launch Library 2, wheretheiss.at | 🟢 |
| 🌅 Sun & Moon · Planets | sunrise, golden hour, moon phase, planets tonight | computed locally + sunrise-sunset.org | 🟢 |
| 🌊 Tides & Surf | tide curve, swell | Open-Meteo Marine | 🟢 |
| 📈 Crypto · Stocks · Currency | tickers, sparklines, converter | Binance, Yahoo Finance / Nasdaq, Frankfurter | 🟢 |
| 🏏 Live Scores | football, cricket, NBA, F1… | ESPN public scoreboards | 🟢 |
| 📰 Headlines · Daily · Trivia | HN, dev.to, quotes, jokes, facts, quizzes | Hacker News, ZenQuotes, Open Trivia DB… | 🟢 |
| 🎵 Now Playing · Lyrics | album art, karaoke lyrics | your OS media session, LRCLIB | 🟢 |
| 🖼️ Photo Frame · Pokédex | museum art, animals, Pokémon sprites | The Met, Cleveland Museum, PokéAPI… | 🟢 |
| 🌌 Aurora · Asteroids · Earth Events | Kp index + aurora map, close approaches, fires/storms/volcanoes | NOAA SWPC, NASA/JPL, NASA EONET | 🟢 |
| 🌂 Rain Chance · Wind Compass | next-12-hour rain odds, wind direction and gusts | Open-Meteo | 🟢 |
| ₿ Bitcoin Network · Crypto Market |
The full list, with the APIs we tried and rejected (and why): DATA_SOURCES.md.
| You are… | DeskDot becomes… |
|---|---|
| 🧑💻 A developer | a CI radiator, a GitHub graph, a Claude mascot that tells you when your agent needs you, a Pomodoro |
| 🎧 Working from home | an "On Air" light for calls, a calendar countdown, eye-break reminders, a focus pet |
| 🎮 Hosting friends | a 4-player arcade on the coffee table, with phones as controllers |
| 🏡 A smart-home tinkerer | a Home Assistant status screen, ntfy alerts from anywhere, AWTRIX-compatible custom apps |
| 🎨 A pixel artist | a canvas, a font lab, a GIF/photo frame with real colour calibration |
| 🌍 A data nerd | a wall of live flights, quakes, launches, markets and weather |
| 🤖 Building with AI | a physical display your agent can draw on, notify through and check with a snapshot |
| Host | Status | Notes |
|---|---|---|
| Windows 10/11 | ✅ Verified on hardware | Bluetooth LE via WinRT; sleep/wake hand-off |
| Raspberry Pi OS / Debian / Ubuntu | 🟡 Supported, installer untested on a real Pi | BlueZ; scripts/install-pi.sh sets up a systemd service |
| macOS | 🟡 Should work, untested | CoreBluetooth hides MAC addresses, so DeskDot finds the panel by its IDM- name |
| Android 8+ (64-bit) | 🧪 Beta — runs on a real phone (Android 14, 120 Hz) | the Android app runs the whole engine on the phone |
| iPhone / iPad | ❌ as a host | iOS suspends background apps; use it as a studio or controller instead |
| Any browser | ✅ Studio & controller | Chrome, Edge, Firefox, Safari; gamepads in desktop browsers |
What works where — every app, provider and setting per OS, plus studio and phone-controller browsers: docs/COMPATIBILITY.md. The studio greys out what this host can't do.
| Panel | Status |
|---|---|
iDotMatrix 32×32 RGB (advertises IDM-xxxxxx) | ✅ Verified |
| Other iDotMatrix sizes (16×16, 64×64) | ❓ Untested; the protocol is shared, but every app is designed for 32×32 |
What DeskDot measured on a real unit (Windows 11, 2026-09-24 → 2026-10-01). Vendor specs vary by seller; these are the numbers that matter to software.
| Property | Value |
|---|---|
| Display | 32 × 32 RGB LEDs (1,024 pixels), origin top-left |
| Brightness | 5–100 %, plus screen on/off, flip 180°, night (eco) mode |
| Connection | Bluetooth LE; advertises as IDM-xxxxxx; one central at a time |
| GATT | write 0000fa02-…, notify 0000fa03-… (acks used for flow control) |
| Packet size | up to 514 B per write (MTU 517); messages split into 4 KiB chunks |
| Live frames | PNG in DIY mode: ~9 fps for simple frames (1 packet), ~5–6 fps for full scenes |
| Native animation | GIFs stored on the panel and looped by its own firmware: smooth at ≤ 10 fps, 240+ frames, ≤ 40 KB |
| GIF upload | ~16 KB/s; one ack per 4 KiB chunk |
| Built-in modes | clock (8 styles), countdown, chronograph, scoreboard, effects, solid colour |
| Quirks DeskDot handles | pairing screen on disconnect · DIY-mode blink · panel freezes if GIFs arrive too often · unpaced bursts silently dropped · photos need gamma + white-balance calibration |
Byte-level reference: docs/HARDWARE_PROTOCOL.md.
flowchart LR
subgraph Clients
S[Studio<br/>React + Vite] -- WebSocket --> E
P[Phone controllers<br/>/p/CODE] -- WebSocket --> E
M[MCP server<br/>Claude & agents] -- HTTP --> E
H[Hooks · ntfy · Home Assistant] -- HTTP --> E
end
E[Engine<br/>FastAPI · asyncio] --> R[Runtime<br/>playlist · overlays · hand-off]
R --> A[Apps<br/>render < 2 ms · baked clips]
A --> PR[Providers<br/>45+ live sources]
R --> D[Device layer<br/>latest-frame-wins · paced · acks]
D -- Bluetooth LE --> X[(iDotMatrix<br/>32×32)]
src/deskdot/
├── engine/ # runtime, scheduler, playlist, presets, hand-off, app base classes
├── device/ # the only code that touches Bluetooth: protocol bytes, BLE, Android bridge, simulator
├── apps/ # 116 apps — one file each (games in games_*.py on a shared GameApp framework)
├── providers/ # live data: weather, flights, quakes, markets, sports, media, system…
├── gfx/ # Frame primitives, bitmap fonts, colour calibration, GIF encoder, world map, sprites
├── server.py # HTTP + WebSocket API (docs/API.md)
├── multiplayer.py # lobby, QR rooms, LAN gate, phone controller
└── mcp_server.py # MCP tools over the HTTP API
web/ # the studio (React 19 + TypeScript + Tailwind v4)
android/ # the Android host app (Kotlin + Chaquopy)
tests/ # 4,400+ tests — every app × every option renders without data
The rules that keep it smooth (enforced by tests and CLAUDE.md):
render() is pure and under 2 ms.Decisions and why: docs/adr/.
Nothing here costs money, and you need no key to start. Every built-in data source is free and keyless. Keys or local services only come in when you connect your own things:
| Provider | Why | Get it |
|---|---|---|
| GitHub token (optional) | higher rate limit for GitHub Graph / CI | github.com/settings/tokens (read-only) |
| Home Assistant | show entities, control DeskDot from automations | a long-lived token from your HA profile |
| OBS · AnkiConnect · OctoPrint/Moonraker · Jellyfin/Plex | on-air light, reviews, print progress, now watching | your local service |
| Gemini (optional) | "Draw with AI" in the studio | aistudio.google.com |
Secrets are typed into the studio. They're stored only in data/state.json on your machine (git-ignored), masked
(••••••) in every API response and snapshot, and never logged.
lan_studio = true to open the full studio.The headline goal: wire DeskDot to the first complete map of an adult fruit-fly brain.
In October 2024 the FlyWire consortium, a Princeton-led team whose AI reconstruction and 3D viewer were built with Google Research, published the whole-brain connectome of Drosophila melanogaster in Nature: 139,255 neurons and about 54.5 million synapses, every connection traced.
The plan is a simplified spiking simulation of that wiring:
You could play against a fly, watch it learn which inputs matter, or let it interact with any app.
What's already here:
The Fly Brain app: a fly hunts fruit and dodges a looming swatter.
A "Fruit-fly brain" pilot for every game.
The 3D Fly view in the studio: when a fly starts playing, the side panels slide shut and two live 3D scenes open beside the panel:
Quality presets (Auto adapts to your GPU), bloom, particles, themes, cameras, fly looks and keyboard styles are all in Graphics.
Both are driven by a real-time model of exactly this circuit: T4/T5 motion detectors, HS/VS cells, LPLC2 → giant fibre, and descending neurons. It sees nothing but the pixels. Its wiring is modelled on the circuit, not yet loaded from FlyWire's synapse counts. That's the next step, explained in docs/FLY_BRAIN.md.
Sources: FlyWire · Nature, 2 Oct 2024 · NIH Research Matters
More: docs/ROADMAP.md · docs/IDEAS.md.
| Need | Start here |
|---|---|
| Run it somewhere always-on | docs/DEPLOY.md |
| Write your own app | docs/APP_SDK.md · plugins/_example_countdown.py |
| Design for 32×32 | docs/DISPLAY_DESIGN.md |
| HTTP & WebSocket API | docs/API.md |
| Connect an AI agent | docs/MCP.md |
| Search & control it from anywhere (hotkey launcher, macOS menu bar, Raycast) | docs/LAUNCHERS.md |
| How the engine fits together | docs/ARCHITECTURE.md · docs/adr/ |
| The panel's Bluetooth protocol | docs/HARDWARE_PROTOCOL.md |
| The studio's design system | docs/STUDIO_UI.md |
| Contribute | CONTRIBUTING.md · |
Built by Shiv Patel · idotmatrix.com · MIT License
If DeskDot made your desk a little more alive, a ⭐ helps other panel owners find it.
1,024 pixels. Zero subscriptions.
| fees, blocks, halving; market cap, movers, fear & greed |
| mempool.space, CoinGecko, alternative.me |
| 🟢 |
| 🏁 Race Countdown · Long Weekend · TV Tonight | next Grand Prix, next long weekend, tonight's TV | Jolpica, Nager.Date, TVMaze | 🟢 |
| 🚲 Bike Share · World Flags · Wiki Trending · Game Server | docks near you, flag of the day, most-read articles, players online | CityBikes, flagcdn, Wikimedia, mcsrvstat.us | 🟢 |
| 🧑💻 GitHub · CI | contribution graph, build radiator | GitHub API | 🟡 token optional |
| 🏠 Home Assistant · OBS · Printer · Anki · Media Server | entities, on-air, print progress, reviews | your own services | 🟡 local |