# ESPresso Frame A DIY e-ink photo frame: an ESP32 board pulls photos from your [Immich](https://immich.app) library and displays them on a full-color e-paper panel, waking on a timer to refresh and spending the rest of its time in deep sleep. The original build is a 7.3" panel on an ESP32-C6; a larger 13.3" panel on Seeed's EE02 (ESP32-S3) is supported server-side, but its firmware driver isn't working yet -- see [`docs/hardware.md`](docs/hardware.md). - **No cables to a computer, no SD card shuffling.** Provisioning is a captive portal with a QR code drawn on the panel itself -- scan, join, fill in your WiFi and server address, done. - **The frame never decodes an image.** A small self-hosted server does all the work (pulling from Immich, cropping, dithering, packing into the panel's exact pixel format) and hands the device a stream it can write straight to SPI. The ESP32-C6 has no PSRAM and not much SRAM to spare -- keeping it a dumb display client is what makes that workable (the same design carries over to the ESP32-S3 board even though it does have PSRAM, for consistency). - **Crops toward faces, not just the center**, using face bounding boxes Immich already computed for its own People feature -- no bundled face detector. - **Refresh interval and album are configurable from a web UI**, no reflashing needed to change them. ## Hardware - ESP32-C6 dev board (8MB flash), or Seeed's XIAO ESP32-C6 (production board) -- both drive the panel below. - [Waveshare 7.3" E Ink Spectra 6 (E6)](https://www.waveshare.com/7.3inch-e-paper-hat-e.htm) panel -- 800x480, 6-color, SPI. - Experimental, not yet working: [Waveshare 13.3" E Ink Spectra 6](https://www.waveshare.com/13.3inch-e-paper-hat-plus-e.htm) (1600x1200) on [Seeed's EE02](https://www.seeedstudio.com/XIAO-ePaper-DIY-Kit-EE02-for-13-3-Spectratm-6-E-Ink.html) (ESP32-S3) -- server-side support exists, but the firmware driver's panel init sequence isn't ported from vendor code yet. See [`docs/hardware.md`](docs/hardware.md) for wiring, [`docs/architecture.md`](docs/architecture.md) for how the two halves talk to each other, and [`docs/widgets.md`](docs/widgets.md) for the server's placeable photos/calendar/whiteboard widget system. ## Getting started 1. **[`server/`](server/)** -- run the FastAPI server first (Docker Compose, points at your Immich instance). See [`server/README.md`](server/README.md). 2. **[`firmware/`](firmware/)** -- build and flash the board, then scan the QR codes it draws on first boot to provision it. See [`firmware/README.md`](firmware/README.md). ## Repo layout ``` firmware/ ESP-IDF project (ESP32-C6 devkit/xiao boards, ESP32-S3 ee02) server/ FastAPI server: Immich -> crop/dither/pack -> the frame docs/ Wiring and architecture notes ``` ## License MIT -- see [`LICENSE`](LICENSE). A few small pieces of vendored third-party code (a QR code generator, a bitmap font table) keep their own permissive licenses; see `LICENSE` for details. --- Built with substantial assistance from [Claude Code](https://claude.com/claude-code).