Inspiration
When our friends go overseas or on exchange, we want to give them a gift that is meaningful.
What it does
Friends in the friend group can each hold a digital photo frame which is a display and a Raspberry Pi. A distributed server allows any of the friends to upload photos and set all of the photo frames to display a photo. Users upload and set the photo via a server that is hosted on all of the photo frame Pi's.
Each photo frame Pi hosts a server, and a load balancer distributes client traffic to any available server. A backend syncs the data and displays photos across all of the devices automatically. All data is completely on the Pi devices, and nothing passes through the cloud.
How we built it
The UI front end and server is built using Streamlit. File syncing is done using Syncthing, while the load balancer / reverse proxy is done using Caddy. Everything is dockerized and CI'ed on Github Actions.
The display is a Pimoroni Inky Impressions 7.3" E-ink display, and we use their given Python library.
Challenges we ran into
The Raspberry Pi Zero 2 W that we are running the photo-frames have just 512MB of RAM. This is a severe constraint and slows down Docker operations heavily. We intended to build the system using the lightweight K3s (Kubernetes), but even that was too heavy for the Pi Zero 2 W.
Github Repo
Built With
- caddy
- docker
- streamlit
- syncthing
Log in or sign up for Devpost to join the conversation.