PhotoPrism
AI-powered photo app for organizing your collection.
Overview
PhotoPrism is an AI-powered photo management application that combines machine learning capabilities with self-hosted privacy to organize and browse personal photo collections. Built with TensorFlow integration, PhotoPrism automatically tags photos, recognizes faces, and provides advanced search functionality including color-based queries and geographic mapping. Unlike cloud-based solutions, PhotoPrism gives users complete control over their photo data while delivering sophisticated features typically found only in commercial services. This deployment pairs PhotoPrism with MariaDB to provide robust database performance and reliability for metadata storage. MariaDB's enhanced storage engines and improved connection handling make it particularly well-suited for PhotoPrism's intensive indexing operations and concurrent user access patterns. The combination delivers superior performance compared to SQLite deployments, especially when processing large photo libraries or supporting multiple users simultaneously. This stack is ideal for photography enthusiasts, families with large photo collections, and professionals who need private photo hosting with advanced organizational capabilities. PhotoPrism's support for RAW file formats, combined with MariaDB's reliable transaction handling, ensures that valuable photo assets are properly indexed and searchable while maintaining data integrity throughout the AI processing pipeline.
Key Features
- AI-powered automatic photo tagging using TensorFlow machine learning
- Advanced face recognition with clustering and name assignment capabilities
- RAW file format support for professional photography workflows
- Geographic mapping and location-based photo organization
- Color-based search functionality for finding photos by dominant colors
- Live Photo support for iOS and Android dynamic images
- WebDAV synchronization for mobile device photo backup
- MariaDB's Aria storage engine for crash-safe photo metadata storage
Common Use Cases
- 1Personal photo library management for families with thousands of photos
- 2Professional photographer portfolio organization with RAW file support
- 3Privacy-focused photo hosting alternative to Google Photos or iCloud
- 4Photography business client gallery sharing with album organization
- 5Home lab enthusiasts building comprehensive media management systems
- 6Organizations requiring on-premises photo storage with AI capabilities
- 7Travel photography organization with automatic location tagging
Prerequisites
- Minimum 4GB RAM recommended for AI features and face recognition
- Available port 2342 for PhotoPrism web interface access
- Sufficient storage space for original photos plus generated thumbnails
- Basic understanding of photo file formats and metadata concepts
- Environment variables configured for admin and database passwords
- Docker host with adequate CPU for TensorFlow AI processing tasks
For development & testing. Review security settings, change default credentials, and test thoroughly before production use. See Terms
docker-compose.yml
docker-compose.yml
1services: 2 photoprism: 3 image: photoprism/photoprism:latest4 container_name: photoprism5 restart: unless-stopped6 security_opt: 7 - seccomp:unconfined8 - apparmor:unconfined9 ports: 10 - "2342:2342"11 environment: 12 PHOTOPRISM_ADMIN_USER: admin13 PHOTOPRISM_ADMIN_PASSWORD: ${ADMIN_PASSWORD}14 PHOTOPRISM_SITE_URL: "http://localhost:2342/"15 PHOTOPRISM_DATABASE_DRIVER: mysql16 PHOTOPRISM_DATABASE_SERVER: mariadb:330617 PHOTOPRISM_DATABASE_NAME: photoprism18 PHOTOPRISM_DATABASE_USER: photoprism19 PHOTOPRISM_DATABASE_PASSWORD: ${DB_PASSWORD}20 volumes: 21 - photoprism_originals:/photoprism/originals22 - photoprism_storage:/photoprism/storage23 depends_on: 24 - mariadb2526 mariadb: 27 image: mariadb:1028 container_name: photoprism-db29 restart: unless-stopped30 environment: 31 MARIADB_ROOT_PASSWORD: ${DB_PASSWORD}32 MARIADB_DATABASE: photoprism33 MARIADB_USER: photoprism34 MARIADB_PASSWORD: ${DB_PASSWORD}35 volumes: 36 - photoprism_db:/var/lib/mysql3738volumes: 39 photoprism_originals: 40 photoprism_storage: 41 photoprism_db: .env Template
.env
1ADMIN_PASSWORD=changeme2DB_PASSWORD=changemeUsage Notes
- 1Docs: https://docs.photoprism.app/
- 2Access at http://localhost:2342 - login with configured credentials
- 3Index library: Library > Complete Scan to process photos
- 4AI features (faces, objects, colors) require 4GB+ RAM
- 5Mobile upload via PhotoSync (iOS/Android) or WebDAV
- 6Supports RAW formats, Live Photos, and video
Individual Services(2 services)
Copy individual services to mix and match with your existing compose files.
photoprism
photoprism:
image: photoprism/photoprism:latest
container_name: photoprism
restart: unless-stopped
security_opt:
- seccomp:unconfined
- apparmor:unconfined
ports:
- "2342:2342"
environment:
PHOTOPRISM_ADMIN_USER: admin
PHOTOPRISM_ADMIN_PASSWORD: ${ADMIN_PASSWORD}
PHOTOPRISM_SITE_URL: http://localhost:2342/
PHOTOPRISM_DATABASE_DRIVER: mysql
PHOTOPRISM_DATABASE_SERVER: mariadb:3306
PHOTOPRISM_DATABASE_NAME: photoprism
PHOTOPRISM_DATABASE_USER: photoprism
PHOTOPRISM_DATABASE_PASSWORD: ${DB_PASSWORD}
volumes:
- photoprism_originals:/photoprism/originals
- photoprism_storage:/photoprism/storage
depends_on:
- mariadb
mariadb
mariadb:
image: mariadb:10
container_name: photoprism-db
restart: unless-stopped
environment:
MARIADB_ROOT_PASSWORD: ${DB_PASSWORD}
MARIADB_DATABASE: photoprism
MARIADB_USER: photoprism
MARIADB_PASSWORD: ${DB_PASSWORD}
volumes:
- photoprism_db:/var/lib/mysql
Quick Start
terminal
1# 1. Create the compose file2cat > docker-compose.yml << 'EOF'3services:4 photoprism:5 image: photoprism/photoprism:latest6 container_name: photoprism7 restart: unless-stopped8 security_opt:9 - seccomp:unconfined10 - apparmor:unconfined11 ports:12 - "2342:2342"13 environment:14 PHOTOPRISM_ADMIN_USER: admin15 PHOTOPRISM_ADMIN_PASSWORD: ${ADMIN_PASSWORD}16 PHOTOPRISM_SITE_URL: "http://localhost:2342/"17 PHOTOPRISM_DATABASE_DRIVER: mysql18 PHOTOPRISM_DATABASE_SERVER: mariadb:330619 PHOTOPRISM_DATABASE_NAME: photoprism20 PHOTOPRISM_DATABASE_USER: photoprism21 PHOTOPRISM_DATABASE_PASSWORD: ${DB_PASSWORD}22 volumes:23 - photoprism_originals:/photoprism/originals24 - photoprism_storage:/photoprism/storage25 depends_on:26 - mariadb2728 mariadb:29 image: mariadb:1030 container_name: photoprism-db31 restart: unless-stopped32 environment:33 MARIADB_ROOT_PASSWORD: ${DB_PASSWORD}34 MARIADB_DATABASE: photoprism35 MARIADB_USER: photoprism36 MARIADB_PASSWORD: ${DB_PASSWORD}37 volumes:38 - photoprism_db:/var/lib/mysql3940volumes:41 photoprism_originals:42 photoprism_storage:43 photoprism_db:44EOF4546# 2. Create the .env file47cat > .env << 'EOF'48ADMIN_PASSWORD=changeme49DB_PASSWORD=changeme50EOF5152# 3. Start the services53docker compose up -d5455# 4. View logs56docker compose logs -fOne-Liner
Run this command to download and set up the recipe in one step:
terminal
1curl -fsSL https://docker.recipes/api/recipes/photoprism/run | bashTroubleshooting
- Photos not appearing after upload: Run Library > Complete Scan to index new files into the database
- Face recognition not working: Ensure container has access to at least 4GB RAM for TensorFlow processing
- MariaDB connection errors on startup: Check that DB_PASSWORD environment variable matches between services
- Slow indexing performance: Increase Docker container memory allocation and verify storage I/O performance
- RAW files showing as unsupported: Install additional codec packages or verify PhotoPrism version supports your camera model
- WebDAV sync failing from mobile: Verify firewall rules allow port 2342 and check PHOTOPRISM_SITE_URL configuration
Community Notes
Loading...
Loading notes...
Download Recipe Kit
Get all files in a ready-to-deploy package
Includes docker-compose.yml, .env template, README, and license
Ad Space
Shortcuts: C CopyF FavoriteD Download