A lightweight, self-hosted photo sharing platform for events like weddings, parties, and corporate gatherings. Guests upload and browse photos through a password-protected gallery, with no accounts or cloud services needed.
Optimized gallery viewer with thumbnail grid and full-resolution image viewer
Motivation
I built this for my own wedding to collect photos from guests without relying on third-party cloud services or requiring them to create accounts. The goal was a simple, self-hosted solution that keeps all photos on my own server while offering a polished gallery experience.
Simple password-protected access with session-based authentication
Features
- Password-protected access: Guests enter a single shared password to upload and view photos
- Automatic image processing: HEIC conversion, thumbnail generation, EXIF extraction, and duplicate detection happen transparently
- Video support: Upload videos with automatic thumbnail generation via FFmpeg
- Optimized gallery: Bidirectional preloading of full-resolution images for instant navigation, with keyboard and swipe support
- Bulk download: Download all event photos as a ZIP archive
- Push notifications: Optional ntfy.sh integration for real-time upload alerts
- Docker-ready: Single
docker-compose up -dto deploy; photos stored in a mountable volume for easy backup and migration
Tech Stack
- Backend: Node.js, Express (server-side rendered)
- Image Processing: Sharp, FFmpeg
- Deployment: Docker, Docker Compose
- Storage: File-based with mounted volumes
Links
The source code is available on GitHub.
License: MIT