Immich is a self-hosted open-source alternative to Google Photos featuring face recognition, map view, mobile apps, and automatic backup. Deploy it with Docker and take back ownership of your photos.

You know the drill: you open Google Photos, scroll through your memories, and suddenly get hit with the dreaded "storage full" notification. Or maybe you start wondering what Google is actually doing with your most private moments. That's exactly where Immich comes in, and let me tell you: it's an absolute game-changer for your homelab! πŸš€

What is Immich? πŸ€”

Immich is a self-hosted photo and video management solution that feels like Google Photos, except you have full control over your data. The project is open source, actively developed, and has built a massive community in a short time.

The web interface is modern and intuitive, the mobile apps (Android & iOS) work great, and automatic smartphone backup runs seamlessly in the background. Honestly, my family barely noticed the switch from Google Photos, except that those annoying storage warnings stopped popping up. πŸ˜„

Immich - Self-hosted photo and video management
High performance self-hosted photo and video management solution.

Why Self-Host Your Photos? 🏠

Before we dive into the technical details, let's talk about why you should even consider self-hosting your photos:

  • Privacy: Your photos stay on your server. No AI analysis by third parties, no data mining, no surprises in the terms of service.
  • No Storage Limits: You decide how much space you have. An 8TB hard drive costs less one-time than a few years of Google One.
  • No Vendor Lock-in: Google can raise prices, kill features, or shut down the service entirely. Your self-hosted solution runs as long as you want it to.
  • Full Control: You decide about backups, access, sharing, and how your data is processed.

Setting Up Immich with Docker 🐳

The best thing about Immich: installation is a breeze thanks to Docker. Here's the docker-compose.yml to get you started right away:

name: immich

services:
  immich-server:
    container_name: 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
    restart: always
    healthcheck:
      disable: false

  immich-machine-learning:
    container_name: immich_machine_learning
    image: ghcr.io/immich-app/immich-machine-learning:release
    volumes:
      - model-cache:/cache
    env_file:
      - .env
    restart: always
    healthcheck:
      disable: false

  redis:
    container_name: immich_redis
    image: docker.io/redis:6.2-alpine
    restart: always
    healthcheck:
      test: redis-cli ping || exit 1

  database:
    container_name: immich_postgres
    image: docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_USER: ${DB_USERNAME}
      POSTGRES_DB: ${DB_DATABASE_NAME}
      POSTGRES_INITDB_ARGS: "--data-checksums"
    volumes:
      - ${DB_DATA_LOCATION}:/var/lib/postgresql/data
    restart: always
    healthcheck:
      test: pg_isready --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' || exit 1; Chksum="$$(psql --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' --tuples-only --no-align --command='SELECT COALESCE(SUM(googlechecksum_failures), 0) FROM pg_stat_database')"; echo "googlechecksum failure count is $$Chksum"; [ "$$Chksum" = "0" ] || exit 1
      interval: 5m
      start_interval: 30s
      start_period: 5m

volumes:
  model-cache:

You'll also need a .env file in the same directory:

# Immich .env configuration
UPLOAD_LOCATION=./library
DB_DATA_LOCATION=./postgres
DB_PASSWORD=your-secure-password
DB_USERNAME=postgres
DB_DATABASE_NAME=immich

Then simply run:

docker compose up -d

And just like that, Immich is running at http://your-server:2283. On first access, you'll create an admin account and can start uploading right away! πŸŽ‰

If you're not that familiar with Docker yet or need a more detailed introduction, check out my Docker article:

Docker: Easy deployment of services 🚒
Docker revolutioniert die Bereitstellung von Anwendungen mit Containern.

Features That Will Blow Your Mind 🌟

Face Recognition & Object Detection 🧠

Immich comes with built-in AI that detects and automatically groups faces. You can name people and then search for them, just like Google Photos. The machine learning model runs entirely locally on your server, so your images never leave your network.

Map View πŸ—ΊοΈ

If your photos contain GPS data, Immich displays them on an interactive map. Perfect for finding vacation memories or simply seeing everywhere you've taken photos.

Sharing & Albums πŸ‘¨β€πŸ‘©β€πŸ‘§β€πŸ‘¦

You can create albums and share them with other users, or generate public links. Ideal for family photos, wedding pictures, or vacation albums you want to share with friends.

Mobile App πŸ“±

The Immich app is available for Android and iOS. It supports automatic background backup, so every new photo gets uploaded directly to your server. The app feels almost as smooth as Google Photos.

More Highlights ✨

  • Full-text Search: Search for objects, scenes, or even colors in your images
  • Memories: "On this day X years ago", just like Google Photos
  • RAW Support: Support for common RAW formats
  • Video Support: Not just photos, videos are managed and streamed too
  • Duplicate Detection: Finds and flags duplicate images
  • OAuth & OIDC: Single Sign-On integration possible
Introduction | Immich
Immich documentation - getting started with self-hosted photo management.

Immich vs. Google Photos βš”οΈ

Feature Immich Google Photos
Cost Free (Open Source) Free up to 15 GB, then from $1.99/month
Privacy Full control, data on your own server Data with Google, AI analysis
Face Recognition βœ… Local βœ… Cloud-based
Map View βœ… βœ…
Mobile App βœ… Android & iOS βœ… Android & iOS
Auto Backup βœ… βœ…
Sharing βœ… Albums & Links βœ… Albums & Links
Storage Limit Unlimited (own hardware) 15 GB free
RAW Support βœ… Limited
Self-hosted βœ… ❌

As you can see, Immich easily keeps up with Google Photos in most areas. The biggest advantage is, of course, complete control over your data. The only real downside: you need your own hardware and a bit of technical know-how for the setup.

Hardware Requirements πŸ’»

Immich isn't exactly modest when it comes to resources, especially the machine learning component needs decent power. Here are my recommendations:

Minimum

  • CPU: 2 cores (x86_64 or ARM64)
  • RAM: 4 GB (without ML) / 6 GB (with ML)
  • Storage: 50 GB SSD for the system + as much as you need for photos
  • CPU: 4+ cores
  • RAM: 8-16 GB
  • Storage: SSD for database, HDD/NAS for media
  • GPU (optional): For faster ML processing (NVIDIA with CUDA support)

A Raspberry Pi 4 with 8 GB RAM technically works, but machine learning will be quite slow on it. For a serious installation, I recommend at least a small Intel NUC or similar.

Tip: If you want to make Immich publicly accessible, you should definitely put a reverse proxy like Traefik in front of it and secure your homelab:

Traefik + CrowdSec: Securing Your Homelab Against Attacks πŸ›‘οΈ
Traefik und CrowdSec schΓΌtzen dein Homelab vor Angriffen und unerwΓΌnschtem Traffic.

Conclusion 🎯

Immich is, in my opinion, the best self-hosted alternative to Google Photos. The project is evolving rapidly, the community is active and helpful, and the features are impressive. Sure, it requires some setup effort and your own hardware, but if you're already running a homelab, Immich is an absolute must-have.

Give it a try, you won't regret it! And if you have questions, feel free to drop them in the comments. πŸ’¬