Self-Hosted Photo Backup: Comparing Immich, PhotoPrism, and Nextcloud Memories

Self-Hosted Photo Backup: Comparing Immich, PhotoPrism, and Nextcloud Memories
Listen to this post

AI-narrated version of this post using a synthetic voice. Great for accessibility or listening while busy.

AI assistance: Drafted with AI assistance and edited by Auburn AI editorial.

Your phone’s camera roll is probably one of the messiest, most important datasets you own. Thousands of photos, spanning years, sitting on a device that can be lost, stolen, or simply die. Cloud services like Google Photos or iCloud solve the sync problem, but they move your data onto someone else’s infrastructure, often outside Canada, which matters if you care about PIPEDA compliance or just personal data sovereignty. The good news: three mature, actively maintained open-source projects – Immich, PhotoPrism, and Nextcloud Memories – can replace commercial photo backup entirely, running on hardware you control. Each takes a meaningfully different approach to the same problem. This post breaks down what each one actually does, where each one struggles, and what kind of homelab setup each one demands before you commit storage and time to one of them.

What Each Project Actually Is

It helps to understand the lineage before comparing features. These are not equivalent projects wearing different skins.

Immich is the newest of the three. The first public commit landed in 2022, and it was explicitly designed to mirror the Google Photos experience: automatic mobile backup, face recognition, object detection, and a clean timeline interface. It is a standalone application with its own stack – Node.js backend, a PostgreSQL database with pgvector for ML embeddings, Redis, and microservices for machine learning. You deploy it via Docker Compose. The official documentation is thorough and actively updated.

PhotoPrism has been in development since 2018. It is a single Go binary (plus MariaDB or SQLite) that indexes an existing photo library in place. The philosophy is closer to a smart viewer on top of your filesystem than a sync client. PhotoPrism pulls heavy ML work – face clustering, scene classification, object recognition – using TensorFlow under the hood. The PhotoPrism documentation reflects a more opinionated design: it wants to own the folder structure it manages.

Nextcloud Memories is neither of those things. It is a Nextcloud app – a plugin that runs inside an existing Nextcloud instance. If you already self-host Nextcloud for file sync, Memories adds a photo timeline, face recognition (via the Recognize app), EXIF browsing, and map views on top of the files Nextcloud already manages. There is no separate deployment. The Memories project page is useful for understanding its scope. Its strength is integration; its ceiling is whatever Nextcloud can do.

Mobile Backup: How Photos Actually Get There

This is the most practical question. A backup solution that requires manual effort is a backup solution you will eventually stop using.

Immich has first-party iOS and Android apps that behave almost identically to Google Photos backup. Background upload, Wi-Fi-only mode, per-album selection, and HEIC support all work out of the box. On iOS, background refresh limitations apply (same as any app), but on Android with battery optimization disabled, uploads happen reliably and quickly. What we found surprising was how well the duplicate detection works – Immich hashes files before upload and skips true duplicates without any configuration on your part.

PhotoPrism does not ship a native mobile backup app. You can use third-party apps like rclone or configure WebDAV sync through your phone’s file manager, but there is no polished push-backup experience. Some users point a Nextcloud client at a folder that PhotoPrism also watches, which works but adds complexity. If automatic phone backup is your primary requirement, PhotoPrism’s lack of a native client is a real gap.

Nextcloud Memories uses the standard Nextcloud mobile app for backup. The Nextcloud iOS and Android apps support auto-upload of photos, and Memories picks them up automatically once they land in the configured folder. The upload experience is acceptable – not quite as snappy as Immich’s dedicated app, but functional and reliable. HEIC files upload correctly; whether they display inline depends on your server’s Imagick configuration.

Machine Learning Features: Face Recognition, Object Search, and Scene Detection

AI-assisted organization is where the three projects diverge most sharply in both capability and hardware requirements.

Immich

Immich ships its own machine learning microservice container. On first run it downloads models: CLIP for semantic search (default model is ViT-B/32, roughly 350 MB), and a face recognition model based on InsightFace. CPU inference works but is slow – indexing a 20,000-photo library on a four-core N100 mini PC will take several hours. If you have an Nvidia GPU and pass it through to the ML container with the nvidia runtime, that same library indexes in under 30 minutes. ARM support (for Raspberry Pi 5 or similar) is functional but slower still.

The semantic search is genuinely useful. You can type “dog at the beach” and get results. Face clustering works well after manual correction of the initial groupings. Smart albums based on location, date, and detected objects are available in the UI without any extra configuration.

PhotoPrism

PhotoPrism uses TensorFlow for scene classification and object detection. The face recognition feature requires the PHOTOPRISM_FACE_SIZE and related settings to be configured, and it is notably slower than Immich’s implementation on equivalent hardware. The plus side: PhotoPrism’s TensorFlow inference is more mature and has been tuned over more years. Scene labels (landscape, food, indoor, etc.) are applied automatically during indexing. Search works across those labels and EXIF data. Full-text semantic search similar to Immich’s CLIP approach is not available in the base open-source version.

Nextcloud Memories + Recognize

Face recognition in Memories depends on the separate Recognize app from the Nextcloud app store. Recognize runs on-server inference using ONNX models. Setup requires PHP with the correct extensions and enough RAM – the Recognize documentation recommends at least 4 GB available to the PHP-FPM process during inference. Results are reasonable for scene and object detection; face clustering is less polished than Immich’s. Semantic text search is not available in the same way. What Memories does well is map-based browsing – if your photos have GPS EXIF data, the map view in Memories is clean and fast.

Storage Model and Filesystem Behaviour

How each application treats your files on disk matters a lot for long-term data safety.

Immich manages its own upload directory (configurable, defaults to /usr/src/app/upload inside the container, mapped to a host path). It stores originals in a date-based folder structure: upload/originals/YYYY/MM/. It does not modify originals. Thumbnails and ML data live in separate subdirectories. The tradeoff is that the photos are not easily browsable outside of Immich without understanding that structure. There is an export feature, but Immich is somewhat opinionated about being the primary interface to your library.

PhotoPrism indexes an existing folder structure. You point it at a directory (called the Originals path) and it reads what is there, without moving or renaming files by default. This is the most filesystem-friendly approach of the three. If you have an existing organized photo archive, PhotoPrism fits around it rather than restructuring it. It does write sidecar .yaml files alongside originals to store metadata, which is worth knowing if you are precious about clean directories.

Nextcloud Memories follows Nextcloud’s storage model. Files live inside the Nextcloud data directory under the user’s folder, accessible via WebDAV or the Files app. Memories reads EXIF from those files and builds its own index in the Nextcloud database. You can also mount external storage in Nextcloud and point Memories at it. This is the most flexible storage model if you are already within the Nextcloud ecosystem, but adds the Nextcloud abstraction layer over everything.

Resource Requirements and Realistic Hardware

Running any of these on a Raspberry Pi 4 with 4 GB RAM is technically possible but practically painful for larger libraries. Here is a realistic breakdown based on a 50,000-photo library.

  • Immich: Minimum comfortable setup is 4 GB RAM, a quad-core CPU (Intel N-series, Ryzen Embedded, or similar), and SSD for the database. PostgreSQL with pgvector is memory-hungry during indexing. A dedicated SSD for the database separate from photo storage is recommended. Docker Compose setup is well-documented; the docker-compose.yml in the official repo is production-ready with minor edits for your volume paths.
  • PhotoPrism: Lighter baseline. 2 GB RAM is workable for browsing; you want 4 GB for comfortable indexing. MariaDB is the recommended database backend for anything serious (SQLite works for small libraries). The single-binary architecture is simpler to reason about operationally.
  • Nextcloud Memories: Resource cost depends almost entirely on your Nextcloud setup. A baseline Nextcloud instance needs 2 GB RAM minimum. Add Recognize inference and you want 6-8 GB during initial indexing runs. PHP-based inference is less efficient than the Go and Node approaches in the other two projects. On the plus side, if Nextcloud is already running for other purposes, the marginal cost of adding Memories is mostly disk and a few additional PHP extensions.

From our experience deploying these on a used Beelink SER5 (Ryzen 5 5560U, 16 GB RAM, running Proxmox with an LXC for each service), Immich is the most demanding but also the most capable. PhotoPrism is the easiest to keep running quietly in the background. Memories is only sensible if Nextcloud is already part of your stack.

Sharing, Albums, and Multi-User Support

Sharing photos with family members, or running separate libraries for multiple household users, works differently across all three.

Immich has proper multi-user support. Each user gets their own library, upload quota settings, and login. Sharing is done via shared albums or public share links with optional password and expiry. Partner sharing allows two users to see each other’s libraries while keeping them separate. This is the most Google Photos-like sharing model and the most functional for a family setup.

PhotoPrism supports a single admin account by default in the free open-source version. Read-only sharing links work. A multi-user mode does exist in the current codebase but its completeness in the community edition is limited compared to the commercial tiers. For a single person or a single household account, this is not a problem. For two adults wanting separate libraries, it is a real limitation.

Nextcloud Memories inherits Nextcloud’s mature multi-user and sharing system. Each Nextcloud user has their own photo library; Memories respects that separation. Sharing individual photos or albums uses Nextcloud’s standard share links, which support password protection, expiry, and download restrictions. For Canadian deployments where you want to keep family data on Canadian infrastructure – say, a NAS in Calgary running on your home connection – the Nextcloud sharing model is well-tested and auditable.

Which One Fits Which Use Case

There is no single correct answer, but the use cases are fairly distinct once you see them clearly.

If your primary goal is replacing Google Photos for a household – automatic phone backup, face search, shared albums – and you are willing to run a slightly heavier Docker stack, Immich is the most complete solution available right now. It moves fast (sometimes too fast; check the changelog before updating), but the feature set is ahead of the other two for this specific use case.

If you have an existing organized photo archive on a NAS and want a smart interface over it without disrupting your folder structure, PhotoPrism is the better fit. Its respect for existing filesystems and its stable, mature codebase make it trustworthy for long-term archiving. Accept the mobile backup limitation as a design choice, not a bug.

If you are already running Nextcloud for file sync, calendars, and contacts, adding Memories is a low-friction way to get a usable photo timeline without maintaining a separate service. It is not the most feature-rich photo application in isolation, but it is the right choice for a Nextcloud-first homelab.

Our reading of the current development trajectories suggests Immich will continue pulling ahead on AI features, PhotoPrism will remain the archival specialist, and Memories will stay tightly coupled to the Nextcloud release cycle – which is not a criticism, just a realistic description of what each project is optimizing for.

– Auburn AI editorial, Calgary AB


Related Auburn AI Products

Building a homelab or self-hosting content site? Auburn AI has practical kits:

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top