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 — 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
Appendix and Links
The source code is available on GitHub.
License: MIT