Immich

High-performance self-hosted photo and video backup

Photo Management ★ 114.8k stars Medium setup AGPL-3.0

Immich is a high-performance, self-hosted photo and video backup solution with mobile apps, AI search, and face recognition. It targets users wanting a private Google Photos alternative. It is deployed via Docker Compose.

Immich setup guides & articles

Hands-on coverage of Immich from the blog.

Key features

  • Automatic phone backup
  • AI-powered search and face recognition
  • Timeline and album views
  • Multi-user with sharing

Quick deploy

A starting point for self-hosting Immich - check the official docs for the full set of options.

  • Web port 2283

Watch out for

  • Use the docker-compose.yml and .env shipped with each release - the stack (server, machine learning, Postgres with vector extension, Redis) changes between versions
  • Pin IMMICH_VERSION instead of latest, and read the release notes before upgrading - breaking changes are frequent

Reverse proxy: Raise the proxy's client body size limit or large photo and video uploads fail.

Pros & cons

Strengths

  • Excellent mobile apps
  • Fast and feature-rich
  • Very active development

Trade-offs

  • Resource intensive
  • Breaking changes still occur

Immich replaces

Last reviewed Aug 22, 2026 · 802 words

Immich is the best self-hosted Google Photos replacement you can run today, and the most demanding one. Plan for 4 GB of RAM, pin your version, and treat the database with respect, and it will quietly back up every photo your household takes. Skip those three things and you will eventually be restoring from backup — or worse, not restoring, because you never took one.

How much hardware does Immich actually need?

The catalogue lists 2 GB as the minimum, and that is a true minimum, not a recommendation. The stack is four containers: the server, a machine-learning service, PostgreSQL with a vector extension, and Redis. On 2 GB the ML container will get OOM-killed during the first big import. My working numbers, from running it for a family of four with roughly 90,000 assets:

LoadRAMCPUNotes
Idle, library indexed~1.5 GB~0%Postgres and Redis are most of it
Initial import + ML3.5–4.5 GBall coresFace detection and CLIP embedding, hours to days
Steady state, nightly backups~2 GBbrief spikesPhone uploads at 2 a.m.

Any Intel mini PC from the last eight years handles this. A Raspberry Pi 4 technically works but the initial ML pass over a large library can take days. Storage is the real cost: budget your current photo library size plus 30% a year, on a disk you can grow.

Use the official compose file, not a copied one

Immich is unusual among self-hosted apps: the compose stack changes between releases. The Postgres image, the ML service, and environment variables have all shifted over the project's life. Download the docker-compose.yml and .env that ship with each release from the official install docs instead of reusing one from a blog post or an old deployment.

Two lines in .env matter more than the rest:

# pin the release - never use latest for Immich
IMMICH_VERSION=v1.135.0
# on a disk with room to grow
UPLOAD_LOCATION=/srv/immich/library

Pinning matters because Immich still ships breaking changes. The project is honest about this — release notes flag them clearly — but latest plus an automated puller like Watchtower is how people end up with a server that will not start at 7 a.m. Read the notes, then bump the pin. Once a month is a fine cadence; my longer thoughts on that workflow are in container updates without fires.

The settings that separate a demo from a daily driver

  • Set the upload size limit on your reverse proxy. Immich accepts multi-gigabyte videos; a default nginx client_max_body_size of 1 MB fails every phone video silently. 5000 MB is a sane ceiling.
  • Turn on the storage template (Settings → Storage Template) before importing, so originals land in YYYY/MM folders. Your library stays legible outside Immich, which matters the day you migrate away.
  • Create one user per person, not one shared login. Partner-sharing and face recognition both work better, and you can see whose phone stopped backing up.
  • Leave the ML service enabled even on weak hardware. Smart search ("beach 2019", "receipts") is the single feature that makes Immich feel like Google Photos rather than a folder of files.

Backups: the database and the files are one unit

Immich's originals live on disk, but albums, faces, edits, and users live in Postgres. Backing up one without the other gives you a pile of files and no library. Nightly, in this order: pg_dumpall from the database container, then the upload location, off the machine. The 3-2-1 backup approach applies with no modifications, and the phone is not a backup — once the app confirms upload, many people delete local copies, which makes your server the only copy on earth.

Who should pick something else

If your hardware tops out at 2 GB of RAM, or you want an install you never think about, PhotoPrism indexes an existing folder structure without demanding a multi-container stack, and the full trade-offs are in our Immich vs PhotoPrism comparison. If you only want photo files synced off your phone and no web timeline at all, Syncthing does that with 128 MB of RAM.

What I'd do

Buy a used mini PC with 8 GB of RAM and a 2 TB SSD, install the official compose stack with the version pinned, set the storage template, and point every phone in the house at it the same evening. Schedule the Postgres dump before you import your first photo, not after. Immich rewards exactly one thing: treating it like the primary copy of your family's memories, because that is what it becomes.

Compare Immich

21 head-to-head comparisons.

Similar photo management apps