Skip to content

Screens & compatibility

Tesserae renders a dashboard headlessly and pushes the frame over MQTT; a small client on the other end paints your panel. What panel you can drive comes down to which client you flash and which renderer feeds it.

Panel presets

Built-in sizes (Settings → Panel). Pick custom for anything not listed, the dimensions are all that matter to the renderer.

Preset Native resolution Panel
inky_13_3 Inky Impression 13.3", 1600x1200
inky_7_3 Inky Impression 7.3", 800x480
inky_5_7 Inky Impression 5.7", 600x448
inky_4 Inky Impression 4", 640x400
waveshare_e6_7_5 Waveshare E6 7.5", 800x480
waveshare_photopainter_7_3 S3), 800x480 Waveshare 7.3" PhotoPainter (ESP32
waveshare_e6_13_3 Waveshare 13.3" Spectra 6 (ESP32), 1200x1600
custom any (set width + height) anything the inky / Waveshare path drives

Renderers

A renderer turns the composition PNG into the exact bytes a client wants. Each ships as a drop-a-folder plugin under renderers/<id>/.

Renderer Output Target client(s) What it's for
esp32_bin .bin tesserae-esp32-bin-client (13.3" Waveshare)
tesserae-photopainter-7.3-bin-client (7.3" PhotoPainter)
Composition PNG packed into the Waveshare E6 4-bpp buffer the ESP32 firmware streams to SPI.
pi_bin .bin tesserae-pi-bin-client Composition PNG packed into the panel-native 4-bpp buffer the .bin Pi client consumes.
pi_png .png tesserae-pi-png-client Composition PNG, rotated to the Pi client's landscape-native pixel grid.
trmnl_png .png tesserae-trmnl-client Composition PNG fitted to the device's panel size, then quantised to 1-bit black/white with the selected dither.

Device kinds

The bundled client kinds Tesserae knows how to talk to. A flashed client announces itself on tesserae/<device-id>/status and shows up under Settings → Devices → Discovered. See Install a client and Set up a device.

Device kind Default panel Renderers What it is
esp32_client 800×480 esp32_bin Battery-powered ESP32 firmware that subscribes to tesserae/esp32/frame/bin (retained), paints the panel via SPI, and goes back to deep sleep.
pi_bin_client 1424×1200 pi_bin Raspberry-Pi-side client that consumes the 4-bpp .bin frame.
pi_png_client 1424×1200 pi_png Raspberry-Pi-side client that consumes the PNG frame.
trmnl_client 800×480 trmnl_png HTTP-polled e-paper client compatible with the TRMNL BYOS protocol.

What's been tested on real hardware

Honest status from the maintainer's own bench. Untested doesn't mean broken, it means nobody's confirmed it yet. Got one working? Open a PR or issue and we'll mark it.

Renderer Hardware Status Notes
esp32_bin Waveshare 13.3" Spectra 6 (ESP32-S3-WROOM-2) + Waveshare 7.3" PhotoPainter (ESP32-S3) Tested Primary daily driver, battery-powered, deep-sleep. The 13.3" client lives at tesserae-esp32-bin-client; the 7.3" PhotoPainter client at tesserae-photopainter-7.3-bin-client. Both pair with the same renderer; the panel preset (waveshare_e6_13_3 vs waveshare_photopainter_7_3) selects the firmware-native row stride.
pi_bin Pimoroni Inky Impression (Spectra 6 / Waveshare E6) Tested Fastest Pi path, packed buffer written straight to inky's _buf.
pi_png Pimoroni Inky Impression (via inky set_image) Tested Works on every inky-supported panel; quantises on the Pi each frame.
trmnl_png Amazon Kindle Paperwhite 2 (jailbroken) via KOReader trmnl-display plugin Tested 1-bit greyscale PNG fitted to the panel + dithered server-side. Native TRMNL hardware is supported but not yet confirmed here.