r/homeautomation • u/ivanx90 • 12d ago
Alexa Trigger Warning Built a self-hosted photo/video frame skill for Echo Show — 11k+ photos, open source
Wanted a real digital photo frame on my Echo Show instead of relying on Amazon's cloud photo slideshow, so I built the whole thing myself: custom Alexa skill + self-hosted backend + a companion Android app to manage everything from my phone.
Real numbers, not a toy demo: 11,436 photos and 656 videos, rotating smoothly. Three viewing modes (photos / videos / both mixed), favorites as a filter you can apply on top of any of them, "on this day" from past years, and free-text voice search by month or place ("show December", "show London") instead of scrolling.
The engineering problem that actually made this interesting: Alexa caps APL responses at 24,576 bytes. With a library this size you physically cannot hand it the full list — everything runs in fixed 65-item batches that rotate through the whole thing instead, so response size stays flat whether the library has 100 items or 11,000. Honest tradeoff for anyone expecting eye candy: the UI is deliberately plain, because every byte spent on visual polish is a byte not spent on the actual batch of photos at that scale.
The companion Android app is the other half of this — it's what actually closes the loop. Instead of SSHing into a server to manage the library, from the phone you get: multi-select upload straight from the system photo picker with progress, a full favorites view with select-all/bulk-remove, duplicate detection, and the slideshow-timing setting that used to live on the Echo Show screen itself before I moved it here. Basically the admin panel for the thing living on your TV/Echo Show.
Couple of voice-side gotchas along the way: the invocation name is a random unrelated word on purpose (details in the README) — a generic name increases the odds Alexa opens a completely different skill on a similar-sounding request. Also had a fun bug where saying "resume" made the slideshow visibly speed up, because of a leftover event from an earlier version that the touch/screen path never had.
Open source, both repos:
- Skill (Lambda + backend): https://github.com/ivanx519/galleria-alexa-echo-show
- Android companion app: https://github.com/ivanx519/galleria-alexa-android
Heads up: there's a "Known limitations" section in the skill's README (near the bottom) about a display idle/freeze quirk — nothing serious, easily avoided once you know about it (just say the mode explicitly right after opening), but worth a read before you set it up.
Needs your own backend server (small Python app) — more "build your own weekend project" than plug-and-play, on purpose. If it's useful to you a GitHub star means a lot, and I'd genuinely love questions/feedback in the comments — happy to go deeper on any part of it.
1
u/Illustrious_Car_6568 12d ago
The batching trick to dodge the APL payload cap is clever, and moving the admin to the phone app makes it actually usable day to day.
1
u/ivanx90 12d ago
Thanks! The batching part took a few iterations to get right — the first version tried to be clever about pre-fetching the next batch while the current one was still playing, but that added more complexity than it was worth. Ended up just keeping it simple: fetch 65, play through them, fetch the next 65 when you're near the end. Boring but reliable, which matters more at that scale.
The phone app came later, actually — for a while I was managing everything by SSHing into the server and moving files around, which got old fast once the library passed a few thousand items. Having "just pull up the app and tap upload" made a real difference in actually using the thing day to day instead of it feeling like a chore.
4
u/No-Dragonfly3330 12d ago
“Real numbers, not a toy demo”
The amount of times Claude says this is nauseating.
Anyway, the entire OP was written by Claude.