docker.recipes

PhotoPrism Photo Management

intermediate

PhotoPrism AI-powered photo management.

Overview

PhotoPrism is an AI-powered photo management application that uses TensorFlow for automatic image tagging, face recognition, and intelligent organization of photo libraries. Originally developed as a privacy-focused alternative to cloud photo services, PhotoPrism processes RAW files, performs automatic categorization, and creates searchable photo archives without sending data to external services. This stack combines PhotoPrism with MariaDB for metadata storage and Redis for caching and session management, creating a complete photo management solution that can handle large photo collections with fast search and browsing capabilities. The MariaDB database stores all photo metadata, tags, and user information while Redis accelerates the application by caching frequently accessed data and managing user sessions. This combination ensures that PhotoPrism can quickly serve photo galleries, perform complex searches, and handle multiple concurrent users efficiently. This configuration is ideal for photographers, families, and organizations who want to maintain complete control over their photo data while benefiting from modern AI-powered organization features. Unlike cloud-based solutions, this stack keeps all photos and metadata on your own infrastructure, making it perfect for privacy-conscious users and professional photographers who need reliable local storage with advanced search capabilities.

Key Features

  • AI-powered automatic tagging using TensorFlow for object and scene recognition
  • Facial recognition with automatic people clustering and identification
  • Interactive map visualization showing photo locations and geotagging
  • Color-based search allowing users to find photos by dominant colors
  • RAW file processing supporting professional camera formats from Canon, Nikon, Sony, and others
  • Live photo support with automatic pairing of images and video components
  • WebDAV synchronization for automatic photo backup from mobile devices
  • Advanced search capabilities including date ranges, camera settings, and AI-generated tags

Common Use Cases

  • 1Professional photographers managing large RAW photo collections with automatic cataloging
  • 2Family photo archiving with automatic face recognition to organize pictures by family members
  • 3Photography studios providing clients with private photo galleries and sharing capabilities
  • 4Travel photographers using GPS data for automatic location-based photo organization
  • 5Wedding photographers delivering organized galleries with automatic couple and guest recognition
  • 6Stock photography management with AI-generated tags for efficient keyword searching
  • 7Corporate photo archives requiring privacy compliance and local data storage

Prerequisites

  • Minimum 4GB RAM recommended for AI processing and photo indexing operations
  • Available port 2342 for PhotoPrism web interface access
  • Sufficient storage space for both original photos and PhotoPrism's generated thumbnails and metadata
  • Basic understanding of photo file formats and directory structures for organizing import folders
  • Docker host with adequate CPU power for TensorFlow-based image analysis and face recognition
  • Network access for initial setup and potential future updates to AI models

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:latest
4 container_name: photoprism
5 restart: unless-stopped
6 ports:
7 - "${PHOTOPRISM_PORT:-2342}:2342"
8 environment:
9 - PHOTOPRISM_ADMIN_PASSWORD=${ADMIN_PASSWORD}
10 - PHOTOPRISM_DATABASE_DRIVER=mysql
11 - PHOTOPRISM_DATABASE_SERVER=mariadb:3306
12 - PHOTOPRISM_DATABASE_NAME=photoprism
13 - PHOTOPRISM_DATABASE_USER=photoprism
14 - PHOTOPRISM_DATABASE_PASSWORD=${DB_PASSWORD}
15 - PHOTOPRISM_REDIS_HOST=redis
16 volumes:
17 - photoprism_storage:/photoprism/storage
18 - ${PHOTOS_PATH:-./photos}:/photoprism/originals
19 depends_on:
20 - mariadb
21 - redis
22
23 mariadb:
24 image: mariadb:11
25 container_name: photoprism-db
26 restart: unless-stopped
27 environment:
28 - MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD}
29 - MYSQL_DATABASE=photoprism
30 - MYSQL_USER=photoprism
31 - MYSQL_PASSWORD=${DB_PASSWORD}
32 volumes:
33 - mariadb_data:/var/lib/mysql
34
35 redis:
36 image: redis:7-alpine
37 container_name: photoprism-redis
38 restart: unless-stopped
39
40volumes:
41 photoprism_storage:
42 mariadb_data:

.env Template

.env
1# PhotoPrism
2PHOTOPRISM_PORT=2342
3ADMIN_PASSWORD=photoprism_admin
4PHOTOS_PATH=./photos
5DB_PASSWORD=photoprism_db
6DB_ROOT_PASSWORD=root_password

Usage Notes

  1. 1PhotoPrism at http://localhost:2342
  2. 2Login with admin credentials
  3. 3Mount photos directory for import
  4. 4AI indexing runs automatically

Individual Services(3 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
  ports:
    - ${PHOTOPRISM_PORT:-2342}:2342
  environment:
    - PHOTOPRISM_ADMIN_PASSWORD=${ADMIN_PASSWORD}
    - PHOTOPRISM_DATABASE_DRIVER=mysql
    - PHOTOPRISM_DATABASE_SERVER=mariadb:3306
    - PHOTOPRISM_DATABASE_NAME=photoprism
    - PHOTOPRISM_DATABASE_USER=photoprism
    - PHOTOPRISM_DATABASE_PASSWORD=${DB_PASSWORD}
    - PHOTOPRISM_REDIS_HOST=redis
  volumes:
    - photoprism_storage:/photoprism/storage
    - ${PHOTOS_PATH:-./photos}:/photoprism/originals
  depends_on:
    - mariadb
    - redis
mariadb
mariadb:
  image: mariadb:11
  container_name: photoprism-db
  restart: unless-stopped
  environment:
    - MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD}
    - MYSQL_DATABASE=photoprism
    - MYSQL_USER=photoprism
    - MYSQL_PASSWORD=${DB_PASSWORD}
  volumes:
    - mariadb_data:/var/lib/mysql
redis
redis:
  image: redis:7-alpine
  container_name: photoprism-redis
  restart: unless-stopped

Quick Start

terminal
1# 1. Create the compose file
2cat > docker-compose.yml << 'EOF'
3services:
4 photoprism:
5 image: photoprism/photoprism:latest
6 container_name: photoprism
7 restart: unless-stopped
8 ports:
9 - "${PHOTOPRISM_PORT:-2342}:2342"
10 environment:
11 - PHOTOPRISM_ADMIN_PASSWORD=${ADMIN_PASSWORD}
12 - PHOTOPRISM_DATABASE_DRIVER=mysql
13 - PHOTOPRISM_DATABASE_SERVER=mariadb:3306
14 - PHOTOPRISM_DATABASE_NAME=photoprism
15 - PHOTOPRISM_DATABASE_USER=photoprism
16 - PHOTOPRISM_DATABASE_PASSWORD=${DB_PASSWORD}
17 - PHOTOPRISM_REDIS_HOST=redis
18 volumes:
19 - photoprism_storage:/photoprism/storage
20 - ${PHOTOS_PATH:-./photos}:/photoprism/originals
21 depends_on:
22 - mariadb
23 - redis
24
25 mariadb:
26 image: mariadb:11
27 container_name: photoprism-db
28 restart: unless-stopped
29 environment:
30 - MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD}
31 - MYSQL_DATABASE=photoprism
32 - MYSQL_USER=photoprism
33 - MYSQL_PASSWORD=${DB_PASSWORD}
34 volumes:
35 - mariadb_data:/var/lib/mysql
36
37 redis:
38 image: redis:7-alpine
39 container_name: photoprism-redis
40 restart: unless-stopped
41
42volumes:
43 photoprism_storage:
44 mariadb_data:
45EOF
46
47# 2. Create the .env file
48cat > .env << 'EOF'
49# PhotoPrism
50PHOTOPRISM_PORT=2342
51ADMIN_PASSWORD=photoprism_admin
52PHOTOS_PATH=./photos
53DB_PASSWORD=photoprism_db
54DB_ROOT_PASSWORD=root_password
55EOF
56
57# 3. Start the services
58docker compose up -d
59
60# 4. View logs
61docker compose logs -f

One-Liner

Run this command to download and set up the recipe in one step:

terminal
1curl -fsSL https://docker.recipes/api/recipes/photoprism-photos-stack/run | bash

Troubleshooting

  • PhotoPrism shows 'database connection failed': Verify MariaDB container is running and MYSQL_PASSWORD matches PHOTOPRISM_DATABASE_PASSWORD in environment variables
  • AI indexing is slow or fails: Increase Docker memory limits as TensorFlow requires substantial RAM for image processing and face recognition
  • Photos not appearing after import: Check that the PHOTOS_PATH directory has proper read permissions and PhotoPrism can access mounted volume
  • Redis connection errors in logs: Ensure Redis container is healthy and PHOTOPRISM_REDIS_HOST points to correct container name
  • Face recognition not working: Verify PhotoPrism has sufficient memory allocation and restart indexing after increasing container resources
  • MariaDB fails to start with 'data directory not empty': Remove mariadb_data volume or ensure consistent MySQL credentials across container restarts

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