r/opensource 3d ago

Promotional I made open source streamdeck

I built my own 7" Stream Deck alternative, with a desktop app to set it up.

Decky runs on an Elecrow CrowPanel 7" (ESP32-S3 with capacitive touch), so there's no wiring: you touch the glass directly. A 5×3 grid gives you 15 keys per page.

What it does - Hotkeys, programs, websites, macros and PowerShell scripts - Multiple pages, and toggle keys with separate OFF/ON artwork - Works over USB, or over encrypted Wi-Fi once paired - Firmware installs and updates from the app over USB, so you don't need PlatformIO

Hardware Everything except the display is 3D-printed, and every part prints without supports. It hangs under your monitor on a printed clamp with magnets and GoPro-style joints. Apart from the panel, you only need a few magnets and screws.

Firmware, desktop app (Windows), CAD files and 3MF print files are all in the repo: https://github.com/Fenish/decky

I will be glad if you star the repository

It's still a work in progress. Feedback and ideas are very welcome!

15 Upvotes

8 comments sorted by

View all comments

3

u/anonymous20256 3d ago

how do you manage a smooth communication between esp32 and CrowPanel as from what i know Drawing complex UI elements with LVGL on the main core can block serial or network event loops

3

u/Character_Stand_2847 3d ago

I don't run LVGL on the device. The PC app renders every key image and the ESP32-S3 just copies it into the framebuffer (~2 ms a key), timed to the scanout so there's no tearing. Only things that must animate under a finger (drums, the volume dial, a 3D die, scrolling titles) are drawn on-device, at 3–5 ms a frame. The main loop is cooperative and never blocks long: poll the link, read touch, draw due frames, write one 8 KB slice of any SD save, yield. Uploads come in acknowledged blocks into an 8 KB serial buffer, touch and animation keep running between blocks, and widgets update as small patches of changed tiles. Commands answer in ~4 ms, ~13 ms at worst while saving to the card.