Home Lab · · 2 min read
Replacing Google Photos with a self-hosted Immich server
Running Immich for family photo backup with face recognition and smart search — what the architecture looks like, and what owning your data really costs.
Family photos are the one dataset in my house nobody would forgive me for losing. For years they lived in a big-tech cloud. Today they live on my own hardware, in a self-hosted Immich server that does almost everything the commercial services do: automatic phone backup, face recognition, smart search, and private sharing with family.
What is Immich?
Immich is an open-source, self-hosted photo and video platform with mobile apps that back up automatically, a fast web interface, and machine-learning features that run locally. It feels remarkably close to the commercial experience — which is precisely what makes it viable for a whole family, not just the person who set it up.
The architecture
Immich is a good example of a modern, containerised application, deployed with Docker:
- Server — the API and web application.
- Machine-learning service — runs models locally for face detection and recognition, and for semantic “smart search” (search for beach or birthday cake and get results, without tags).
- PostgreSQL — stores metadata, with vector search support for the embeddings behind smart search.
- Redis-compatible queue (Valkey) — for job queues that handle thumbnails, transcoding and ML processing in the background.
The photo library itself lives on my ZFS NAS, so it inherits checksums, snapshots and redundancy.
Local AI, private by design
The part I enjoy most is that the AI features run entirely on my own hardware. Face recognition and semantic search over thousands of family photos, and none of it leaves the house. It’s a small, concrete example of a question I think about a lot in product work: which intelligence needs a frontier model in the cloud, and which can run cheaply and privately at the edge?
What does self-hosting really cost?
Owning your data means owning the operations. Honestly:
- Backups are your job. Both the photo files and the database. Lose the database and you lose albums, faces and metadata even if the files survive.
- Upgrades need care. Fast-moving projects ship breaking changes; read the release notes before pulling new images.
- Remote access needs security. Exposing a family photo server to the internet deserves the same thought as exposing any production service.
- Initial ML indexing is heavy. Processing a large existing library takes time and compute; after that, it’s incremental.
Was it worth it?
Yes — for the privacy, for the lack of a growing monthly subscription, and for what it teaches. Running Immich exercises the same muscles as running production: containers, databases, background jobs, backups, upgrades and security, with users (my family) who notice immediately when something breaks.
The best way to understand the systems you build at work is to be the on-call engineer for the ones you run at home.