docker.recipes

PhotoPrism

intermediate

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:latest
4 container_name: photoprism
5 restart: unless-stopped
6 security_opt:
7 - seccomp:unconfined
8 - apparmor:unconfined
9 ports:
10 - "2342:2342"
11 environment:
12 PHOTOPRISM_ADMIN_USER: admin
13 PHOTOPRISM_ADMIN_PASSWORD: ${ADMIN_PASSWORD}
14 PHOTOPRISM_SITE_URL: "http://localhost:2342/"
15 PHOTOPRISM_DATABASE_DRIVER: mysql
16 PHOTOPRISM_DATABASE_SERVER: mariadb:3306
17 PHOTOPRISM_DATABASE_NAME: photoprism
18 PHOTOPRISM_DATABASE_USER: photoprism
19 PHOTOPRISM_DATABASE_PASSWORD: ${DB_PASSWORD}
20 volumes:
21 - photoprism_originals:/photoprism/originals
22 - photoprism_storage:/photoprism/storage
23 depends_on:
24 - mariadb
25
26 mariadb:
27 image: mariadb:10
28 container_name: photoprism-db
29 restart: unless-stopped
30 environment:
31 MARIADB_ROOT_PASSWORD: ${DB_PASSWORD}
32 MARIADB_DATABASE: photoprism
33 MARIADB_USER: photoprism
34 MARIADB_PASSWORD: ${DB_PASSWORD}
35 volumes:
36 - photoprism_db:/var/lib/mysql
37
38volumes:
39 photoprism_originals:
40 photoprism_storage:
41 photoprism_db:

.env Template

.env
1ADMIN_PASSWORD=changeme
2DB_PASSWORD=changeme

Usage Notes

  1. 1Docs: https://docs.photoprism.app/
  2. 2Access at http://localhost:2342 - login with configured credentials
  3. 3Index library: Library > Complete Scan to process photos
  4. 4AI features (faces, objects, colors) require 4GB+ RAM
  5. 5Mobile upload via PhotoSync (iOS/Android) or WebDAV
  6. 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 file
2cat > docker-compose.yml << 'EOF'
3services:
4 photoprism:
5 image: photoprism/photoprism:latest
6 container_name: photoprism
7 restart: unless-stopped
8 security_opt:
9 - seccomp:unconfined
10 - apparmor:unconfined
11 ports:
12 - "2342:2342"
13 environment:
14 PHOTOPRISM_ADMIN_USER: admin
15 PHOTOPRISM_ADMIN_PASSWORD: ${ADMIN_PASSWORD}
16 PHOTOPRISM_SITE_URL: "http://localhost:2342/"
17 PHOTOPRISM_DATABASE_DRIVER: mysql
18 PHOTOPRISM_DATABASE_SERVER: mariadb:3306
19 PHOTOPRISM_DATABASE_NAME: photoprism
20 PHOTOPRISM_DATABASE_USER: photoprism
21 PHOTOPRISM_DATABASE_PASSWORD: ${DB_PASSWORD}
22 volumes:
23 - photoprism_originals:/photoprism/originals
24 - photoprism_storage:/photoprism/storage
25 depends_on:
26 - mariadb
27
28 mariadb:
29 image: mariadb:10
30 container_name: photoprism-db
31 restart: unless-stopped
32 environment:
33 MARIADB_ROOT_PASSWORD: ${DB_PASSWORD}
34 MARIADB_DATABASE: photoprism
35 MARIADB_USER: photoprism
36 MARIADB_PASSWORD: ${DB_PASSWORD}
37 volumes:
38 - photoprism_db:/var/lib/mysql
39
40volumes:
41 photoprism_originals:
42 photoprism_storage:
43 photoprism_db:
44EOF
45
46# 2. Create the .env file
47cat > .env << 'EOF'
48ADMIN_PASSWORD=changeme
49DB_PASSWORD=changeme
50EOF
51
52# 3. Start the services
53docker compose up -d
54
55# 4. View logs
56docker 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/run | bash

Troubleshooting

  • 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