Skip to content

Latest commit

 

History

7 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Yunzii Display Studio

Open-source display software for YUNZII keyboards with a built-in screen. Turn the little TFT on your YUNZII B75 PRO MAX (and other yunzii-game.com displays) into a live dashboard — album art, a system monitor, a clock, weather, a pomodoro timer — instead of a static picture you have to upload through the vendor's web tool.

Yunzii Display Studio — the screen showing Now Playing with album art

Windows · MIT · runs in the tray · English / Русский · pairs with OpenRGB firmware so lighting and the screen work at the same time.


Why

YUNZII ships these boards with a small TFT screen you're meant to feed images to through the yunzii-game.com web page. It's clunky and it's just static pictures. This is a proper desktop companion that renders live content to the screen over USB, from an open, hackable codebase.

I reverse-engineered the display's picture-upload protocol (the JS behind yunzii-game.com) and built the render/push pipeline around it. It's tested on the B75 PRO MAX; because the protocol is the same one the vendor tool uses, it may work on other YUNZII displays too — testers with other models welcome (see Contributing).


Features

  • 🎵 Now Playing — track / artist + album art, pulled from the Windows media session (SMTC). Works with Spotify, browsers, most players.
  • 📊 System monitor — CPU, RAM, disk, network, per-core, and real temperatures (via LibreHardwareMonitor — the reliable way to get CPU/GPU temps on Windows). Pick which metrics to show; the layout reflows.
  • 🕒 Clock — digital, digital-with-seconds, or an analog face.
  • 🌦️ Weather — current conditions or a 3-day forecast (Open-Meteo; auto-locates by IP or set lat/lon).
  • 🍅 Pomodoro — work/break timer with a progress ring, right on the screen.
  • 🔁 Rotation — a playlist of screens, each with its own dwell time.
  • 🤖 Auto — the screen picks itself by context: music playing → Now Playing, high CPU load → monitor, otherwise your idle screen.
  • 🖥️ Tray app — runs in the background, optional start with Windows, tiny footprint. A settings page opens in your browser only when you want to tweak something.
  • 🌍 English / Русский, switchable at runtime.
  • ⌨️ Hardware hotkeys — with the custom firmware, Fn+5/6/7 switch the screen mode from the keyboard itself.

Install (Windows)

Portable — no installer, no Node.js required.

  1. Download the latest YunziiDisplayStudio-portable.zip from Releases.
  2. Unzip anywhere (e.g. C:\Tools\YunziiDisplayStudio).
  3. Run Start.vbs (starts hidden, in the tray). Right-click the tray icon → Start with Windows to autostart.
  4. Right-click the tray icon → Open settings to choose what the screen shows.

For CPU/GPU temperatures, also run LibreHardwareMonitor (any time — the app picks up its sensors automatically). Everything else works without it.

Firmware

  • On stock YUNZII firmware: the screen works, so the app works. (Lighting stays on VIA / the vendor tool.)
  • On the custom OpenRGB + Screen firmware: you get the screen and OpenRGB per-key lighting at the same time, plus the Fn+5/6/7 hardware hotkeys. Recommended.

USB-C cable required (the screen protocol is USB-only; typing still works wireless).


Settings

The tray app serves a small settings page (dark, no account, all local). Open it from the tray or at http://127.0.0.1:4680. Pick the active screen, tune each preset, set the language, map the hardware hotkeys, and adjust the push speed. Settings autosave to %APPDATA%\yunzii-desk\config.json.


Build / run from source

Requires Node.js 20+ on Windows (the native modules ship prebuilt binaries for common Node versions).

git clone https://github.com/ZerO970/yunzii-display.git
cd yunzii-display
npm install
npm start            # or: node index.js

Then open http://127.0.0.1:4680. PORT env var overrides the port.

How it works

  • lib/protocol.js — the reverse-engineered screen protocol over raw HID (node-hid, HIDAsync so frame uploads don't block the event loop). 160×96, RGB565, CRC16/MODBUS framing.
  • lib/app.js — the render/push loop. Draws each preset to a node-canvas, converts to RGB565, pushes to the screen. Independent of whether the settings page is open.
  • lib/presets/* — one module per screen (clock, weather, nowplaying, sysmon, pomodoro, …).
  • scripts/*.ps1 — small PowerShell bridges spawned as child processes: nowplaying_bridge.ps1 (Windows media session + album art) and lhm_bridge.ps1 (LibreHardwareMonitor sensors). Request/response over stdio, polled on their own timers.
  • server/index.js — Express settings API; public/* — the settings UI. public/i18n.js — the shared EN/RU dictionary used by the UI, the tray, and the on-screen text.
  • lib/tray.js — the tray menu (systray2).

🙏 Call for help — cracking the screen module

This is where the community could unlock something much bigger.

The screen is its own microcontroller, sitting behind the keyboard's main STM32 and spoken to over UART. I drive it through the vendor's picture-upload protocol (reverse-engineered from the yunzii-game.com JS), which works well — but it has a hard ~0.3–1 second per frame ceiling. It's a slow serial link meant for the occasional still image, so it's perfect for album art / stats / a clock, and too slow for anything real-time.

If you can help with any of these, please open an issue or PR:

  • the screen module's firmware or source, or a way to reflash / dump that module;
  • its native command set beyond picture-upload — direct draw commands, a partial-update or streaming mode, a faster baud/protocol, a raw COM/serial channel;
  • documentation or datasheets for the display MCU;
  • testing on other YUNZII models with a screen (does the protocol match? what's different?).

Any of the first three could unlock real-time sync — live audio visualizers, smooth animations, genuine dashboards. The current protocol notes, the OpenRGB layout JSON, and the VIA definition JSON are in this repo; the firmware side is in the companion firmware repo.


Contributing

Issues and PRs welcome — especially testers with other YUNZII screen models, anyone who knows the display hardware, and translations. Please keep changes focused and describe what you tested.

Limitations

  • Windows only (SMTC album art, LibreHardwareMonitor, and the PowerShell bridges are Windows-specific).
  • Frame rate is hardware-limited (~0.3–1 s/frame) by the screen module — see the call for help above.
  • Temperatures need LibreHardwareMonitor running (Windows' built-in thermal data is unreliable).
  • Tested on the B75 PRO MAX; other models are unverified.

Credits

License

MIT © Vitalii Zaikin (ZaviNi).

Disclaimer

Not affiliated with or endorsed by YUNZII. "YUNZII" is used only to describe hardware compatibility. Provided as-is, no warranty.

About

Yunzii Display Studio — open-source display software for YUNZII keyboards (B75 PRO MAX and other yunzii-game.com screens): Now Playing album art, system monitor, clock, weather, pomodoro. Pairs with OpenRGB firmware.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages