> This project was developed entirely with AI coding assistance (Claude Opus 4.6 via Cursor IDE) and has not undergone rigorous review. It is provided as-is and may require adjustments for other environments.
# Immich Frame
An ESP32 firmware for the [M5Stack PaperColor](https://shop.m5stack.com/products/m5paper-color-esp32s3-dev-kit) e-ink display that turns it into a digital photo frame powered by your [Immich](https://immich.app/) server.
3. On first boot the device creates a `PaperColor-Setup` WiFi access point. Connect to it and open `192.168.4.1` in your browser.
4. Enter your WiFi credentials, Immich server URL, and API key. The device reboots and begins displaying photos.
## Usage
The PaperColor has three user buttons along the top edge (left to right: Top, Up, Down) and a power button on the side.
**Single press:**
| Button | Action |
|--------|--------|
| Top | Show a random photo |
| Up | Next photo |
| Down | Play / pause slideshow |
**Combos and holds:**
| Input | Action |
|-------|--------|
| Top double-press | Enter deep sleep |
| Top + Down hold (3s) | Enter deep sleep |
| Up hold (5s) | Factory reset (erases all settings, reboots) |
**LED feedback:**
- White flash on any button press
- Red flash when entering deep sleep
- Green pulse while charging
- Orange pulse at low battery, red pulse at critical
**Deep sleep:** In deep sleep mode the device wakes on a timer, fetches and displays a photo, then sleeps again. The interval and batch size are configured via the web UI. Press the power button to wake manually.
## Configuration
Once connected to your network, access the web UI at `http://papercolor.local` to manage:
- **Slideshow** -- interval (2m to custom), cycling mode, image quality, deep sleep batch size