$docker.recipes
·12 min read·Updated February 2026

Immich: The Self-Hosted Google Photos Replacement That Actually Works

A hands-on review of Immich after running it for a year — setup, migration from Google Photos, performance, and the features that make it worth the switch.

immichphotosself-hostinggoogle-photosdocker-compose

01I Didn't Think a Google Photos Alternative Could Be This Good

I've tried self-hosted photo solutions before — Photoprism, Lychee, Piwigo — and while they're decent, none of them came close to the Google Photos experience. The mobile upload was clunky, facial recognition was unreliable, and the UIs felt like they were designed in 2010. Then I tried Immich. Within a week, I had migrated 80,000 photos from Google Photos, and within a month, my entire family had switched over. It's fast, the mobile app is polished, and features like facial recognition, location-based browsing, and shared albums actually work well. After running it for over a year, Immich is the self-hosted service I recommend most enthusiastically. Here's an honest review — including the rough edges.

02Docker Compose Setup

Immich requires several containers: the server, microservices (for ML processing), a PostgreSQL database with the pgvecto.rs extension, and Redis for caching. The official docker-compose.yml handles all of this:
[docker-compose.yml]
1services:
2 immich-server:
3 image: ghcr.io/immich-app/immich-server:release
4 restart: unless-stopped
5 volumes:
6 - ${UPLOAD_LOCATION}:/usr/src/app/upload
7 env_file:
8 - .env
9 depends_on:
10 - redis
11 - database
12 ports:
13 - "2283:2283"
14
15 immich-machine-learning:
16 image: ghcr.io/immich-app/immich-machine-learning:release
17 restart: unless-stopped
18 volumes:
19 - model-cache:/cache
20 env_file:
21 - .env
22
23 redis:
24 image: redis:7-alpine
25 restart: unless-stopped
26 healthcheck:
27 test: redis-cli ping || exit 1
28
29 database:
30 image: tensorchord/pgvecto-rs:pg16-v0.2.1
31 restart: unless-stopped
32 volumes:
33 - pgdata:/var/lib/postgresql/data
34 env_file:
35 - .env
36
37volumes:
38 pgdata:
39 model-cache:

Set UPLOAD_LOCATION to a path with plenty of storage. Photos and videos add up fast — my family's library is about 200GB. Use an external drive or NAS mount if your boot drive is limited.

03Migrating from Google Photos

Immich has a dedicated CLI tool for importing from Google Takeout: 1. Request a Google Takeout of your Google Photos data (this can take hours to days depending on library size) 2. Download and extract the archives 3. Use the immich-cli tool to upload everything while preserving metadata The CLI handles the tricky parts: matching JSON metadata files to their corresponding images, preserving creation dates, and handling duplicates. My 80,000-photo migration took about 6 hours over a local network. After migration, the ML service processes your library for facial recognition, object detection, and CLIP-based smart search. This runs in the background and can take several days for large libraries — let it work through the backlog and don't worry about the CPU usage.

04Day-to-Day Experience

What works well: The mobile app (iOS and Android) handles auto-upload reliably. It uploads over WiFi in the background, exactly like Google Photos. The web interface is fast and responsive. Facial recognition groups people accurately after you identify a few faces. The map view and timeline view work just like you'd expect. Smart search is surprisingly good. You can search for "dog on beach" or "birthday cake" and it returns relevant results using CLIP embeddings. It's not quite Google-level, but it's far better than filename-based search. What needs improvement: Shared album management is basic compared to Google Photos. There's no "partner sharing" feature that automatically shares a subset of your library. The AI features require decent hardware — expect the ML container to use 2-4GB of RAM. And the project moves fast, so updates sometimes require database migrations that can take time. Despite the rough edges, Immich has replaced Google Photos for my entire family. The peace of mind of knowing our photos live on our own hardware, backed up to our own offsite storage, is worth the setup effort. Check out our media recipes for the complete Immich configuration and other photo management solutions.

About the Author

Frank Pegasus

DevOps engineer and self-hosting enthusiast with over a decade of experience running containerized workloads in production. Creator of docker.recipes.