Add READMEs, docs, and LICENSE for publishing
Build and push server image / build-and-push (push) Successful in 32s
Build and push server image / build-and-push (push) Successful in 32s
- LICENSE: MIT, with attribution notes for the vendored qrcode/epaper_fonts/ dns_server code and the epd7in3e driver's transcription of Waveshare's register sequence. - Top-level README.md: project overview, hardware list, quick-start pointing at firmware/ and server/, repo layout, license, Claude Code attribution. - firmware/README.md: full rewrite (was still the stock ESP-IDF captive portal example's README) -- build/flash instructions, Kconfig reference table, first-boot walkthrough, and how to reset to provisioning mode via NVS erase (the only way in right now; a proper reconfigure trigger is a future addition). - docs/hardware.md: wiring table + parts list + strapping-pin/SPI-speed notes. - docs/architecture.md: sequence diagram and walkthrough of the full provision -> connect -> fetch -> display -> sleep cycle, plus the reasoning behind doing image processing server-side and reusing Immich's face detection instead of bundling a detector. - server/README.md: fixed stale endpoint docs (missing GET /frame/config, POST /api/config still describing removed immich_url/api_key fields).
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
# ESPresso Frame
|
||||
|
||||
A DIY e-ink photo frame: an ESP32-C6 pulls photos from your
|
||||
[Immich](https://immich.app) library and displays them on a 7.3" full-color
|
||||
e-paper panel, waking on a timer to refresh and spending the rest of its
|
||||
time in deep sleep.
|
||||
|
||||
- **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.
|
||||
- **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)
|
||||
- [Waveshare 7.3" E Ink Spectra 6 (E6)](https://www.waveshare.com/7.3inch-e-paper-hat-e.htm) panel -- 800x480, 6-color, SPI
|
||||
|
||||
See [`docs/hardware.md`](docs/hardware.md) for wiring and
|
||||
[`docs/architecture.md`](docs/architecture.md) for how the two halves talk
|
||||
to each other.
|
||||
|
||||
## 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 ESP32-C6, 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 for the ESP32-C6
|
||||
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).
|
||||
Reference in New Issue
Block a user