Loading page...Загружаем страницу...正在加载页面...
AtlasRepo

The Photo Frame I Didn't Have Time to Fix

Description and use

photoframe now displays photos from Immich on Raspberry Pi with an automated release pipeline guarded by real‑hardware tests.

Problem

Google Photos API was cut, leaving photoframe unable to read the library; need to adapt to self-hosted Immich and update OS compatibility.

Outcome

photoframe now reliably displays photos from Immich on various Raspberry Pi models, with robust error handling, memory optimization, and a fully automated release pipeline guarded by Pi hardware tests.

Workflow

  • 1. Add Immich API key auth via x-api-key header.
  • 2. Map Immich albums to photoframe keywords.
  • 3. Create /immichconfig route while preserving existing routes.
  • 4. Update Flask error handling in server.py.
  • 5. Implement display fallback: use tvservice if available, else fbset and /sys/class/graphics.
  • 6. Add memory checks: request preview image, upscale only if /proc/meminfo and ImageMagick limits allow.
  • 7. Implement exponential backoff retry for downloads with jitter.
  • 8. Handle SIGTERM/SIGINT to blank display and hide credentials.
  • 9. Build headless Lite Pi image via pi-gen fork; configure wifi via wifi-config.txt.
  • 10. Test on Pi hardware before any push, tag, or release.
  • 11. Use automated agents with rules: no unauthorized commits, no route modifications, release gate via PR and Pi test.

Evidence

Henric Andersson's Raspberry Pi project that pulls random photos from Google Photos and shows them like a picture frame.

Source

In 2025 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.

Source

I self-host Immich. My photos are already there. So the fix was obvious on paper: teach photoframe to talk to Immich.

Source

The first Immich work happened over a weekend in September 2025.

Source

None of those steps is crazy on its own. Together they're a release nobody had run.

Source

Nothing gets pushed, tagged, released, or sent upstream until it's been tested on Pi hardware.

Source

  • Record date: 2026-10-03T02:41:05.501Z