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:release4 restart: unless-stopped5 volumes: 6 - ${UPLOAD_LOCATION}:/usr/src/app/upload7 env_file: 8 - .env9 depends_on: 10 - redis11 - database12 ports: 13 - "2283:2283"1415 immich-machine-learning: 16 image: ghcr.io/immich-app/immich-machine-learning:release17 restart: unless-stopped18 volumes: 19 - model-cache:/cache20 env_file: 21 - .env2223 redis: 24 image: redis:7-alpine25 restart: unless-stopped26 healthcheck: 27 test: redis-cli ping || exit 12829 database: 30 image: tensorchord/pgvecto-rs:pg16-v0.2.131 restart: unless-stopped32 volumes: 33 - pgdata:/var/lib/postgresql/data34 env_file: 35 - .env3637volumes: 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.