Skip to content
HomeTechOps

Self-Hosting

Immich vs PhotoPrism vs Nextcloud: self-host photos

Immich vs PhotoPrism vs Nextcloud Memories in 2026: mobile auto-backup, AI/face search, GPU acceleration, RAW/video, backups, and which to self-host.

Problem summary

There's no single winner among the self-hosted Google Photos alternatives — they're built around different priorities. Immich is the phone-replacement: the best native mobile auto-backup (especially reliable iOS background upload), CLIP natural-language + OCR + face search, and the only one that GPU/iGPU-accelerates its core ML (Intel OpenVINO, NVIDIA CUDA, AMD ROCm, Rockchip NPUs) — at the cost of a heavier stack (Postgres + Redis + ML container, 6–8 GB RAM) and the occasional breaking release. PhotoPrism is the stable, format-broad library: CPU-only built-in AI that runs anywhere, the widest RAW/HEIC/JPEG-XL and Live/Motion-photo support, and the lowest fuss — but no first-class mobile backup and label-based (not semantic) search. Nextcloud + the Memories app is the right layer only if you already run Nextcloud: a clean photo UI over your existing files, with AI via the Recognize app (CPU-only, and officially maintenance-only — the biggest long-term risk). One rule applies to all three: a file copy is NOT a backup — you must dump the database too.

Operator snapshotEvidence first
First proof

Name your top priority.

Screen to open

Check the immich Postgres volume is a local disk, not an NFS/SMB share

Expected signal

You know whether phone auto-backup, AI/semantic search, format breadth/stability, or reusing Nextcloud matters most.

Stop boundary

Don't adopt this stack just for photos if you don't already run Nextcloud — Recognize is feature-frozen.

Layer path

1There is no single 'best' self-hosted photo app — Immich, PhotoPrism, and Nextcloud Memories are built around different priorities, so the decision is a use-case map across mobile auto-backup, AI search, format support, stability, and footprint.
2Immich: the phone-replacement — best native mobile auto-backup (reliable iOS background upload), CLIP natural-language + OCR + face search, and the only one that GPU/iGPU-accelerates its core ML (Intel OpenVINO, NVIDIA CUDA, AMD ROCm, Rockchip NPUs; no Coral/Hailo). Heavier stack: Postgres + Redis + ML container, 6–8 GB RAM, Postgres on local SSD only.
3PhotoPrism: the stable, format-broad library — CPU-only built-in TensorFlow AI that runs anywhere, the widest RAW/HEIC/JPEG-XL and Live/Motion-photo support, native Google-Takeout JSON, Go single binary + SQLite/MariaDB. Weakness: no first-class mobile backup, and label-based (not semantic) search.
4Nextcloud + Memories: a photo UI that runs inside Nextcloud (not standalone), with AI via the Recognize app (CPU-only, ~4 GB RAM, officially maintenance-only — the biggest long-term risk). Right only if you already run Nextcloud. Safety boundary for all three: a file copy is NOT a backup — the database (paths/metadata/faces) must be dumped too, or photos restore orphaned with an empty timeline.
Runbook

Step-by-step runbook

Start here. Do each check in order, compare it to the expected result, and stop when the evidence explains the failure or the safe stop point applies.

1

Pin your constraints

Check: Write down your top priority, whether the phone is the source, RAM/GPU budget, formats, and stability tolerance.

Expected result: You have the inputs that decide the fit.

If not: Skipping this picks a tool weak on the axis you care about.

2

Map constraints to a primary app

Check: Phone backup / semantic search → Immich; stability / broad formats / CPU-only → PhotoPrism; already-Nextcloud → Memories.

Expected result: You have a primary candidate (a fit, not a ranking).

If not: If you have a spare iGPU/GPU for AI, that points to Immich.

3

Provision the stack correctly

Check: Immich: Postgres on local SSD + Redis + ML container, 6–8 GB RAM, enable the GPU backend. PhotoPrism: SQLite or MariaDB. Memories: install on existing Nextcloud + Recognize, matched versions.

Expected result: The app runs with its dependencies met.

If not: Don't put Immich's Postgres on a network share; don't mix incompatible Nextcloud/Memories/Recognize versions.

4

Import from Google Photos

Check: Immich: use immich-go against Takeout (preserves albums/metadata). PhotoPrism: drop extracted Takeout files in originals and index (reads JSON). Nextcloud: upload then index with Memories/Recognize.

Expected result: Your existing library is imported with metadata intact.

If not: immich-go is community-maintained and early — verify a sample album after import.

5

Set up and verify mobile backup

Check: Immich: configure per-album background backup in the app. PhotoPrism/Memories: configure the Nextcloud app or a sync tool.

Expected result: New phone photos land on the server automatically.

If not: On iOS, confirm Background App Refresh; see /self-hosting/immich-photos-not-backing-up if uploads stall.

6

Prove the backup with a restore drill

Check: Dump the database, back up the media, then restore both to a scratch instance and confirm the timeline rebuilds.

Expected result: You've proven a file-copy-plus-DB-dump restores correctly.

If not: If the timeline is empty on restore, you backed up files without the DB — fix the order.

Decision tree

Decision tree

If: Replacing Google Photos on the phone; reliable auto-backup is the point.

Then: Immich fits best.

Action: Run Immich (Postgres on local SSD, 6–8 GB RAM); set per-album background backup. If uploads stall, see /self-hosting/immich-photos-not-backing-up.

If: Want most stable, lowest-fuss library with the broadest RAW/format support; CPU-only is fine.

Then: PhotoPrism fits best.

Action: Run PhotoPrism (SQLite for small libraries, MariaDB at scale); index Google-Takeout files directly (it reads the JSON sidecars).

If: Already run Nextcloud and want photos over your existing files.

Then: Nextcloud + Memories fits best.

Action: Install Memories + Recognize, keeping all three (Nextcloud core/Memories/Recognize) version-compatible; use the Nextcloud app for auto-upload.

Safe stop: Don't adopt this stack just for photos if you don't already run Nextcloud — Recognize is feature-frozen.

If: Have an Intel iGPU / NVIDIA / Rockchip NPU you want to use for photo AI.

Then: Immich is the only one that benefits.

Action: Enable the matching ML backend (OpenVINO/CUDA/ROCm/RKNN); plan it with /nas/local-ai-on-nas-immich-frigate-ollama.

Evidence

Evidence table

SymptomEvidence to collectLikely layerNext action
Choosing a self-hosted photo app.Your top priority: backup vs search vs formats vs reuse-Nextcloud.Core fitImmich / PhotoPrism / Memories respectively.
Need reliable phone auto-backup.Whether the tool has a first-class native backup app.Mobile backupImmich (native apps); others rely on third-party / Nextcloud app.
Want to use a GPU/iGPU for AI.Presence of Intel iGPU / NVIDIA / Rockchip NPU.ML accelerationImmich (OpenVINO/CUDA/ROCm/RKNN); PhotoPrism/Recognize are CPU-only.
Restoring after a failure.Whether you have a database dump, not just files.Backup correctnessDump Postgres/MariaDB/Nextcloud DB first, then media — or restore orphaned.
Reference

Commands and settings paths

Confirm Postgres is on local SSD (Immich)

Check the immich Postgres volume is a local disk, not an NFS/SMB share

Where: On the Immich host / compose file.

Expected: The DB lives on a local (ideally SSD) filesystem.

Failure means: Immich's Postgres on a network share corrupts/underperforms — unsupported.

Safe next step: Move the DB volume to local storage before importing a large library.

Check available ML acceleration

ls /dev/dri (Intel iGPU) or nvidia-smi (NVIDIA); confirm the model line for Rockchip

Where: On the photo-app host.

Expected: A supported accelerator is present for Immich's OpenVINO/CUDA/RKNN backend.

Failure means: No accelerator means Immich ML runs on CPU (slower); PhotoPrism/Recognize are CPU-only regardless.

Safe next step: Pick the ML backend per /nas/local-ai-on-nas-immich-frigate-ollama, or accept CPU indexing.

Verify a database dump exists before trusting a backup

Immich: check UPLOAD_LOCATION/backups for daily dumps; PhotoPrism: `photoprism backup`; Nextcloud: DB dump + data dir

Where: On the server, before relying on the backup.

Expected: A recent DB dump exists alongside the media backup.

Failure means: Files without a matching DB dump restore as orphaned assets with an empty timeline.

Safe next step: Schedule DB dumps first; verify with a real restore (see /self-hosting/home-server-backup-restore-tested).

Check RAM headroom for the chosen app

free -h (and the container memory limit)

Where: On the host.

Expected: >=6–8 GB free for Immich with ML; ~3–4 GB is workable for PhotoPrism/Recognize.

Failure means: Immich ML on 4 GB must be disabled; over-tight limits cause OOM during indexing.

Safe next step: Right-size RAM, or disable ML / pick PhotoPrism on constrained boxes.

Hardware boundary

Hardware and platform boundary

Change only when

  • Choose Immich when phone auto-backup and natural-language/face search are the point and you can give it 6–8 GB RAM (ideally a GPU/iGPU).
  • Choose PhotoPrism when you want the most stable, format-broad library and CPU-only AI is fine.
  • Choose Nextcloud + Memories only when you already run Nextcloud and want photos over your existing files.

Evidence that matters

  • RAM headroom (6–8 GB for Immich ML; 3–4 GB for PhotoPrism/Recognize) and SSD for the database/thumbnails.
  • A supported accelerator if you want fast AI (Intel iGPU/NVIDIA/Rockchip — Immich only).
  • A database-dump backup plan and a tested restore.

Evidence that does not matter

  • Coral/Hailo for photo AI — none of these use them (those are camera-NVR detectors).
  • Chasing the 'most AI' — match the search model (semantic vs label) to how you actually search.

Avoid

  • Treating a file copy as a backup — always dump the database too.
  • Putting Immich's Postgres on a network share (unsupported, corrupts).
  • Adopting the Nextcloud+Memories+Recognize stack just for photos when you don't already run Nextcloud (Recognize is feature-frozen).
  • Upgrading Immich across a major (e.g. v3.0) without reading release notes and backing up first.

Related tool

Use the linked tool to turn this runbook into a guided check for your exact setup.

NAS setup planner

Related problems

Last reviewed

2026-06-23 · Reviewed by HomeTechOps. Built from June-2026 research verified against first-party Immich docs/GitHub (v2.0 stable Oct 2025, v3.0 June 2026; OpenVINO/CUDA/ROCm/RKNN ML accel; Postgres-on-local-SSD; automatic DB dumps), PhotoPrism docs (CPU-only TensorFlow, broad RAW/HEIC/JPEG-XL, native Takeout JSON), and Nextcloud Memories/Recognize repos (Recognize CPU-only and maintenance-only). Framed as a use-case decision map across mobile-backup/AI-search/formats/stability/footprint, never a 'winner'; exact versions and RAW matrices flagged to re-verify before relying on them.

Sources/assumptions

  • Facts verified 2026-06-23 against first-party Immich docs/GitHub (v2.0 stable Oct 2025, v3.0 June 2026), PhotoPrism docs (rolling calendar builds), and Nextcloud Memories/Recognize repos; version-specific behavior changes fast — re-verify exact versions before relying on them.
  • Immich requires Postgres on local SSD (not a network share) and 6–8 GB RAM with ML enabled; PhotoPrism's built-in ML is CPU-only; Nextcloud Recognize is CPU-only and officially 'maintained with limited effort' (critical fixes only).
  • This is a use-case decision map across mobile backup, AI search, format support, stability, and footprint — not a ranking; the right pick depends on your priority.

Source-backed checks

HomeTechOps turns official docs and conservative safety rules into a shorter runbook. These links are the source trail for the page direction.

Planning a purchase?

We keep a source-backed, price-free comparison so you can buy once and right. No star ratings, every spec cited.

Synology vs UGREEN vs DIY NAS in 2026

Get the deal & firmware alerts

Home Stack Field Notes: NAS deals, firmware changes worth acting on, restore-test reminders, and new decision guides — plus the capacity & backup sizing cheatsheets from our calculators. Unsubscribe anytime.