Skip to content
SumGuy's Ramblings
Go back

Immich vs PhotoPrism: Self-Hosted Google Photos That Won't Sell Your Memories

Google Wants $36/Year for Your Nostalgia. Pass.

Remember when Google Photos was the crown jewel of free cloud storage? Unlimited photos, decent AI, face recognition, and it was free. Then 2021 happened. Then 2023. Then 2025. Each year Google “reassesses” its pricing strategy, which is corporate speak for “we found another lever and we’re pulling it.”

At this point, Google Photos decided your storage is now $3/month and your memories are worth $36/year — minimum. And if you’ve been snapping away for the past decade like most of us, you’re probably already bumping against the 15GB free tier ceiling, staring down a $3-10/month bill just to keep your kid’s birthday photos alive.

There’s also the small matter of Google training its models on your data, keeping your location history, and generally treating your personal photo archive as a product feature rather than your private memories. But hey, maybe you’re fine with that. No judgment. (Mild judgment.)

If you’re not fine with it, welcome to the self-hosting rabbit hole. We’ve got two options worth your time: Immich and PhotoPrism. Both run on Docker. Both are free. Both will let you own your memories without a subscription. Let’s break them down.


Why Ditch Google Photos in the First Place?

Before we get into the weeds, let’s be real about the reasons:

Privacy: Your photos contain metadata — locations, timestamps, faces, relationships. That’s a behavioral profile. Google’s terms give them broad rights to use this data for product improvement. “Anonymous” aggregated data has a funny way of not staying anonymous.

Cost creep: Free tiers shrink, paid tiers grow. Google One plans will only go up. Locking yourself into a platform where the price changes at Google’s discretion is a bad long-term bet.

Vendor lock-in: Exporting from Google Photos is annoying. Google Takeout produces a mess of JSON sidecar files that no other software natively understands. Getting your photos out is deliberately painful.

You already have a NAS or a server: If you’re reading a blog called SumGuy’s Ramblings, there’s a decent chance you’ve got a spare machine or a Synology sitting in your office. Put it to work.


Immich: The New Kid Who Skipped Straight to Senior Engineer

Immich is what happens when a developer gets fed up with Google Photos and decides to build the replacement themselves. What started as a personal project has exploded into one of the most actively developed self-hosted projects in existence.

Tech stack: Go backend, Svelte frontend, PostgreSQL with pgvector for AI search, Redis for caching. It’s modern, it’s fast, and it shows.

What makes it special:

The mobile app is genuinely excellent — and that’s rare in self-hosted land, where mobile is usually an afterthought bolted on six months after the desktop version. Immich’s iOS and Android apps feel like using Google Photos. Automatic backup, memories view, shared albums, face recognition — it’s all there, and it actually works smoothly.

The timeline view is butter-smooth even with 50,000+ photos. This is thanks to smart thumbnail generation and lazy loading. You scroll, it loads. No spinners of death.

Face recognition works offline using machine learning models bundled with the server. It’s not Google-level accurate, but it’s genuinely useful — cluster faces, name them, search by person. For a free self-hosted tool, it’s impressive.

Docker Compose setup:

version: "3.8"

services:
  immich-server:
    image: ghcr.io/immich-app/immich-server:release
    container_name: immich_server
    volumes:
      - /your/photo/path:/usr/src/app/upload
      - /etc/localtime:/etc/localtime:ro
    environment:
      DB_PASSWORD: yourpassword
      DB_USERNAME: postgres
      DB_DATABASE_NAME: immich
      REDIS_HOSTNAME: immich_redis
    ports:
      - "2283:3001"
    depends_on:
      - redis
      - database
    restart: always

  immich-microservices:
    image: ghcr.io/immich-app/immich-server:release
    container_name: immich_microservices
    command: ["start.sh", "microservices"]
    volumes:
      - /your/photo/path:/usr/src/app/upload
    environment:
      DB_PASSWORD: yourpassword
      DB_USERNAME: postgres
      DB_DATABASE_NAME: immich
      REDIS_HOSTNAME: immich_redis
    depends_on:
      - redis
      - database
    restart: always

  immich-machine-learning:
    image: ghcr.io/immich-app/immich-machine-learning:release
    container_name: immich_machine_learning
    volumes:
      - model-cache:/cache
    restart: always

  redis:
    container_name: immich_redis
    image: redis:6.2-alpine
    restart: always

  database:
    container_name: immich_postgres
    image: tensorchord/pgvecto-rs:pg14-v0.2.0
    environment:
      POSTGRES_PASSWORD: yourpassword
      POSTGRES_USER: postgres
      POSTGRES_DB: immich
    volumes:
      - pgdata:/var/lib/postgresql/data
    restart: always

volumes:
  model-cache:
  pgdata:

Point your browser at port 2283, create your admin account, install the mobile app, and you’re done. The initial library scan takes a while depending on your collection size, but after that it’s snappy.

Migrating from Google Photos: Use Google Takeout to export your library. Immich has a built-in Google Takeout importer that handles the JSON metadata sidecars correctly — it reads timestamps, locations, and descriptions from those files. It’s not perfect, but it’s the best you’ll find anywhere.

The honest downsides: Immich is still pre-1.0 in spirit — they’ve shipped major versions quickly and there have been database migration issues in the past. Always back up before updating. Also, RAW format support is improving but not as mature as PhotoPrism.


PhotoPrism: The Wise Old Wizard of Self-Hosted Photos

PhotoPrism has been around longer, moves slower, and that’s entirely by design. It’s the opposite of Immich in many ways — more mature, more cautious, and loaded with AI features powered by TensorFlow.

What makes it special:

The AI tagging is legitimately impressive. PhotoPrism uses TensorFlow-based models to automatically tag your photos with labels — “beach”, “sunset”, “dog”, “hiking” — without you doing anything. It also does face recognition, color analysis, and can identify landmarks. Combined, this makes search genuinely powerful.

RAW format support is broad: Canon CR2/CR3, Nikon NEF, Sony ARW, Fuji RAF — if your camera shoots it, PhotoPrism probably handles it. It also handles video better than Immich in some edge cases.

The Places feature is beautiful — it plots your photos on a world map by GPS metadata. If you’ve been traveling and shooting, this turns your library into a geographic story.

Docker Compose setup:

version: '3.5'

services:
  photoprism:
    image: photoprism/photoprism:latest
    container_name: photoprism
    restart: unless-stopped
    ports:
      - "2342:2342"
    environment:
      PHOTOPRISM_ADMIN_PASSWORD: "yourpassword"
      PHOTOPRISM_SITE_URL: "http://localhost:2342/"
      PHOTOPRISM_ORIGINALS_LIMIT: 5000
      PHOTOPRISM_HTTP_COMPRESSION: "gzip"
      PHOTOPRISM_DATABASE_DRIVER: "mysql"
      PHOTOPRISM_DATABASE_SERVER: "mariadb:3306"
      PHOTOPRISM_DATABASE_NAME: "photoprism"
      PHOTOPRISM_DATABASE_USER: "photoprism"
      PHOTOPRISM_DATABASE_PASSWORD: "yourpassword"
      PHOTOPRISM_FFMPEG_ENCODER: "software"
    volumes:
      - /your/photo/path:/photoprism/originals
      - photoprism-storage:/photoprism/storage
    depends_on:
      - mariadb

  mariadb:
    image: mariadb:10.11
    container_name: photoprism_mariadb
    restart: unless-stopped
    environment:
      MARIADB_ROOT_PASSWORD: rootpassword
      MARIADB_DATABASE: photoprism
      MARIADB_USER: photoprism
      MARIADB_PASSWORD: yourpassword
    volumes:
      - mariadb-data:/var/lib/mysql

volumes:
  photoprism-storage:
  mariadb-data:

First startup triggers an index of your library. On a large collection this can take hours — PhotoPrism is thorough. Get some coffee. Or sleep on it.

Migrating from Google Photos: PhotoPrism handles Takeout exports as well — drop the folders in your originals directory and run an index. It reads Exif data natively and can parse some Google metadata, though the sidecar handling is less automated than Immich’s dedicated importer.

The honest downsides: The mobile experience is a web app. It works, but it’s not a native app, and automatic background backup requires either the Immich app (some people proxy this) or third-party solutions. If mobile-first is important to you, this is a real limitation. Also, PhotoPrism is slower — it’s doing more work per photo, and on lower-powered hardware the difference is noticeable.


Head-to-Head Comparison

FeatureImmichPhotoPrism
PerformanceFast, optimized for large librariesSlower initial index, thorough
Mobile AppNative iOS + Android, excellentWeb app only, no auto-backup
AI TaggingCLIP semantic search, face recognitionTensorFlow auto-tags, landmarks, colors
RAW SupportImproving, not completeBroad and mature
Resource UsageModerate (PostgreSQL + ML models)Higher (TensorFlow indexing)
Storage BackendLocal filesystemLocal filesystem
Google Takeout ImportDedicated importer, handles JSON sidecarsManual, reads Exif
Video SupportGoodGood, handles more codecs
Map ViewYesYes, beautiful
StabilityActive dev, rapid versionsMature, slower release cycle
Setup ComplexityMediumMedium
CommunityHuge, very activeLarge, established

Which One Should You Pick?

Choose Immich if:

Choose PhotoPrism if:

The honest take: For most people in 2026, Immich wins. The mobile app alone is a dealbreaker for PhotoPrism in everyday use. If your photos live in your phone and you want seamless automatic backup the moment you take a shot, Immich delivers that. PhotoPrism is the better tool for a dedicated photography workflow — managing a camera library, handling RAW files, doing deep AI categorization.

The good news: they’re not mutually exclusive. Some people run both — Immich for the phone library and daily use, PhotoPrism for the serious camera work. Docker makes this trivially easy. Your server, your rules.


Hardware Recommendations

For either solution, you’ll want at minimum:

Both run fine on a Raspberry Pi 4 with 8GB RAM for smaller libraries, though indexing will be slow. A used mini PC or a Synology/QNAP NAS with Docker support is the sweet spot.


Final Thoughts

Google Photos is a great product that got progressively more expensive while the alternatives got progressively better. In 2026, there’s no compelling reason to keep paying for it unless you’re allergic to running your own server.

Immich is the recommendation for most people. It’s fast, the mobile experience is genuinely good, and the development velocity is remarkable. Just back up your database before every update — the team moves fast and database migrations have occasionally caused headaches.

PhotoPrism is for when you need the AI depth, the RAW support, and the mature feature set, and you can live without a great mobile app.

Either way, your photos stay yours. No price hikes. No terms-of-service updates at 11pm on a Friday. No one training a foundation model on your kid’s birthday party.

That’s worth a few hours of Docker setup.


Share this post on:

Previous Post
Systemd Timers vs Cron: Scheduling Tasks Like It's Not 1995
Next Post
ZFS vs Btrfs: Choosing a Filesystem That Won't Eat Your Data