Self-host Immich: Google Photos without the subscription — real resource numbers

Published 2026-10-30 · tested on Ubuntu 24.04, Intel Core Ultra 7 255H, Docker 29

TESTED — we actually deployed this

Immich is the self-hosted Google Photos replacement — 115,000+ GitHub stars, mobile apps with automatic backup, face recognition, and ML-powered search (“sunset over water” actually finds your sunset photos). It’s the app that convinced a generation of self-hosters that leaving Google Photos was possible.

It’s also the heaviest thing we’ve deployed in this series. Where Vaultwarden runs in 14 MB and Uptime Kuma in ~150 MB, Immich is a four-container stack that wants gigabytes. We deployed it, uploaded photos, ran the ML search, and measured what it really costs.

What you need (honestly)

Step 1: the official Compose stack

Immich ships its own Compose file — use it rather than hand-rolling:

mkdir immich && cd immich
curl -LO https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
curl -L -o .env https://github.com/immich-app/immich/releases/latest/download/example.env

Edit .env before starting — two changes are non-optional:

# generate a real DB password (alphanumeric only — special chars break it)
DB_PASSWORD=$(openssl rand -hex 16)

# set your timezone or every photo's date will be UTC
TZ=Asia/Kolkata

Also note UPLOAD_LOCATION=./library — point this at your biggest disk; it’s where every photo lives.

docker compose up -d

First start pulled 4.7 GB of images (server 2.44 GB, machine-learning 1.1 GB, Postgres-with-vector-extensions 989 MB, Valkey 180 MB) and took ~2.5 minutes on our connection. Then open http://localhost:2283, create the admin account, and click through onboarding.

What it costs to run (measured)

Container RAM (settled, 5 photos processed) Notes
immich_server 962 MB Peaked at 1.3 GB during initial processing
immich_machine_learning 928 MB ~200 MB idle; balloons when generating embeddings
immich_postgres 465 MB Vector-enabled Postgres (pgvecto.rs/VectorChord)
immich_redis (Valkey) 14 MB
Total working set ~2.4 GB
Other metrics Measured
Images on disk 4.7 GB
Database size (5 photos) 330 MB (ML models + vector indexes dominate)
Upload speed 5 photos (470 KB avg) in 235 ms via API
ML smart search “sunset over water” → correct photo ranked #1, 2.2 s on CPU
Server restart to ready 5 s

The headline: the machine-learning magic is real and runs fine on CPU — but it’s why this stack needs several GB of RAM where a plain photo gallery would need 200 MB. That’s the trade: Google-Photos-grade search, Google-Photos-grade resource bill (except you pay in RAM, not rupees).

Immich timeline showing uploaded photos

Gotchas we hit or verified

When NOT to self-host Immich

What we actually ran this on