DD Photos: Build Your Own Fast, Private Photo Album Website
DD Photos: Share Your Photos Your Way
Tired of slow-loading photo sharing sites with cluttered UIs, ads, and social media distractions? DD Photos https://github.com/dougdonohoe/ddphotos is a photo album website generator that puts you in control. Built with help from Claude Code, it creates a fast, clean, mobile-friendly gallery that loads in seconds, not the 20+ seconds you’d wait for iCloud shared albums.
The philosophy is simple: focus on the photos. No ads, no tracking, no account required. Just you, your photos, and anyone you want to share them with.
Key Features
🚀 Blazing Fast Performance
Your photos load instantly:
- WebP Format - Photos resized to efficient WebP (grid: 600px, full: 1600px)
- Static Site - No server-side code, no database! Just pure HTML, CSS, JS
- CDN Ready - Deploy to AWS S3 + CloudFront or any web server
- Client-Side Fetch - Photo data loaded from static JSON indexes
🖼️ Beautiful Gallery Interface
A clean, distraction-free experience:
- Album Grid - Concise cards with description, photo count, date range, and cover photo
- Photo Grid - Nicely justified layout that adapts to any screen size
- PhotoSwipe Lightbox - Click a photo to see the full version with smooth swiping
- Keyboard Navigation - Arrow keys navigate, ESC exits to home
- Mobile Friendly - Works great on phone, tablet, and desktop
- Dark/Light Theme - Toggle between themes instantly
📝 Optional Photo Captions
Add context to your memories:
- photogen.txt - Define captions for each photo in an album
- Hover Captions - Desktop shows caption on mouse hover
- Always Visible - Mobile shows caption below each photo
- Alt Text - Captions used as image alt text for accessibility
- Sort Order - Override default date-based sorting
🔗 Shareable Permalinks
Every photo gets a shareable URL:
- Permalink Format -
/albums/patagonia/5for direct linking - Copy Button - One-click copy to clipboard
- OpenGraph Tags - Rich previews when sharing on social media
⚙️ Simple Configuration
Three files to set up your site:
- albums.yaml - Define your albums and their photo folders
- descriptions.txt - Short description for each album
- site.env - Site name, description, copyright info
🔒 Privacy First
Your photos, your rules:
- Metadata Stripped - EXIF data removed from WebP output (no GPS leak)
- No Tracking - No analytics, no cookies
- Self-Hosted - Runs on your server, not someone else’s
Tech Stack
- Backend - Go (
photogen) for image resizing and JSON generation - Frontend - SvelteKit (static site)
- Image Processing - libvips for fast WebP conversion
- Lightbox - PhotoSwipe
- Deployment - Any web server (Apache, nginx) or S3/CDN
Platforms
- 🍎 macOS (via Homebrew)
- 🐧 Linux (via apt/yum)
- 🪟 Windows (via WSL2)
Get Started
Prerequisites
# Install Go, vips, and pkg-config
brew install go vips pkg-config
# Fetch Go dependencies
go mod download
# Install Node.js via nvm
make web-nvm-install
# Install npm dependencies
make web-npm-installQuick Start with Sample
# Resize sample photos and generate JSON
make sample-photogen
# Run dev server
make sample-npm-run-devVisit http://localhost:5173 to see the sample site.
Build Your Own
Configure your albums:
cp config/albums.example.yaml config/albums.yaml cp config/descriptions.example.txt config/descriptions.txt cp config/site.example.env config/site.envRun the generator:
# Dry run (default) go run cmd/photogen/photogen.go -resize -index # Do it for real go run cmd/photogen/photogen.go -resize -index -doitRun locally:
make web-npm-run-devBuild static site:
make web-npm-buildDeploy:
# Deploy to your web server (Apache example) rsync -avz web/build/ your-server:/var/www/photos/
🔗 GitHub: github.com/dougdonohoe/ddphotos
🔗 Live Demo: photos.donohoe.info
Why This Tool Rocks
- Incredibly Fast - Static site with WebP images loads in seconds, not 20+ seconds like iCloud
- Total Control - No accounts, no ads, no tracking, no subscription fees
- Your Server - Deploy anywhere: Apache, nginx, S3+CloudFront
- Clean UI - No social media clutter, no distractions!
- Mobile Optimized - Swipe through photos on your phone, works offline
- Self-Hosted - No vendor lock-in, your photos stay yours
- Captions & Metadata - Optional captions, sort order, OpenGraph sharing
- Built with AI - Much of it was built with Claude Code: see HISTORY.md for the journey
- Open Source - AGPL licensed
Crepi il lupo! 🐺