Small displays are everywhere — mini-PC front panels, desk clocks, printer status screens — and each one ships with its own throwaway firmware. Home Assistant already knows the state of your house. What’s missing is a rendering layer: something that turns entity state into pixels and doesn’t have to be rewritten for the next panel you buy.
That’s what TinyDisplay is. You write a dashboard as YAML, point the integration at the file, and the panel repaints whenever one of the entities it names changes. Nothing is polled.
Those are five screens of one dashboard, rotating on a timer.
What works
Confirmed on hardware: Home Assistant OS 18.1, Core 2026.7.4, an AceMagic S1’s built-in 320×170 panel, driven from inside the Core container and drawing live entity state.
- YAML dashboards — stacks, grids, labels, gauges, progress bars, sparklines, icons, images
- Templating with a small filter set, including
ageanddurationfor uptimes - 32 drawn icons that scale to their box and recolour with the theme
- Multiple screens on a rotation timer
- Change-driven rendering, with a floor and a ceiling on repaint rate
- A desktop simulator, so you can build a dashboard with no hardware and no Home Assistant
Read this before you install
One thing decides whether this works on your machine, and it isn’t the install.
An integration runs in Home Assistant’s Core container, which can’t request the raw USB privileges an add-on can. On my machine Core can write to the panel. Whether yours can, I genuinely don’t know — it’s the only machine this has run on.
There’s a five-minute check that tells you, before you install anything. With Protection Mode off, from the Advanced SSH & Web Terminal add-on:
wget -O /config/ht32_usbfs_preflight.py \
https://raw.githubusercontent.com/chad-albrecht/tinydisplay/main/tools/ht32_usbfs_preflight.py
docker exec homeassistant python3 /config/ht32_usbfs_preflight.py
It writes nothing to the panel and is safe on a running system. READY means carry on. NOT READY or NOT FOUND means the panel would need driving from an add-on instead, which is a rewrite of the top layer, not a setting you can change.
Installing
HACS → ⋮ → Custom repositories → https://github.com/chad-albrecht/tinydisplay, type Integration → Add → Download → restart → Settings → Devices & Services → Add Integration → TinyDisplay.
Nothing gets installed by hand. Home Assistant fetches the Python packages itself from the release tarball. The config flow writes a starter dashboard reading sun.sun, so accepting the defaults gives you a panel showing real moving data.
It’s a custom repository rather than the HACS default store, and that’s deliberate: hassfest rejects any requirement containing a space, and installing the libraries by URL needs the @ separator. Listing in the store would mean giving up the install that works to get one that’s easier to find.
What’s not established
Being straight about this, because pre-alpha means something here:
- Uptime beyond minutes. The panel needs a keep-alive or its firmware paints a “Disconnection” banner over everything. It works; whether it holds for hours is untested.
- Reconnection after a replug. Untested against hardware.
- The options flow, reload and unload. All unit-tested, none exercised on a real panel.
- Any panel other than mine. The HT32 wire format was reconstructed from three other people’s projects, all credited in the README.
There’s no device or entity published back to Home Assistant yet, so nothing in the UI tells you whether the panel is being drawn to — the logs are the only answer.
What I’d like
- Anyone with an HT32-based panel, especially in a different machine. The preflight result alone is useful data, even if you install nothing.
- Long-run reports. If you leave it running overnight and the banner comes back, I want to know.
- Other panels. The whole point of the layering is that a driver is a small, self-contained thing — core knows nothing about hardware and nothing about Home Assistant. If you have a panel you’d like driven, the driver interface is the place to start and I’m happy to help.
MIT licensed.

