Skip to content

Flash a screen yourself ​

Tessera builds and installs the firmware for you. You can also do it yourself, with ESPHome Device Builder or the ESPHome command line, and the screen works the same in Tessera.

The screen's YAML ​

Every screen has a small YAML file of its own in the ESPHome folder of your Home Assistant configuration: its name, its Wi-Fi (from secrets.yaml), its API key and update password, its language and the way it hangs. Everything else comes from one line that points at the shared firmware on GitHub:

yaml
packages:
  display:
    url: https://github.com/MaxGramser/homeassistant_espscreen
    ref: main
    files: [packages/guition.yaml]
    refresh: 0s

The file is yours. A build fetches the shared part fresh, so you never replace your own YAML with a downloaded one. The screen's details in Tessera have Download screen files, a zip with exactly the files a build needs.

With ESPHome Device Builder ​

Device Builder finds the screens' files in the ESPHome folder by itself; Tessera and Device Builder can share the folder. Install → Plug into this computer, Wirelessly or Manual download all work with the file. Device Builder needs ESPHome 2026.6.2 or newer; the 10.1-inch Guition needs 2026.8.0, the Waveshare 7B 2026.7.0.

For an existing screen, always use its existing file. A new file means new keys, and Home Assistant sees a new device.

From Tessera, by hand ​

Firmware & USB in the sidebar builds any screen's file and installs it: on a USB port of the Home Assistant machine, from your browser on a screen plugged into this computer, over Wi-Fi to an address you type, or as a download. Check only validates; Build only builds without installing.

A USB install from Firmware & USB writes without erasing, so the screen keeps its settings and touch calibration. That is also the rescue for a screen that keeps restarting.

Override YAML ​

Some boards sold under one name have different parts inside. For those, every screen has a second small file, loaded after the shared firmware and kept through every update. Open it with Override YAML in the screen's ··· menu. The most common change is one line:

yaml
substitutions:
  DISPLAY_MODEL: "ST7789V"
SettingBoardsWhat it changes
DISPLAY_MODELCYD, HosyondThe display chip: ILI9341, ST7789V, ST7796
DISPLAY_DATA_RATECYD, HosyondThe display speed; some boards need 20MHz
DISPLAY_INVERT_COLORSCYD, Hosyond"true" when every colour shows as its opposite
BACKLIGHT_FREQUENCYCYD, Guition 4 and 3.5 inch, Waveshare 4B and 3.5 inch, HosyondHow fast the backlight is dimmed
GRID_ROWSGuition 4 inch4 for four rows of smaller tiles

Save & check validates the whole file with ESPHome; Update then builds it. The name, Wi-Fi, API, update password and package lines stay managed by Tessera, and a choice you made under New screen, such as the CYD's display chip, wins over the override. To change the display itself, use id: !extend my_display; a bare id: adds a second display and the build fails. Don't copy rotations from old forum posts: the way a screen hangs is chosen under New screen.

Migrating a screen you built before ​

Keep the old YAML's device name, API key and update password in the new file, and the screen stays the same device in Home Assistant. Tiles you had fixed in YAML are not imported; choose them in Tessera.

Boards with 4 MB of flash ​

The CYD and the Hosyond moved to a partition table of their own. If you flash those yourself, read Screens with 4 MB of flash once.

Free and open source, GNU AGPL v3. Built with ESPHome. Not affiliated with Home Assistant.
Looking for e-ink? See Tesserae (tesserae.ink), a separate project.