Skip to content

hald/photostation

Repository files navigation

Photo Station

Raspberry Pi photo kiosk for kids. Plug in camera, view photos on TV with fun filters, navigate with Xbox controller.

Features

  • Photo slideshow with smooth animated transitions
  • Xbox controller navigation - every button does something!
  • Stickers - add, move, resize, and cycle through emoji stickers
  • Decorative frames - Polaroid, Rainbow, Filmstrip, Sparkle, and more
  • Sound effects for all interactions
  • Auto camera detection - plug in camera, photos import automatically
  • Import progress with confetti celebration when complete

Hardware

  • Raspberry Pi 4 (4GB recommended)
  • Xbox controller (Bluetooth)
  • USB camera (must be USB mass storage, NOT MTP)
  • Powered USB hub recommended - cameras draw too much power from Pi directly
  • TV/monitor via HDMI (1920x1080)

Prerequisites

On a fresh Raspberry Pi OS, first install git:

sudo apt update && sudo apt install -y git

Setup (Raspberry Pi)

# Clone the repo
git clone https://github.com/hald/photostation.git
cd photostation

# Run the installer
./install.sh

# Reboot
sudo reboot

After reboot, the kiosk starts automatically. Plug in a camera and photos import automatically!

Verify Installation

# Check all services are running
sudo systemctl status photostation-backend photostation-frontend photostation-kiosk

# Test backend API
curl http://localhost:8000/api/status

Tech Stack

Component Technologies
Frontend React, TypeScript, Vite, framer-motion, Howler.js
Backend Python, FastAPI, uvicorn, Pillow
Display Chromium kiosk mode, systemd services

Development

For contributors developing on Mac/Linux:

# Backend (Terminal 1)
cd backend && python -m venv venv && source venv/bin/activate
pip install -r requirements.txt
uvicorn main:app --reload --port 8000

# Frontend (Terminal 2)
cd frontend && npm install && npm run dev

Open http://localhost:5173 in your browser.

To deploy changes to a Pi: ./deploy.sh (see script comments for config).

Controller Mapping

Button Action
D-pad Left/Right Previous/next photo
D-pad Up/Down Cycle frames
A Drop sticker
B Remove sticker
X Add sticker / cycle emoji
Y Silly sound
LB/RB Cycle through stickers
Left stick Move sticker
Right stick Resize sticker
Start Play/pause slideshow

Project Structure

photostation/
├── frontend/          # React + Vite app
├── backend/           # Python FastAPI server
├── deploy.sh          # Deploy to Pi
├── start-all.sh       # Start all services locally
├── start-kiosk.sh     # Launch Chromium kiosk
└── mount-camera.sh    # Mount camera and import photos

Troubleshooting

Check service logs

journalctl -u photostation-backend -n 50
journalctl -u photostation-frontend -n 50
journalctl -u photostation-kiosk -n 50

Camera not importing

  1. Check if camera is mounted: mount | grep camera
  2. Check import log: journalctl -u photostation-import -n 20
  3. Manual mount: sudo mount /dev/sda1 /media/camera
  4. Manual import: curl -X POST http://localhost:8000/api/import

Controller not connecting

See xbox-controller-setup.md for Bluetooth pairing instructions.

No display / black screen

  1. Check kiosk service: sudo systemctl status photostation-kiosk
  2. Restart X: sudo systemctl restart photostation-kiosk

Accessing the terminal

The kiosk runs fullscreen, but you can still reach a terminal:

  • SSH: ssh pi@<pi-ip-address> from another computer
  • Switch TTY: Press Ctrl+Alt+F1 to get a login prompt (keyboard required)
  • Return to kiosk: Press Ctrl+Alt+F7 or reboot

To temporarily stop the kiosk: sudo systemctl stop photostation-kiosk

Credits

Sound effects obtained from ZapSplat

License

MIT

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors