Immich is a leading open-source option for: Google Photos–style backup, albums, and search on hardware you control.
Update (July 3, 2026):Immich 3.0 shipped — mobile editing, workflows, integrity checks, HLS preview. HN cost + E2EE debate + bgblur.com face privacy in our companion post.
The immich-app/immich monorepo combines a server API, web UI, Flutter mobile apps, and a machine-learning stack for faces, objects, and CLIP-style search—aimed at people who will trade vendor convenience for ops responsibility.
Below is a concise overview, not a substitute for docs.immich.app.
Mobile backup stalls. Check TLS certificate validity, server URL reachability from cellular (not just Wi‑Fi), and background app refresh permissions on iOS. Immich logs on the server show upload queue depth—spikes after vacations are normal; persistent zero progress often means cert or DNS issues.
ML search returns nothing. Face and CLIP indexing runs asynchronously. Confirm the ML container is healthy, disk has space for embeddings, and you waited through initial backfill. Large libraries may need days on CPU-only hosts.
Database migration fails on upgrade. Stop writes, restore DB from pre-upgrade snapshot, read GitHub issues for the target release, and retry on a staging clone first. Never delete library/ when DB restore is the fix.
Slow web UI on NAS. Spinning rust for Postgres or thumbnail cache hurts; move hot paths to SSD or reduce concurrent ML jobs during peak browsing.
Partner sharing confusion. Shared albums and partner libraries have different permission models—read docs.immich.app for current behavior before onboarding non-technical family members.
TL;DR
Question
Short answer
What?
Self-hosted photo/video library: mobile backup, web gallery, albums, map, faces, smart search
License
AGPL-3.0—read before commercial hosting or forking for networked services
Stack
NestJS server (per repo), SvelteKit web, Flutter mobile, ML container for models
Deploy
Docker-style stacks documented upstream (Postgres, Redis, ML service—see docs)
Library: albums, shared albums, partner sharing, public links, archive, favorites, stacked photos, folder view.
Discovery: timeline, global map, “memories” (on-this-day style).
Search: metadata; object/scene; facial recognition and clustering; CLIP semantic search where ML indexing is enabled.
Admin: user management and API keys are web-first in their table; mobile vs web parity for tags and some views varies—check the current matrix before promising stakeholders.
Why the architecture matters for capacity
Immich splits responsibilities like a modern cloud product, but you run every tier:
Core API — auth, libraries, jobs, storage layout.
Clients — web and mobile talk to the same API.
Machine learning — heavy inference (faces, embeddings, detection) off the interactive path.
Planning is not only disk: large libraries need CPU (or GPU, depending on how you run ML) for thumbnails, transcodes, and background ML queues—profile on your hardware.
Hardware sizing (rule of thumb)
Library size
Storage
CPU/RAM notes
Under 100 GB
SSD strongly preferred for Postgres + originals
4 vCPU, 8 GB RAM often sufficient for a household
100 GB – 1 TB
Dedicated volume for library/; monitor inode usage
8 vCPU helps ML backfill; schedule indexing off-peak
> 1 TB
Plan cold storage tier or NAS mount; snapshot DB separately
GPU optional for ML service; watch queue depth on first import
Immich’s ML pipeline (faces, CLIP embeddings, object detection) is asynchronous—initial import of a large iPhone camera roll can take hours to days depending on hardware. Set expectations with stakeholders before flipping DNS.
Clone or pin the release tag from immich-app/immich releases—do not run latest in production without a rollback plan.
Configure .env — set UPLOAD_LOCATION, database credentials, and public IMMICH_SERVER_URL for mobile clients.
Bring up Postgres, Redis, server, ML, and microservices per the compose file version you pinned.
Create admin user via web UI on first launch.
Install mobile apps (iOS/Android) and point them at your HTTPS endpoint—TLS is non-negotiable for background backup on modern OSes.
Run a test restore from backup before trusting irreplaceable photos to the stack.
bash
# Illustrative — follow upstream compose for exact service names
git clone https://github.com/immich-app/immich.git
cd immich
git checkout v1.x.x # pin a release tag
docker compose -f docker/docker-compose.yml up -d
Immich vs Google Photos vs PhotoPrism
Dimension
Immich
Google Photos
PhotoPrism
Hosting
Self-hosted
Google cloud
Self-hosted
Mobile backup
Native apps
Native apps
Limited / web-first
ML search
Faces, CLIP, objects
Google ML
Tags, places, faces
License
AGPL-3.0
Proprietary
AGPL-3.0
Ops burden
You
Google
You
Cost model
Hardware + power
Subscription / storage fees
Hardware + power
Choose Immich when mobile backup + gallery UX matter as much as privacy. PhotoPrism remains strong for web-centric archives and DAM-style workflows; many homelabbers run both for different libraries.
Backup: the 3-2-1 rule (non-optional)
The upstream README is explicit: photos are irreplaceable. A workable homelab plan:
3 copies — live library on NAS, nightly rsync/restic to external USB, quarterly off-site copy (friend’s vault, S3 Glacier, Backblaze B2).
2 media types — SSD/NAS + external HDD or cloud object storage.
1 off-site — encrypted tarball or restic repo outside your home.
Snapshot Postgres (pg_dump or volume snapshots) with file storage—Immich metadata lives in the DB; files alone are not a restore.
Test restores quarterly. A backup you have never restored is a hypothesis.
Mobile backup workflow
Install Immich from App Store / Play Store.
Connect to your server URL (must be HTTPS with valid cert for reliable background sync).
Enable auto-backup for camera roll; exclude screenshots if desired.
Verify deduplication on a test album before enabling for the whole family.
Monitor server disk—mobile backup is write-heavy during vacations and holidays.
Partner sharing and shared albums work well for families; document who owns the server admin account and who can delete libraries.
AGPL-3 in practice
AGPL-3 can impose source-sharing obligations when you modify the app and let users interact over the network. Most homelabs running upstream images unmodified have a different risk profile than hostingproviders or white-label products. Get legal review before betting a business on a fork or a re-skinned multi-tenant Immich.
Upgrade and maintenance cadence
Immich ships frequently. A sane ops rhythm:
Pin Docker image tags; read release notes before bumping.
Backup DB + library immediately before upgrades.
Stage upgrades on a clone volume when libraries exceed 500 GB.
Subscribe to GitHub security advisories for the monorepo.
Breaking changes occasionally affect ML re-indexing—budget time for background jobs to catch up after major version jumps.
Security hardening
Control
Recommendation
TLS
Reverse proxy (Caddy, Traefik, nginx) with valid certs
Auth
Strong admin password; disable public registration unless needed
Network
VPN or Tailscale for admin UI; do not expose Postgres/Redis
Secrets
.env outside git; rotate API keys for mobile clients
Updates
Track CVEs; Immich is AGPL but still needs patch discipline
Self-hosting shifts security ownership to you—Immich does not replace WAF, IDS, or SOC monitoring.
FUTO and project governance
Immich’s public site references FUTO (futo.org) for sponsorship and merchandise. That funding context matters for long-term maintenance expectations—not for day-one install steps. Monitor project velocity on GitHub (contributors, release cadence) the same way you would any critical infra dependency.
Immich delivers Google Photos–class backup, search, and sharing on hardware you control—at the cost of ops, backups, and AGPL awareness. Pin releases, run 3-2-1 backups, size CPU for ML queues, and treat the docs as canonical for install and upgrade steps.
Start path: Docker compose from a pinned release → HTTPS reverse proxy → mobile apps pointed at your domain → test restore before migrating family libraries.
For a broader self-hosted stack map, see Sim Studio agent workflows and MCP for tool integration—Immich itself does not ship MCP, but homelab operators often run both photo libraries and agent infra on the same NAS.
Migration from Google Photos
There is no official one-click import from Google Takeout to Immich that preserves every album edge case. Practical migration:
Export via Google Takeout (original quality if storage allows).
Import into Immich via CLI or web upload in batches by year to throttle ML indexing.
Re-create shared albums manually; permissions do not map 1:1.
Keep Google subscription until verify Immich backup restore on a test device.
Expect weeks of background processing for large libraries—communicate to family before canceling Google.
Bottom line: Immich rewards operators who treat photos like production data—backups, pinned releases, and honest capacity planning—not casual Docker experiments.
Next steps: Read docs.immich.app/install, pin a release tag, schedule your first restore drill, then migrate a pilot album before moving the full family library off Google Photos entirely.
Update (July 9, 2026): Google shipped Video Remix in Photos — Gemini Omni stylization for subscribers. No Immich equivalent; another cloud-AI wedge vs self-hosting. Video Remix guide →
GitHub stars, release tags, and feature matrices change often. Treat this as May 5, 2026 context and verify versions before upgrades.