I had 11 years and ~47,000 photos in Google Photos. The free unlimited storage ended in 2021, and since then I’ve been paying for Google One storage while quietly uncomfortable with the fact that a company is training models on my family photos.
So I moved everything to Immich — an open-source, self-hosted photo management platform. The short version: it worked, it’s fast, and I haven’t looked back.
Why Immich
I evaluated a few alternatives before landing on Immich:
- PhotoPrism — excellent but slow on CPU-only hardware; face recognition requires GPU for reasonable speed
- Piwigo — mature but feels dated; no mobile-first design
- Nextcloud Photos — works, but Nextcloud’s overhead is significant if photos are all you want
- Immich — fast, actively developed, great mobile apps, face recognition that actually works, memories feature
Immich is still in active development (they’re transparent about the pre-1.0 status), but I’ve found it stable enough for a photo library. The development velocity is impressive.
The Stack
# docker-compose.yml (simplified)
services:
immich-server:
image: ghcr.io/immich-app/immich-server:release
volumes:
- ${UPLOAD_LOCATION}:/usr/src/app/upload
- /etc/localtime:/etc/localtime:ro
env_file: .env
ports:
- 2283:2283
depends_on:
- redis
- database
immich-machine-learning:
image: ghcr.io/immich-app/immich-machine-learning:release
volumes:
- model-cache:/cache
env_file: .env
redis:
image: redis:6.2-alpine
database:
image: tensorchord/pgvecto-rs:pg14-v0.2.0
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_USER: ${DB_USERNAME}
POSTGRES_DB: ${DB_DATABASE_NAME}
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
model-cache:
pgdata:
The machine-learning container handles face recognition and CLIP-based search (semantic search by description — genuinely impressive). It’s CPU-only on my hardware but runs offline during quiet periods.
Migration from Google Photos
Google Takeout exports your library as a set of zip files. The catch: metadata (dates, GPS coordinates) is stored in separate .json sidecar files, not in the image EXIF data.
The Google Photos Takeout Helper CLI tool (gpth) processes this correctly and reorganizes the dump into a clean folder structure with metadata applied. Run it before importing to Immich.
# Install
pip install gpth
# Process the Takeout dump
gpth --input ./takeout-folder --output ./photos-clean
Then import to Immich:
- In Immich admin, set up an External Library pointing to the processed folder
- Run the scan job
- Photos appear with correct dates and locations
For 47,000 photos this took about 90 minutes to index and several hours overnight for the ML processing (face clustering, CLIP embeddings).
What Surprised Me
Search is genuinely good. Immich uses CLIP embeddings so you can search “beach sunset” and it finds relevant photos even with no tags. This works better than I expected on CPU.
The mobile apps are polished. Both iOS and Android apps auto-backup and feel native. The timeline view is smooth. It doesn’t feel like self-hosted software in the way that some projects do.
Memories work. The “On this day” feature surfaces photos from past years the same way Google Photos does. This was the feature I was most worried about losing.
What I Had to Accept
No sharing ecosystem. Google Photos’ shared albums with non-technical family members are hard to replicate. I share albums via Immich’s shareable links now, which work, but it’s not as seamless.
Maintenance overhead. Updates come frequently. I run Watchtower to handle automatic container updates, but you should review changelogs before blindly applying them to a photo library.
ML processing is slow without GPU. Face clustering for 47K photos ran overnight. It’s a one-time cost, but worth knowing.
Storage
My photos live on a 2TB external SSD connected to the Proxmox host, passed through to the Docker host as an NFS mount. I also have a nightly rclone job syncing to Backblaze B2 for offsite backup.
The 3-2-1 rule: 3 copies, 2 different media types, 1 offsite. Self-hosting doesn’t mean no backups.
Would I Go Back to Google Photos?
No. The combination of Immich’s features, the privacy improvement, and the cost saving (eliminating the Google One subscription) makes this clearly worth the setup time.
The setup took a Saturday. The migration took overnight. The maintenance overhead is one container update every few weeks.
For a photo library this personal, owning the infrastructure is worth it.