The Photo Frame I Didn't Have Time to Fix
Description and use
Photoframe, which pulled photos from Google Photos, stopped working after the API was restricted. The author switched to self-hosted Immich, added display support without tvservice, improved memory and network handling, built a headless Pi image, and enforced strict AI‑agent rules to ensure stability.
Problem
Google Photos Library API was cut, breaking the photoframe Raspberry Pi project that pulls random photos from Google Photos.
Outcome
Photoframe now reliably displays photos from Immich on multiple Raspberry Pi models, with improved stability, memory usage, and network resilience, and is released as a headless image that requires no SSH.
Workflow
- 1. Identify API limitation and choose Immich as replacement.
- 2. Implement Immich authentication via API key and map albums to photoframe keywords.
- 3. Add /immichconfig route while preserving existing routes per CLAUDE.md rule.
- 4. Use AI agents (architect, developer, QA) with explicit rules to build and test changes.
- 5. Apply automated release workflow with gates: push, tag, release only after Pi hardware testing.
- 6. Build headless Lite image with pi-gen, CI builds under QEMU, and migration script.
- 7. Deploy on Pi Zero W, Pi 3B+, Pi 4, Pi 5 with various display resolutions.
- 8. Monitor and iterate on issues such as cached photos, KMS rotation, and Immich v3 API support.
Evidence
Google cut the Photos Library API down to photos an app uploaded itself, and a frame that reads your library has nothing left to read.
I self-host Immich. My photos are already there. So the fix was obvious on paper: teach photoframe to talk to Immich.
The push that went too far… created a v3.0.0 tag and release, created a dev branch, and forked the Raspberry Pi image builder.
A pull request became the vetting gate for the release flow. A Pi Zero W with a 1366x768 laptop panel ran the full image before rc1 got tagged on April 18.
Measured against the original project's master, the fork touches 65 files, with 4,563 lines added and 1,618 removed.
- Record date: 2026-10-03T05:56:12.012Z