https://github.com/aitjcize/esp32-photoframe-app
Android/iOS app implemented in Flutter for esp32-photoframe
https://github.com/aitjcize/esp32-photoframe-app
Last synced: about 2 months ago
JSON representation
Android/iOS app implemented in Flutter for esp32-photoframe
- Host: GitHub
- URL: https://github.com/aitjcize/esp32-photoframe-app
- Owner: aitjcize
- Created: 2026-04-16T15:08:22.000Z (about 2 months ago)
- Default Branch: main
- Last Pushed: 2026-04-16T17:13:52.000Z (about 2 months ago)
- Last Synced: 2026-04-16T18:29:39.003Z (about 2 months ago)
- Language: Dart
- Size: 81.1 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# ESP32 PhotoFrame App
Cross-platform companion app for [ESP32 PhotoFrame](https://github.com/nickoala/esp32-photoframe) e-paper displays.
## Features
### Device Management
- **mDNS auto-discovery** via `_esp32-pframe._tcp` service type
- **Saved devices** with online status indicators (HTTP ping every 15s)
- **Manual connection** by IP address or `.local` hostname
- Automatic `.local` hostname resolution to IP for reliable connections
### Gallery
- Browse and manage albums on the device
- View image thumbnails with caching
- Multi-select for batch deletion
- Create and delete albums
- Pull-to-refresh with per-device caching for instant load
### Image Processing
Full port of [epaper-image-convert](https://github.com/nickoala/epaper-image-convert) to Dart:
- **Dithering algorithms**: Floyd-Steinberg, Stucki, Burkes, Sierra
- **Color matching**: RGB and LAB (CIE Delta E)
- **Tone mapping**: Contrast and S-curve modes
- **Adjustments**: Exposure, saturation, dynamic range compression
- **Presets**: Balanced, Dynamic, Vivid, Soft, Grayscale
- **Layout modes**: Cover (crop), Fit (letterbox), Custom (drag to pan, pinch to zoom)
- **Live preview** during custom layout adjustments
- **EPDGZ output** at native panel resolution with orientation handling
- Background masking for clean letterbox edges after dithering
### Device Settings
All settings from the webapp:
- WiFi, display orientation/rotation, timezone, NTP server
- Auto-rotate with interval, clock alignment, storage/URL source
- Sleep schedule, deep sleep
- Home Assistant URL
- AI generation API keys (OpenAI, Google Gemini)
- OTA firmware updates with progress tracking
## Building
### Prerequisites
- Flutter SDK 3.11+
- JDK 17 (for Android builds)
- Android SDK with NDK
### Build & Install
```bash
export JAVA_HOME=/path/to/jdk17
flutter build apk --release
adb install build/app/outputs/flutter-apk/app-release.apk
```
### Firmware
The device firmware needs the `_esp32-pframe._tcp` mDNS service registered for auto-discovery. See `mdns_service.c` in the firmware repo.
## Architecture
```
lib/
main.dart # App entry, routing, theme
models/
device.dart # Device, SystemInfo, BatteryInfo
config.dart # DeviceConfig
album.dart # Album, PhotoInfo
providers/
device_provider.dart # State management, keep-alive, caching
screens/
discovery_screen.dart # Device discovery & connection
gallery_screen.dart # Album browser, image grid
preview_screen.dart # Image processing editor
settings_screen.dart # Device configuration
services/
api_client.dart # REST API client for ESP32
device_discovery.dart # mDNS discovery & online ping
saved_devices.dart # Persistent device storage
epaper/
image_processor.dart # Dithering, color conversion, EPDGZ
palettes.dart # Measured color palettes (Spectra 6)
presets.dart # Processing presets
```