A lightweight, self-hosted photo sharing solution designed for events, weddings, and parties. Guests can upload and download photos through a password-protected web interface with an optimized gallery viewer that provides a smooth browsing experience.

Event Photo Share Gallery

Optimized gallery viewer with thumbnail grid and full-resolution image viewer

Overview

Event Photo Share is a Docker-ready web application that makes it easy to collect and share photos from events. Unlike cloud-based solutions, this self-hosted approach gives you complete control over your photos while providing a polished user experience for guests.

The application handles the technical complexities of image processing automatically - converting HEIC files, generating thumbnails, extracting EXIF data, and even processing videos with thumbnail generation. Guests simply upload their photos, and the system takes care of the rest.

Password-Protected Login

Simple password-protected access with session-based authentication

Key Features

Image & Video Processing

  • Automatic thumbnail generation - Creates optimized thumbnails for fast gallery loading
  • HEIC conversion - Automatically converts iPhone HEIC images to web-compatible formats
  • EXIF data extraction - Preserves photo metadata including date, camera settings, and location
  • Video support - Handles video uploads with automatic thumbnail generation using FFmpeg
  • Duplicate detection - Prevents the same photo from being uploaded multiple times

Gallery Viewer

  • Intelligent preloading - Preloads full-resolution images in both directions for instant navigation
  • Responsive design - Works seamlessly on desktop, tablet, and mobile devices
  • Smooth navigation - Arrow keys and swipe gestures for effortless browsing
  • Full-resolution viewer - View photos in their original quality

Download & Sharing

  • Bulk download as ZIP - Automatically generates ZIP archives for downloading all photos at once
  • Individual downloads - Download specific photos in full resolution
  • Session-based authentication - Password protection with persistent sessions

Notifications (Optional)

  • ntfy.sh integration - Get real-time notifications when guests upload new photos
  • Configurable alerts - Set notification priority and custom topics

Technical Implementation

Architecture

The application uses a straightforward Node.js + Express backend with server-side rendering. This keeps the architecture simple and maintainable while providing excellent performance.

Tech Stack:

  • Backend: Node.js, Express
  • Image Processing: Sharp (for images), FFmpeg (for videos)
  • Deployment: Docker, Docker Compose
  • Storage: File-based (easily mountable volumes)

Performance Optimizations

Intelligent Preloading:
The gallery viewer implements bidirectional preloading - when viewing an image, it preloads the next and previous images in full resolution. This creates an instant, seamless browsing experience as users navigate through the gallery.

Thumbnail Strategy:
All images are automatically processed to generate optimized thumbnails, dramatically reducing initial page load times while maintaining visual quality in the gallery grid view.

Efficient Caching:
The application implements smart caching strategies to minimize redundant processing and serve images quickly on subsequent requests.

Docker Deployment

The entire application is containerized for easy deployment:

# Quick start
cp .env.example .env
# Edit .env with your settings
docker-compose up -d

Access the gallery at http://localhost:3000

Volume Mounting:
Photos are stored in a mounted volume, making it easy to backup, migrate, or access files directly:

volumes:
  - /path/to/photos:/app/uploads

Configuration

Required Settings:

  • PASSWORD - Gallery access password
  • SESSION_SECRET - Session encryption key

Optional Notifications:

NTFY_ENABLED=true
NTFY_SERVER=https://ntfy.sh
NTFY_TOPIC=your_unique_topic
NTFY_PRIORITY=3

Use Cases

This application is perfect for:

  • Weddings - Let guests upload and share photos from your special day
  • Parties & Celebrations - Collect photos from birthday parties, anniversaries, etc.
  • Corporate Events - Share photos from company events, team building, conferences
  • Family Gatherings - Create a shared photo collection for reunions and holidays

Development

For local development:

npm install
cp .env.example .env
npm start

Requirements:

  • Node.js 20+
  • FFmpeg (for video processing)

Privacy & Control

Being self-hosted means:

  • Complete data ownership - Your photos stay on your server
  • No third-party access - No cloud services scanning or accessing your images
  • Custom domain - Host on your own domain or subdomain
  • Full control - Modify, extend, or customize as needed

Appendix and Links

The source code is available on GitHub.

License: MIT