

A Windows app and firmware for Karl Malota's Nano_D++. A motor makes every click, and each kind of control has its own feel.
Get started › · What you need · Download
Built on Karl Malota's open Nano_D++ · Windows 10 and 11 · v2.0.0 · MIT
- A Nano_D++ knob (Karl's hardware files), a Windows 10 or 11 PC and a USB-C cable that carries data. Putting Desk Dial's firmware on the knob takes about half an hour, once, and you can always go back.
- Optional: Sonos, Apple Music and Home Assistant. Each one adds a chapter below; without any of them you still get the window picker, Onshape, the Navigator and the knob's own feel, sound and lights.
- Apple Music browsing needs your own Apple Developer membership (99 USD a year) and an Apple Music subscription. Everything else is free.
Not today: macOS, Linux, Spotify, lights without Home Assistant, Firefox for Onshape and the other web apps, more than one knob.
Music

Needs Sonos

Needs Sonos and Apple Music (Apple Developer membership, 99 USD a year)

Needs Sonos and Apple Music · Everything Music does ›
Lights

Needs Home Assistant · Everything Lights does ›
Windows

Works with nothing else set up · Everything the picker does ›
Onshape

Tested in Chrome · turn it on in Settings › Apps · Everything Onshape does ›
More apps

Figma and Plasticity not yet tested · Blender and AutoCAD scroll only · each Off until you choose Manual or Auto in Settings › Apps · Every app, and how to add one ›
The Navigator

Feel and sound

The ring

Every moment, and the screen's motion ›
Settings

Every setting › · A day with Desk Dial, in eighteen seconds ›
The knob
Nano_D++ by Karl Malota: a round 240 × 240 screen, a ring of 60 LEDs, four backlit buttons, a brushless motor that makes the clicks and the walls, and a small speaker.
Thank you, Karl. Desk Dial exists because Karl Malota (katbinaris) designed the Nano_D++ and open-sourced its firmware and hardware. Desk Dial's knob firmware builds directly on his: the motor control, haptics, display and LED foundations are his and his contributors' work. With his permission, it also adapts ideas and code from his newer feat/firmware-esp-idf-quadra branch: the Onshape app UI on the knob (the cube, the command cards and wheel, parameter mode, the plasma and the pixel font), the click and thump sound synthesis, and the haptic-effect ideas. Desk Dial is a separate hobby project and is not an official Nano_D product.
- Tested on one knob, mine, including a 9-hour session connected to Desk Dial. A few paths are not yet tested on real hardware, and the known limits name each one.
- The app isn't signed, so Windows SmartScreen will warn you the first time (choose More info, then Run anyway). Smart App Control on Windows 11 can block it outright; see the FAQ.
- There is no installer. Desk Dial is a folder you unzip, and nothing starts with Windows unless you set that up.
The knob in half an hour. Each service adds a few minutes on top.
- Flash the knob. Follow the flashing guide; it backs up Karl's firmware first. You should see the knob restart.
- Run the app. Unzip the latest release anywhere and open
DeskDial.exe; at the SmartScreen warning choose More info, then Run anyway. You should see the Settings window, and Desk Dial's icon in the tray. - Plug in the knob. You should see the tray icon read "Desk Dial · Knob connected" and the knob show Home, with four words along the bottom: Music · Win · Lights · Play (Play reads Pause while music plays).
- Connect what you use in Settings: Sonos · Apple Music · Home Assistant · Onshape. You should see the matching knob screen stop saying "Not connected" or "Sonos unavailable".
- Turn it. The speaker volume moves and you feel each click. Press 1 for Music; hold 1 to come back Home (in Onshape and the other apps, hold all four buttons for a second). You should see the screen name the four buttons on every screen, so there is nothing to memorise.
Keep the one-page cheat sheet (PDF) under the knob for the first week.
- Nothing leaves your PC except to the services you set up. No telemetry, no update check.
- Your keys and tokens are encrypted for your Windows account and never written to logs.
- Nothing is stored on the knob. Album covers live in memory only.
What is read, written and kept, file by file: privacy.
- Update: quit from the tray and unzip the new release over the old folder. Your settings stay.
- Firmware: the flashing guide, same steps as the first time.
- Uninstall: delete the folder and
%LOCALAPPDATA%\DeskDial. Nothing was installed. - Go back to Karl's firmware: the flashing guide restores your backup; if the knob won't start, see recovery.
The tray says "Knob not found". Try another USB-C cable (some carry power only) and another port.
The tray says "Stock firmware · display/control extension required". The knob still runs Karl's firmware: flash Desk Dial's.
The knob says "Sonos unavailable". Check the speaker's address in Settings › Music, and that the PC and the speaker are on the same network.
Everything else: FAQ · troubleshooting · open an issue · Karl's Discord.
flowchart LR
subgraph KNOB["Nano_D++ knob (ESP32-S3 firmware)"]
LCD["Round 240 × 240 screen<br/>LVGL"]
LEDS["60-light ring + button lights"]
HAP["Haptic motor<br/>one feel per screen, sounds"]
end
subgraph PC["Desk Dial (Windows app)"]
CTRL["Controller<br/>screens, buttons, holds"]
OVL["Overlays<br/>Music explorer, Up next,<br/>window picker, Navigator"]
end
KNOB <-- "USB serial<br/>JSON lines, covers, icons ⇄<br/>turns, presses, holds" --> CTRL
CTRL --- OVL
CTRL -- "local network" --> SONOS["Sonos speakers"]
CTRL -- "Apple Music API" --> AM["Apple Music library"]
CTRL -- "WebSocket + REST" --> HA["Home Assistant"]
CTRL -- "mouse, keys" --> ONS["Onshape in Chrome or Edge"]
OVL -- "window previews, snapping" --> WIN["Windows desktop"]
The app does the thinking and the knob does the drawing: they talk over USB in a line-based JSON protocol, documented in firmware/CONTROL_CENTER.md. Build the firmware and the app yourself, or add an app with a profile (app/profiles/README.md); issues and pull requests are welcome, and for a big change please open an issue first, because the knob has only four buttons to share.
Home Assistant lights and scenes, the Navigator, Onshape mode with Karl's knob UI, app profiles for Figma, Plasticity, Blender and AutoCAD, walls at every end, a silent motor at rest, screen motion and knob sounds. The knob firmware and the app now share one version number. Everything else is in the CHANGELOG.
- Karl Malota (katbinaris) designed the Nano_D++ and wrote its firmware and hardware. With his permission Desk Dial adapts, from his
feat/firmware-esp-idf-quadrabranch, the Onshape app UI on the knob (cube, cards, wheel, parameter screen, plasma, Silkscreen pixel font, icons), the click and thump sound synthesis, and the haptic effect player with its table of feels. His firmware credits @runger (Richard Unger). - App icons: pixel art by Karl Malota (katbinaris), from his Nano_D app profiles.
- Typefaces: Archivo, Montserrat and Silkscreen, under the SIL Open Font License.
- Designed with Claude Design and built with Claude Code.
- Apple, Apple Music and MusicKit are trademarks of Apple Inc.; Sonos is a trademark of Sonos, Inc.; Windows is a trademark of Microsoft; Home Assistant is a trademark of the Open Home Foundation; Onshape is a trademark of PTC. Figma, Plasticity, Blender and AutoCAD are trademarks of their respective owners. Desk Dial is not affiliated with any of them.
Libraries
- Firmware: LVGL 9.0.0, TFT_eSPI 2.5.43, FastLED 3.6.0, Simple FOC 2.3.3, SimpleFOCDrivers 1.0.7, ArduinoJson 7.0.2, Adafruit TinyUSB 3.1.0, AceButton 1.10.1, MIDI Library 5.0.2, SparkFun STUSB4500 1.1.5.
- App: pySerial 3.5, SoCo 0.31.2, PyJWT 2.14.0, Pillow 12.3.0, Requests 2.34.2, websocket-client 1.8.0, pystray 0.19.5, PyInstaller 6.22.3.
Every image on this page is rendered from Desk Dial's own code and tools, with invented albums, rooms and windows; the torque curve is a model of the motor.
MIT. The knob firmware in firmware/ builds on the Nano_D++ firmware by Karl Malota, shared with his permission; see NOTICE.md.










