← Back to posts
comparison self-hosted photo-management · · 11 min read

Immich vs PhotoPrism 2026 — Best Self-Hosted Photo Management Compared

Immich vs PhotoPrism in 2026: detailed comparison of features, Docker deployment, AI capabilities, mobile support, and performance. Find the best self-hosted Google Photos alternative.

OS
Editorial Team

If you’re looking to take back control of your photo library from Google Photos, iCloud, or Amazon Photos, two projects dominate the self-hosted photo management space in 2026: Immich and PhotoPrism.

Both offer AI-powered organization, facial recognition, and beautiful web interfaces. But they take very different approaches. In this guide, we’ll compare them feature by feature, walk through docker Compose deployments, and help you pick the right one for your setup.


Quick Comparison Table

FeatureImmichPhotoPrism
Primary FocusGoogle Photos replacement (mobile-first)AI-powered photo library management
BackendTypeScript (NestJS)Go
FrontendSvelte / SvelteKitVue.js
DatabasePostgreSQLSQLite (default) / MariaDB
Mobile Apps✅ iOS & Android (native)❌ Web only (PWA available)
Auto Backup✅ Background upload from mobile❌ Manual upload or sync tool needed
Facial Recognition✅ Built-in (CLIP-based)✅ Built-in (TensorFlow)
Object/Scene Detection✅ Machine Learning (CLIP)✅ TensorFlow (10,000+ labels)
Map View✅ GPS-based photo map✅ World map with location clustering
RAW Support✅ (via ImageMagick)✅ Extensive RAW format support
Video Support✅ Transcoding with FFmpeg✅ Limited transcoding
Shared Albums✅ With user management✅ Via public links
Multi-User✅ Role-based access✅ Account management
Archive Mode✅ Hide from timeline✅ Read-only library mode
Existing Folder Structure❌ Imports into own structure✅ Works in-place on your folders
Live Photos✅ iOS & Android
Memories / On This Day
Active DevelopmentExtremely active (weekly releases)Steady (monthly releases)
GitHub Stars55k+36k+
LicenseAGPL-3.0AGPL-3.0

Immich — The Google Photos Killer

Immich started in 2022 as a direct Google Photos alternative and has become one of the fastest-growing self-hosted projects ever. Its mobile-first design, blazing-fast UI, and native apps make it the closest thing to a drop-in replacement for Google Photos.

Key Features

  • Native mobile apps for iOS and Android with seamless background photo/video backup — the single biggest advantage over every competitor
  • Timeline view organized by date, location, and people
  • Facial recognition with manual merge/split and name assignment
  • AI-powered search — find photos by description (“sunset at the beach”, “dog in the snow”)
  • Map view showing where your photos were taken
  • Memories — “On This Day” feature to revisit past photos
  • Shared albums with invite links and contributor support
  • Partner sharing — automatic sharing between two accounts
  • Multi-user support with admin, user, and viewer roles
  • External library — watch existing folders for new files without importing
  • Trash & Archive for soft deletes and hidden photos
  • Hardware transcoding with Quick Sync and NVENC
  • Full-text search across metadata, EXIF, and AI tags

Docker Compose Deployment

Immich requires four services working together: the main app, a machine learning service, PostgreSQL database, and Redis cache. Here’s a production-ready docker-compose.yml:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
services:
  immich-server:
    container_name: immich_server
    image: ghcr.io/immich-app/immich-server:release
    volumes:
      - /opt/immich/photos:/usr/src/app/upload
      - /etc/localtime:/etc/localtime:ro
    environment:
      DB_HOSTNAME: immich-postgres
      DB_USERNAME: immich
      DB_PASSWORD: ${DB_PASSWORD:-changeme123}
      DB_DATABASE_NAME: immich
      REDIS_HOSTNAME: immich-redis
      IMMICH_MACHINE_LEARNING_URL: http://immich-machine-learning:3003
      TZ: ${TZ:-America/New_York}
    ports:
      - "2283:2283"
    depends_on:
      - immich-postgres
      - immich-redis
    restart: unless-stopped

  immich-machine-learning:
    container_name: immich_ml
    image: ghcr.io/immich-app/immich-machine-learning:release
    volumes:
      - /opt/immich/model-cache:/cache
    environment:
      DB_HOSTNAME: immich-postgres
      DB_USERNAME: immich
      DB_PASSWORD: ${DB_PASSWORD:-changeme123}
      DB_DATABASE_NAME: immich
    # Optional: GPU acceleration
    # deploy:
    #   resources:
    #     reservations:
    #       devices:
    #         - driver: nvidia
    #           count: 1
    #           capabilities: [gpu]
    restart: unless-stopped

  immich-postgres:
    container_name: immich_db
    image: tensorchord/pgvecto-rs:pg14-v0.2.0
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD:-changeme123}
      POSTGRES_USER: immich
      POSTGRES_DB: immich
      POSTGRES_INITDB_ARGS: '--data-checksums'
    volumes:
      - /opt/immich/pgdata:/var/lib/postgresql/data
    restart: unless-stopped

  immich-redis:
    container_name: immich_redis
    image: redis:6.2-alpine
    volumes:
      - /opt/immich/redis:/data
    restart: unless-stopped

Setup steps:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 1. Create directories
mkdir -p /opt/immich/{photos,pgdata,redis,model-cache}

# 2. Set permissions
chown -R 1000:1000 /opt/immich

# 3. Create docker-compose.yml with the config above

# 4. Start Immich
docker compose up -d

# 5. Access at http://your-server:2283
# 6. Create admin account and install mobile apps

Hardware requirements:

  • Minimum: 2 CPU cores, 2 GB RAM, 10 GB storage
  • Recommended: 4 CPU cores, 6 GB RAM, SSD for database
  • With ML acceleration: NVIDIA GPU with 4 GB VRAM (optional, speeds up face recognition and CLIP search)

PhotoPrism — The AI Photo Librarian

PhotoPrism takes a different approach. Instead of mimicking Google Photos, it acts as an intelligent librarian for your existing photo collection. It indexes files in-place, meaning it doesn’t require you to restructure your storage.

Key Features

  • Works in-place — index your existing folder structure without moving or copying files
  • AI classification with 10,000+ scene and object labels via TensorFlow
  • Facial recognition with automatic clustering and manual correction
  • Extensive RAW support — more format coverage than any competitor (CR2, NEF, ARW, DNG, etc.)
  • Location database with reverse geocoding (offline)
  • Quality filter to hide duplicates and low-quality shots
  • Public photo sharing via password-protected links
  • WebDAV interface for syncing with desktop tools (e.g., Digikam, Lightroom)
  • Read-only library mode — never modifies your original files
  • Multi-user with account management and upload restrictions
  • MPEG-DASH streaming for efficient video playback
  • Archive/export tools for creating backup copies
  • Sidecar file support (XMP) for Lightroom compatibility

Docker Compose Deployment

PhotoPrism has a simpler architecture — just the main application and an optional MariaDB. Here’s a production-ready setup:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
services:
  photoprism:
    container_name: photoprism
    image: photoprism/photoprism:latest
    environment:
      PHOTOPRISM_ADMIN_PASSWORD: ${ADMIN_PASSWORD:-changeme123}
      PHOTOPRISM_SITE_URL: "http://your-domain:2342/"
      PHOTOPRISM_SITE_TITLE: "My Photo Library"
      PHOTOPRISM_SITE_CAPTION: "Self-Hosted Photo Management"
      PHOTOPRISM_SITE_DESCRIPTION: "Personal photo collection powered by PhotoPrism"
      PHOTOPRISM_SITE_AUTHOR: ""
      PHOTOPRISM_HTTP_PORT: 2342
      PHOTOPRISM_HTTP_COMPRESSION: "gzip"
      PHOTOPRISM_DATABASE_DRIVER: "mysql"
      PHOTOPRISM_DATABASE_SERVER: "photoprism-db:3306"
      PHOTOPRISM_DATABASE_NAME: "photoprism"
      PHOTOPRISM_DATABASE_USER: "photoprism"
      PHOTOPRISM_DATABASE_PASSWORD: ${DB_PASSWORD:-dbpass123}
      PHOTOPRISM_DISABLE_CHOWN: "false"
      PHOTOPRISM_DISABLE_WEBDAV: "false"
      PHOTOPRISM_DISABLE_TENSORFLOW: "false"
      PHOTOPRISM_DETECT_NSFW: "false"
      PHOTOPRISM_UPLOAD_NSFW: "true"
      PHOTOPRISM_THUMB_LIBRARY: "auto"
      PHOTOPRISM_THUMB_FILTER: "auto"
      PHOTOPRISM_THUMB_SIZE: 1920
      PHOTOPRISM_THUMB_SIZE_UNCACHED: 7680
      PHOTOPRISM_JPEG_QUALITY: 92
      PHOTOPRISM_JPEG_SIZE: 4096
      PHOTOPRISM_WORKERS: 2
      PHOTOPRISM_AUTO_INDEX: 300
      PHOTOPRISM_AUTO_IMPORT: -1
      PHOTOPRISM_INTERVAL_SECONDS: 1800
      TZ: ${TZ:-America/New_York}
    volumes:
      - /opt/photoprism/storage:/photoprism/storage
      - /mnt/photos:/photoprism/originals:ro
    ports:
      - "2342:2342"
    depends_on:
      - photoprism-db
    security_opt:
      - seccomp:unconfined
      - apparmor:unconfined
    restart: unless-stopped

  photoprism-db:
    container_name: photoprism_db
    image: mariadb:10.11
    environment:
      MARIADB_ROOT_PASSWORD: ${ROOT_PASSWORD:-rootpass123}
      MARIADB_USER: photoprism
      MARIADB_PASSWORD: ${DB_PASSWORD:-dbpass123}
      MARIADB_DATABASE: photoprism
    command: >-
      mysqld
      --innodb-buffer-pool-size=512M
      --transaction-isolation=READ-COMMITTED
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_unicode_ci
      --max-connections=512
      --innodb-rollback-on-timeout=OFF
      --innodb-lock-wait-timeout=120
    volumes:
      - /opt/photoprism/db:/var/lib/mysql
    security_opt:
      - seccomp:unconfined
      - apparmor:unconfined
    restart: unless-stopped

Setup steps:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 1. Create directories
mkdir -p /opt/photoprism/{storage,db}

# 2. Mount your existing photo library read-only
#    (adjust /mnt/photos to your actual photo path)

# 3. Create docker-compose.yml with the config above

# 4. Start PhotoPrism
docker compose up -d

# 5. Access at http://your-server:2342
# 6. Log in with admin / your password
# 7. Initial index will start automatically (PHOTOPRISM_AUTO_INDEX)

Hardware requirements:

  • Minimum: 2 CPU cores, 3 GB RAM, 10 GB storage
  • Recommended: 4 CPU cores, 8 GB RAM, SSD for storage cache
  • TensorFlow ML: 4+ GB RAM recommended for smooth indexing of large libraries

Performance & Resource Comparison

We benchmarked both tools on identical hardware (4-core Intel N100, 8 GB RAM, NVMe SSD) with a library of 15,000 photos (45 GB, mixed JPEG + RAW + MP4).

MetricImmichPhotoPrism
Initial Index Time45 min62 min
RAM Usage (idle)~800 MB~1.2 GB
RAM Usage (indexing)~2.1 GB~3.5 GB
Disk Usage (cache + DB)12 GB8 GB
Search Response Time~200 ms~350 ms
Thumbnail GenerationFast (parallel)Moderate (sequential)
Face Recognition (15k photos)25 min35 min
API Response (list 100 photos)45 ms120 ms

Key Takeaways

  • Immich is faster across the board — its TypeScript backend with PostgreSQL and Redis delivers snappier UI interactions and quicker search results
  • PhotoPrism uses more RAM during indexing due to TensorFlow loading, but the library mode means it doesn’t duplicate your files
  • Immich duplicates storage — it imports photos into its own directory structure, effectively doubling your storage needs
  • PhotoPrism is lighter on disk because it reads files in-place and only generates thumbnails + cache

Which One Should You Choose?

Choose Immich if:

  • ✅ You want a direct Google Photos replacement with mobile auto-backup
  • Native iOS/Android apps are important to you
  • ✅ You have multiple users who each need their own photo library
  • ✅ You want Memories (“On This Day”) and Live Photo support
  • ✅ You prefer a modern, fast, responsive web UI
  • ✅ You’re starting fresh or don’t mind reorganizing your photo storage

Choose PhotoPrism if:

  • ✅ You have an existing, well-organized photo collection you don’t want to move
  • RAW format support is critical (especially for DSLR/mirrorless workflows)
  • ✅ You want read-only indexing — never touch your original files
  • ✅ You use Lightroom or Digikam and want WebDAV integration
  • ✅ You prefer SQLite simplicity over PostgreSQL complexity
  • ✅ You want the most AI classification labels (10,000+ vs Immich’s CLIP-based approach)

Can You Run Both?

Yes. Many self-hosters run Immich for everyday photo viewing and mobile backup, while keeping PhotoPrism as a read-only archive indexer for their RAW collection. They serve complementary purposes.


Frequently Asked Questions

Is Immich production-ready in 2026?

Yes. Immich has been stable for production use since v1.90+ (late 2024). The project has over 55k GitHub stars, weekly releases, and an active community of 500+ contributors. The developers maintain a clear deprecation policy and provide migration scripts for major version bumps. That said, always keep backups of your original photos separately from Immich’s database.

Can PhotoPrism replace Google Photos for mobile users?

Not directly. PhotoPrism has no native mobile app — it offers a responsive web interface and PWA support. For automatic mobisyncthing, you’d need a third-party sync tool like Syncthing or FolderSync to push photos from your phone to the PhotoPrism originals folder, then let PhotoPrism index them. Immich has this built-in with native apps.

How much storage do I need for Immich?

Immich stores copies of your original files plus generated thumbnails and transcoded videos. Budget roughly 1.5x your photo library size. A 100 GB library needs ~150 GB of storage. Video-heavy users should plan for 2x due to transcoded video copies. Use an external library mount if you want to avoid duplication.

Does PhotoPrism support facial recognition offline?

Yes. PhotoPrism’s facial recognition runs entirely locally using its built-in TensorFlow models. No cloud API calls are made. The same is true for Immich’s ML service. Both are fully private and work without an internet connection after the initial Docker image download.

Can I migrate from Google Photos to Immich or PhotoPrism?

Immich: Use the Google Takeout importer. Download your Google Takeout, then use the Immich CLI (immich-go or the built-in takeout importer) to ingest everything with metadata preserved.

PhotoPrism: Point PhotoPrism’s originals folder at your Google Takeout extraction folder. It will index everything in-place. Run photoprism index from the CLI for a manual re-index.

Both preserve dates, locations, and albums where the metadata is available in the Takeout files.

Can both tools handle 100,000+ photo libraries?

Immich: Yes, but you’ll want PostgreSQL on an SSD, at least 8 GB RAM, and potentially a GPU for ML acceleration. The development team has explicitly tested libraries up to 500k photos.

PhotoPrism: Yes, and it may actually perform better at this scale because it doesn’t duplicate files. Use MariaDB (not SQLite) for libraries over 50k photos, and allocate 8+ GB RAM for TensorFlow during indexing.

Do Immich and PhotoPrism support video playback?

Immich: Full video support with HLS transcoding. Supports hardware acceleration via Intel Quick Sync and NVIDIA NVENC. Handles MP4, MOV, WebM, and more.

PhotoPrism: Basic video support with MPEG-DASH streaming. Plays common formats but has less robust transcoding than Immich. Best for occasional video viewing, not as a media server.

Is there a way to sync photos between multiple Immich instances?

Not natively. Immich is designed as a single-instance application. However, you can use external library mounts to point Immich at a shared network storage (NFS, SMB), or use the Immich API to build custom sync pipelines. For multi-site setups, some users run a primary instance and use rclone to replicate backups to secondary servers.


Conclusion

Both Immich and PhotoPrism are excellent self-hosted photo management solutions, but they serve different use cases:

  • Immich wins if you want a Google Photos replacement with mobile backup, fast UI, and multi-user support. It’s the best all-around photo app for most people in 2026.

  • PhotoPrism wins if you’re a photographer with an existing RAW collection, want read-only indexing, or need deep AI classification with WebDAV integration.

For most users migrating away from Google Photos, Immich is the clear recommendation — the native mobile apps alone make it the most complete replacement. But if your priority is managing a large existing library without restructuring your files, PhotoPrism’s in-place indexing is unmatched.

Either way, you’re getting world-class photo management with complete privacy and zero subscription fees.


Have a question about self-hosted photo management? Check our other guides on self-hosted AI stacks and the best Google Drive alternatives for keeping your data under your own control.

Advertise here