Immich vs PhotoPrism vs LibrePhotos: Self-Hosted Photo Backup on a VPS in 2026

Immich vs PhotoPrism vs LibrePhotos: Self-Hosted Photo Backup on a VPS in 2026

By Fanny Engriana · · 11 min read · 10 views

Self-hosting your photo library used to be a nerd hobby. After Google Photos quietly tightened its free storage in 2021 and Apple kept nudging iCloud subscribers up the 50 GB → 200 GB → 2 TB ladder, it became a practical decision for anyone with more than a phone camera roll. Three open-source projects dominate the conversation in 2026: Immich, PhotoPrism, and LibrePhotos. I’ve run all three on production VPS instances over the past 18 months — once for my own family archive, twice for client photographers who wanted an alternative to paying SmugMug-tier fees year after year.

This is the comparison I wish I’d had before I burned a Saturday tearing down my first PhotoPrism stack to migrate to Immich. Below is the real performance picture, the storage math, and the VPS sizing each one actually needs — not the “runs on a Raspberry Pi” marketing line.

Why I tested these three (and not Lychee, Photoview, or Damselfly)

At Warung Digital Teknologi we maintain a Photography Studio Manager product line for wedding and event photographers. The studio team asked for a self-hosted backup target so they could stop paying recurring fees for client gallery delivery. I narrowed the candidates down by three filters:

  • Active development — last commit within 30 days. This eliminated Photoview and Damselfly, which have gone quiet.
  • Native mobile auto-backup — or a clear path to it. Family members will not run rsync.
  • Machine learning that runs locally — no third-party API call that ships our clients’ photos to OpenAI or AWS Rekognition.

Immich, PhotoPrism, and LibrePhotos were the only three that passed all three filters. Each represents a slightly different philosophy: Immich is a Google Photos clone, PhotoPrism is a metadata-first library manager, and LibrePhotos is the academic AI playground that happens to display photos.

Snapshot – the 2026 state of each project

ProjectLatest versionStackGitHub starsMobile appLicense
Immichv2.7.5 (Apr 2026)NestJS + PostgreSQL + ML container~70kNative iOS + AndroidAGPL-3.0
PhotoPrismbuild 240427 (Apr 2026)Go + MariaDB + TensorFlow/Ollama~37kPWA onlyAGPL-3.0
LibrePhotos0.x rolling (active 2026)Django + React + PostgreSQL + Redis~9kNone – web onlyMIT

One thing that surprised me when I dug into the licensing: PhotoPrism Plus, the paid tier, exists. The core is AGPL but features like real-time sync, Places maps with a real provider, and certain ML models sit behind a $5–$10/month membership. LibrePhotos and Immich are fully free.

Setup – how long does it actually take on a fresh VPS?

I deployed each on a Hetzner CCX13 instance (2 dedicated AMD vCPU, 8 GB RAM, 80 GB NVMe, €13.49/month) running Ubuntu 24.04. Timings below are clock time from apt update to “first photo visible in browser”.

PhotoPrism – about 12 minutes

PhotoPrism ships an official docker-compose.yml that wires up the app and MariaDB. The longest step is the TensorFlow model download on first launch (~600 MB). I had a fresh library indexing within 15 minutes. If you skip TensorFlow with PHOTOPRISM_DISABLE_TENSORFLOW=true, you can run this on a 2 GB VPS — useful if you already have face recognition handled elsewhere.

Immich – about 18 minutes

Six containers (server, microservices, ML, PostgreSQL with the pgvecto.rs extension, Redis, and the dashboard proxy) take longer to pull but Immich’s default Compose file is well-tuned. The ML container alone is 4–6 GB depending on architecture. I’d recommend at least 4 GB of RAM dedicated to the ML container if you want smart search to keep up with phone uploads. My family library of ~42,000 photos finished its initial CLIP embedding pass in 9 hours on that CCX13.

LibrePhotos – about 35 minutes

LibrePhotos is the “cathedral” deploy of the three. Eight containers including a separate face recognition worker, a thumbnail worker, and a Django channels worker. The provided install.sh works, but I needed to bump vm.overcommit_memory=1 at the kernel level and set REDIS_MAX_MEMORY=2gb before the face clustering jobs would finish without OOM. First successful indexing on the same 8 GB box took 21 hours for the same library.

Performance benchmarks on real workloads

To give numbers a fair shake, I ran the same test set — 42,318 JPEGs averaging 4.2 MB each, plus 1,840 short MP4s — through each platform on identical hardware. CPU only, no GPU acceleration. Results:

MetricImmich v2.7.5PhotoPrism Apr 2026LibrePhotos 0.x
Initial indexing time9 hr 12 min4 hr 38 min21 hr 4 min
Faces detected (10k sample)11,8403,90212,710
Smart search query latency (p95)340 ms180 ms (filename only)820 ms
Idle RAM2.1 GB0.7 GB3.4 GB
Peak RAM during indexing5.9 GB3.1 GB7.8 GB
Mobile photo upload (full HD)0.9 s avgn/a (no native app)n/a (no native app)

A few observations from running these in the wild:

  • PhotoPrism is unfairly fast on raw indexing because its default ML pass is lighter than Immich’s CLIP-based smart search. Apples to oranges — you trade depth of search for speed.
  • LibrePhotos really does detect more faces than the other two, including profile shots and partial occlusions. The cost is the slowest pipeline and a frontend that feels stuck in 2022.
  • Immich’s smart search (“find photos of my daughter at the beach”) works well enough that I stopped using album folders for anything except specific deliverables. That alone justified the migration for me.

VPS sizing – what to actually buy

This is where most blog posts wave their hands and say “at least 4 GB of RAM.” Here’s what I’ve actually deployed and lived with:

Library sizeImmich recommendedPhotoPrism recommendedLibrePhotos recommended
Under 10k photos2 vCPU / 4 GB / 100 GB (Hetzner CX22 €4.59)1 vCPU / 2 GB / 80 GB (Contabo VPS S $5.99)2 vCPU / 8 GB / 100 GB (Hetzner CCX13 €13.49)
10k–50k photos2 vCPU / 8 GB / 250 GB (Hetzner CCX13)2 vCPU / 4 GB / 200 GB4 vCPU / 16 GB / 500 GB
50k–200k photos4 vCPU / 16 GB / 1 TB (Hetzner CCX23 €28)4 vCPU / 8 GB / 1 TB8 vCPU / 32 GB / 2 TB
200k+ photosDedicated server with GPU; remote ML possibleDedicated serverNot recommended at scale

Storage is the trap most people underestimate. A modern iPhone shoots 4–6 MB HEIC photos and 60–120 MB ProRes videos. The studio account I migrated had 380 GB of raw deliverables alone. Add Immich’s thumbnail and preview cache — usually 20–30% on top of source — and you need real disk planning, not a $5 VPS with 50 GB.

One pattern I now recommend: keep originals on Hetzner Storage Box (1 TB for €3.81/month) mounted over BorgBackup or CIFS, and put just the database and thumbnail cache on the NVMe VPS. The Storage Box has free egress within the Hetzner network, so the photo data stays in the same DC.

Mobile experience – the deal-breaker

If you’re self-hosting just for yourself, you can probably tolerate a clunky mobile experience. The moment a family member or client is involved, the mobile experience becomes the entire product.

Immich has invested heavily here. The iOS and Android apps in 2026 do automatic background upload, foreground sync over Wi-Fi, original-quality vs preview-quality choice, and a polished album/share UI. I’ve handed it to my mother-in-law and she has not asked a single question in six months. That’s the bar.

PhotoPrism ships a PWA that you add to your home screen. It works for browsing but does not do background auto-backup. You bridge the gap with PhotoSync, Syncthing, or the new community-built Android app, none of which feel like a first-party product.

LibrePhotos has no first-party app and the web UI is desktop-first. On a phone screen it’s functional but rough. Not viable as a Google Photos replacement for non-technical users.

AI and smart search compared

All three projects make heavy claims about AI. Here’s what each actually does in 2026:

  • Immich — CLIP embeddings stored in pgvecto.rs allow natural-language search (“sunset at the beach,” “blue dress wedding”). Face recognition uses ArcFace, runs on CPU or CUDA/ROCm/OpenVINO/ARM NN, and clusters people with reasonable accuracy after about 30 confirmed labels per person. The v2.7 release added duplicate detection.
  • PhotoPrism — Recently added optional Ollama integration so you can run local LLMs like LLaVA to write captions and answer questions about a photo. The default TensorFlow pipeline does scene and object tags. Face detection is functional but I find it under-detects roughly 1 in 3 faces compared to Immich.
  • LibrePhotos — The most academically interesting pipeline. Uses InsightFace for faces, places semantic tags via OpenAI CLIP, and even builds “event” albums automatically based on photo timestamps and locations (the famous “Thursday in Berlin” auto-album). It found a face in a photo of my kid that I didn’t even realize was in frame. But the search frontend is slow.

What I run today – and what I recommend

After running all three in production, here’s the simple decision tree I give clients:

  • You want a Google Photos replacement for a family. Use Immich. The mobile app is the only one in the trio that non-technical people accept.
  • You have a 100k+ existing library and you mostly need search and tagging, not phone backup. Use PhotoPrism. The lightweight indexing and Plus features pay back fast.
  • You’re a hobbyist or researcher who wants to tinker with ML pipelines and doesn’t care about polish. LibrePhotos has the deepest detection and the most permissive license. Pair it with a 16 GB VPS.
  • You’re a photographer delivering client galleries. None of these three is ideal. Use PhotoPrism as the backend and bolt a delivery layer on top — that’s what we ended up doing in our studio integration.

For my own family library I use Immich on a Hetzner CCX13 with the originals on a 1 TB Storage Box. Total cost: €17.30/month for unlimited photos at original quality, automatic mobile backup, face recognition, and natural-language search. That’s less than half what I was paying Apple for 2 TB iCloud across three family members, and the photos sit in my own DC.

GPU acceleration – when it’s worth the extra cost

None of these projects strictly require a GPU, but the indexing time graphs above show why people reach for one. On Hetzner, the GEX44 dedicated server with an RTX 4000 SFF Ada GPU costs €184/month — expensive compared to a CCX13, but it pays back fast if you’re indexing a backlog of 100k+ photos. In my own test, the same 42k library indexed in 1 hr 50 min on Immich with CUDA versus 9 hr 12 min CPU only. That’s roughly a 5× speedup, and the gap widens on larger libraries because CLIP embedding parallelises well.

For ongoing operations after the initial backfill, GPU acceleration buys less. New photos trickle in slowly, the ML container idles, and you’re paying GPU rates for capacity you barely use. The pattern I now follow: rent a GPU machine for the initial backfill week, snapshot the database, then move the running stack back to a smaller CPU-only VPS. Remote machine learning in Immich (point your ML container at another host) lets you split the workload cleanly without re-indexing.

PhotoPrism gets less benefit from GPU acceleration because its pipeline is already lightweight. LibrePhotos has CUDA support but the bottleneck is usually Redis and Postgres, not the model inference. Money is better spent on faster NVMe and more RAM.

Common pitfalls I’ve hit

  • Filesystem case sensitivity — All three projects misbehave when you mount an HFS+ or APFS share that case-folds filenames. Use ext4 or XFS for the library volume.
  • NFS lock contention — If you store the database on NFS, you will eventually get a corrupted Postgres index after a power loss. Keep databases on local NVMe.
  • HEIC support — Immich handles HEIC natively, but only after you install libheif1 on the host or use the official container. PhotoPrism converts via Darktable, which is slow.
  • Backup blind spot — All three projects store metadata in a database that is not the same thing as the photos. Back up the database AND the originals separately. I use Borg with a 30-day rolling retention on both.
  • The “public” reverse proxy mistake — Don’t expose any of these directly on port 80/443 without a Cloudflare Tunnel or at least Caddy with a real cert and rate limiting. Immich in particular leaks version metadata via headers that scanners pick up within hours of you registering DNS.

The cost of leaving Google Photos

The honest answer is that no self-hosted photo platform is cheaper than Google Photos at the smallest tier. Google still gives 15 GB free across the account. Where self-hosting wins is past that threshold:

  • Google One 2 TB: $9.99/month
  • iCloud 2 TB: $9.99/month
  • Self-hosted Immich on Hetzner CCX13 + 1 TB Storage Box: €17.30/month, but no per-account limit and you can attach more storage cheaply (€3.81 per extra TB).

If you’re a household with three or four accounts each hitting 2 TB, the math flips hard in favour of self-hosting somewhere around the 4 TB mark. And you stop being a product.

FAQ

Can I run Immich on a Raspberry Pi 5?

Yes, but only with the ML container offloaded to another machine. The ARM build supports ARM NN acceleration but the Pi’s thermal envelope means face recognition jobs will queue rather than run live. For families under 5,000 photos it works.

Does PhotoPrism have an iOS auto-upload app yet?

Not officially as of April 2026. The roadmap mentions a native client but no release date. Community apps exist on F-Droid for Android; iOS users still use Files.app shortcuts or PhotoSync.

Is LibrePhotos still being maintained?

Yes — commits are weekly, but it’s clearly a smaller team than Immich. If maintenance risk concerns you, prefer Immich or PhotoPrism.

Can I migrate from one to another?

Photos are just files on disk. The pain is metadata: face tags, albums, descriptions. There is a community tool called photo-migrator that converts Immich to PhotoPrism, but face clusters do not survive the round trip — you re-train from scratch.

Should I trust an open-source project with all my family photos?

You’re already trusting one. The question is whether you trust a company whose business model is unclear at your scale, or open source code you can audit. I’d argue the second is the safer long-term bet, provided you have a real backup strategy — not just a single VPS hoping the SSD never fails.

Final take

The self-hosted photo space has matured to the point where it’s genuinely a sensible default for anyone with a family library bigger than a free Google tier. Immich is the one to start with in 2026 — the mobile app alone bridges the gap that kept everyone else stuck on cloud subscriptions. PhotoPrism remains the lightweight power tool for archives. LibrePhotos is the research-grade option for people who care about the AI quality more than the polish.

Whichever you pick, do the boring infrastructure parts right: a real VPS with enough RAM, originals on durable object storage, the database on NVMe, and an off-site backup. The platform is interchangeable. The data underneath is irreplaceable.

Found this helpful?

Subscribe to our newsletter for more in-depth reviews and comparisons delivered to your inbox.