Skip to main content

Welcome to einky

einky is a custom handheld console designed to run Ren'Py visual novels and narrative games on an e-ink display.

An End-of-Studies Project (EIP) developed at Epitech Montpellier.

What is einky?

einky runs on a Raspberry Pi Zero 2W with a 3.97" e-ink panel (800×480px). The core goals are:

  • Minimal battery consumption — e-ink holds a frame without power
  • Zero blue light emission — no backlit screen
  • Distraction-free reading — purpose-built for visual novels

The device runs InkyOS, a purpose-built Buildroot appliance image that boots straight into the einky launcher — a native Python game library and settings dashboard. There is no package manager and no desktop in the boot path. When the player picks a game, the launcher spawns Ren'Py, which renders headless into a virtual framebuffer and pushes one PNG per stable frame back to the launcher; the shared frame pipeline dithers it to 1-bit (Floyd–Steinberg) and drives the e-ink panel over SPI, while the seven hardware buttons are forwarded to the engine as input.

How it works

InkyOS boots → inky-launcher (native Python; owns the SPI panel + GPIO buttons)
menu: Pillow-rendered 1-bit frames → panel (partial/full refresh control)
play: launcher spawns Ren'Py under Xvfb (software GL)
game → PNG per stable frame → dither → 1-bit → SPI → e-ink panel
buttons → launcher → input socket → Ren'Py events
exit (or hold Start) → back to the library

The launcher owns the panel and buttons for the whole uptime and supervises every game session (ADR 0009); games only speak two Unix sockets.

On the engine. Developer workstations use the vanilla upstream Ren'Py SDK. On the device, InkyOS builds the same Ren'Py version from source as a Buildroot package, with one small e-ink patch (config.eink_push_callback). See the Architecture Overview.

ResourceLink
GitHub Organizationeinky
Documentationdocs.einky.fr

Where to go next