Back to Article List

PhotoPrism vs Immich for a home photo server

PhotoPrism vs Immich for a home photo server

Updated and tested 3 November 2026

PhotoPrism is the older project. It has been developed since 2018 by PhotoPrism UG, a small self-funded Berlin company run by its two co-founders, its GitHub history goes back to tagged builds from January 2021 and the whole design starts from a folder of originals that the server indexes in place. Immich showed up in 2022 as a self-hosted replacement for Google Photos, with an iOS and Android app at the centre of the design. The core team went full time when the project joined FUTO in May 2024 and v2.0.0, the first stable release, came out on 1 October 2025. Both are AGPL, both ship as Docker Compose stacks, both recognise faces. The overlap is large, so the PhotoPrism vs Immich question comes down to how each one treats the files on disk.

How PhotoPrism and Immich store your photos

PhotoPrism has three folders: originals, an optional import folder and storage. You point it at originals, run an index and it leaves file and folder names exactly as they were. Everything it learns about a picture goes into the database plus optional YAML sidecar files under storage, never into the original. There's a PHOTOPRISM_READONLY setting that turns off every feature needing write access to originals, and even with writes enabled a photo has to be archived first and the Delete feature switched on in Settings before PhotoPrism will remove a file from the filesystem. The import folder is the other way in: drop files there and PhotoPrism copies (or moves, if you tick Move Files) them into originals under a date-based structure that avoids duplicates.

Immich is an upload system. The phone app, the web uploader or the @immich/cli tool push files to the server, which stores them under UPLOAD_LOCATION. With the storage template off, which is the default, originals go into upload/<userID>. Pick a template, the YYYY/MM/DD preset or a custom pattern, and Immich moves them to library/<userID> and lays them out by that pattern. Do that on day one. A Storage Template Migration job can apply a template to files already uploaded, but starting with it on means you never have to run it, and the Immich storage template guide covers both cases. For photos you already have on disk, Immich offers external libraries. The external library docs tell you to mount the folder with :ro; do that and Immich can't delete originals or write XMP sidecars, skip it and it can. Albums and descriptions you add in Immich stay in the database and are lost if the file moves, because a moved file is a new asset. Deleted-on-disk files land in the trash on the next scan. Automatic watching exists, marked experimental, uses inotify and is unlikely to work over a network mount, so most people run the nightly scan or set a cron.

Immich Storage Template settings with No template selected by default, YYYY/MM/DD and Custom as the other choices

On a fresh Immich v3.3.5 install the storage template starts at No template.

PhotoPrism was built to sit on top of a folder you keep organising yourself. Immich was built to be the place the files go.

Mobile backup

Immich has official apps for iOS and Android, distributed through the App Store, Google Play, GitHub APKs and a FUTO F-Droid repository. The mobile backup docs describe two separate mechanisms: a foreground backup that uploads new photos and videos from the albums you select whenever you open or resume the app, and a background one which on iOS depends on Background App Refresh and on Apple's own scheduling. Wi-Fi only is the default. Android can be told to upload only while charging. Live Photos and Motion Photos back up and play back, and the mobile app works offline against its local cache.

PhotoPrism has no native app of its own. The docs describe a PWA (progressive web app) you add to the home screen, and a page listing native clients maintained by other developers: Gallery for PhotoPrism on Android, Stream on iOS and PhotoSync on both, which is the usual way to get camera-roll backup by sending files over WebDAV into the import folder with PHOTOPRISM_AUTO_IMPORT switched on. It works. It's also two products and a WebDAV mount instead of one app with a backup toggle.

For a phone-first library I'd run Immich, and the reason is that backup app: a household with three phones is three installs and three toggles, and nobody has to learn what WebDAV is.

Search, faces and machine learning

Immich runs a separate immich-machine-learning container. It computes CLIP embeddings for every asset (the default model is ViT-B-32__openai, and the docs list larger and multilingual families such as ViT-B-16-SigLIP__webli that you can switch to) and those embeddings power typed-sentence search like "red bicycle leaning on a wall". The same embeddings feed duplicate detection, which is on by default with a tunable distance. Face recognition has its own model with adjustable detection score and clustering distance. OCR has been part of Immich since v2.2.0 (October 2025), so text inside a screenshot is searchable, and v3 brought it to the mobile app. The ML container can live on a different machine, which the remote machine learning guide covers, with a warning that the container has no authentication of its own. What CLIP doesn't produce is tags: the Immich FAQ is explicit that smart search yields no labels or descriptions, so there's no "Subjects" album equivalent.

Immich system config on a fresh install: clip.modelName ViT-B-32__openai and OCR enabled with PP-OCRv5_mobile

A fresh Immich install on my server reported ViT-B-32__openai as the CLIP model and OCR switched on.

PhotoPrism took the classifier route. Each photo gets labels from an image classifier, an NSFW model can mark pictures private, reverse geocoding fills in places (rate limited in the free edition) and search filters on labels, captions, people, places, colours, cameras and dates. In 2025 the project added a Vision service that can send images to Ollama or the OpenAI API for captions and custom labels. The 2026 builds replaced the old face detector with ONNX-based YuNet detection and sface embeddings, and the September build added models that find more faces, small ones included; existing libraries need photoprism faces migrate to benefit. The October 2026 build moved classification and NSFW detection to ONNX as well, where earlier releases used TensorFlow, and its release notes say ONNX models can run on supported NVIDIA GPUs. The PhotoPrism AI guide lists the four vision tasks as labels, caption, face and nsfw.

PhotoPrism library cards with EXIF details; the albino deer photo is auto-titled Sheep / Greater Brisbane / 2025

PhotoPrism's classifier titled the albino deer in my test set "Sheep".

My test set had 25 photos and no people in them, and PhotoPrism's new ONNX face pipeline still placed two face markers that never became a person, so how it holds up next to Immich's clustering on a real family library, I can't say.

FeaturePhotoPrismImmich
Official mobile appNo (PWA, third-party clients)iOS and Android
Existing foldersIndexed in place, names unchangedExternal libraries, read-only recommended
DatabaseSQLite 3 or MariaDB 10.5.12+ (PostgreSQL experimental)PostgreSQL with VectorChord
Default web port23422283
Documented minimum RAM3 GB plus 4 GB swap6 GB (4 GB with ML disabled)
Typed-sentence searchLabels and captionsCLIP embeddings plus OCR
Face recognitionYes, ONNX models, NVIDIA GPU supportedYes, GPU optional
Full user rolesPaid membershipFree
LicenceAGPL (Community edition)AGPL, no paid features

RAW, HEIC and video handling

PhotoPrism converts RAW files with Darktable or RawTherapee, plus Sips on macOS. HEIC and AVIF go through libvips with HEIF support, with libheif tools as a fallback, and the May 2026 build added a native HEIC/AVIF reader. Video is transcoded to AVC with FFmpeg and the encoder setting accepts software, intel, nvidia, vaapi, apple, raspberry and, with FFmpeg 8, vulkan.

Immich accepts a long RAW list (arw, cr2, cr3, dng, nef, orf, pef, raf, rw2 and around twenty more), plus HEIC, HEIF, AVIF, JXL and PSD. There's a setting to use the embedded preview inside a RAW file instead of decoding it, which skips a full RAW decode. Video transcoding defaults to h264 at 720p with the ultrafast preset and accelerates with NVENC, Quick Sync, VAAPI or RKMPP. Machine learning has its own acceleration list: CUDA, OpenVINO, ARM NN, ROCm and RKNN for Rockchip boards. The Immich hardware acceleration guide walks through the compose overrides for each. On a VPS with no GPU, the embedded-preview option and the ultrafast preset are the two settings worth checking before the first indexing run.

Users, sharing and paid editions

Every Immich feature is free. Being part of FUTO gives the project support outside product development, such as trademark enforcement and hiring help. The paid team is around ten people, and the only thing you can buy is an optional product key that unlocks no features. Multiple users, partner sharing (which shares every non-archived asset including GPS data with each partner you add; it's one-way, and you can add more than one), shared albums, public links with optional passwords and OpenID Connect login are all in the base install. The project's "FUTO, two years later" post from June 2026 restates the original commitment of no paywalled features and says there are still none that require payment.

PhotoPrism is self-funded by PhotoPrism UG through memberships. The Community edition is the AGPL build and gives you Super Admin, Admin and Guest roles. The User and Viewer roles arrive with an Essentials or Plus membership, and the editions page lists the user management UI under Plus. The default photoprism/photoprism image is the Plus build that members activate. Without a membership it runs as Community Edition, which is what the About page on my server said, and there was no user management screen to open. Sharing is by secret link to an album, a month, a region or a folder, with an optional expiry date; password-protected links are on the planned list. There's nothing like partner sharing.

PhotoPrism About page titled PhotoPrism Community Edition with an Upgrade now button and Build 261029-963b58c50

The default PhotoPrism image ran as Community Edition on my server, with the membership upgrade one click away.

Both projects publish a demo: demo.immich.app (login [email protected], password demo) and demo.photoprism.app. Ten minutes in each tells you more about the interfaces than any table.

Never delete a memory again

Keep every photo and video of the people you love, on reliable storage with unmetered bandwidth and a cost that stays predictable as the years add up.
Ciclo de Pagamento

VPS.H1

$6.99 Save  14 %
$5.99 Mensal
  • 1 vCPU AMD EPYC
  • 2 GB memória RAM
  • ✔HDD disco
  • ✔Ilimitada largura de banda
  • ✔ IPv4 e IPv6 incluídos O suporte a IPv6 não está disponível na França ou nos Países Baixos.
  • ✔Gerenciamento de firewall
  • ✔Monitor grátis de servidor
  • ✔KVM virtualização

VPS.H3

$24.99 Save  20 %
$19.99 Mensal
  • 4 vCPU AMD EPYC
  • 8 GB memória RAM
  • ✔HDD disco
  • ✔Ilimitada largura de banda
  • ✔ IPv4 e IPv6 incluídos O suporte a IPv6 não está disponível na França ou nos Países Baixos.
  • ✔Gerenciamento de firewall
  • ✔Monitor grátis de servidor
  • ✔KVM virtualização

VPS.H4

$36.49 Save  18 %
$29.99 Mensal
  • 6 vCPU AMD EPYC
  • 12 GB memória RAM
  • ✔HDD disco
  • ✔Ilimitada largura de banda
  • ✔ IPv4 e IPv6 incluídos O suporte a IPv6 não está disponível na França ou nos Países Baixos.
  • ✔Gerenciamento de firewall
  • ✔Monitor grátis de servidor
  • ✔KVM virtualização

Immich vs PhotoPrism hardware and database requirements

Immich's own requirements page asks for 6 GB RAM minimum and 8 GB recommended, or 4 GB if you disable machine learning, on 2 cores minimum and 4 recommended. The stack is four containers: immich-server, immich-machine-learning, Valkey and a Postgres image built by the Immich team with the VectorChord extension. Support for the older pgvecto.rs extension was removed in v3, so an install still on pgvecto.rs (anything that never moved to VectorChord after v1.133.0) has to migrate before that upgrade. Two more constraints from the docs: Postgres data should sit on a local SSD and never on a network share, and since v3 the amd64 ML container needs a CPU at the x86-64-v2 level or higher. The migration post says that's nearly every mainstream x86 chip since 2010 and does not mean AVX, but a few old NAS processors will fall outside it.

PhotoPrism is lighter to start. The getting started page asks for 2 cores, a 64-bit OS, 3 GB of physical memory and at least 4 GB of swap. The same page notes that RAW conversion and face recognition are disabled on systems with 1 GB or less. It lists SQLite 3 and MariaDB 10.5.12 or later as compatible databases and advises against SQLite when you need scalability or high performance. The 29 October 2026 build added experimental PostgreSQL support. The whole thing is one Go application plus the database.

Port 2342 for PhotoPrism, port 2283 for Immich, 3003 for the Immich ML container. The default Immich compose file doesn't publish 3003, so with both apps running on my server only 2283 and 2342 listened on the host. Keep it that way unless you move ML to another box.

ss -tlnp shows only ports 2283 and 2342 listening on the host; 3003, 5432, 3306 and 6379 are not published

Immich on 2283 and PhotoPrism on 2342, with no Postgres, MariaDB, Valkey or ML port open on the host.

Updates and breaking changes

Immich has followed semantic versioning since v2.0.0, and the stable release post promises that any 2.x mobile app works with any 2.x server. v3.0.0 in July 2026 removed pgvecto.rs and changed a set of API endpoints (the release notes point out most of those only affect third-party tools), and v3.1.0 dropped iOS 14. Since then v3.2.0 in September added a v2 search API and v3.3.0 in October added an optional, faster set of machine learning models behind MACHINE_LEARNING_MODEL_REVISION=v2; neither flags breaking changes, and v3.3.5 was still the latest stable release on 31 October 2026. Downgrading is unsupported, even within the same minor version, so the sane habit is to read the release page before docker compose pull, which is the process in how to update Immich. Pinning the image to the :v3 tag keeps you inside a major version.

PhotoPrism tags builds by date, 261029-963b58c50 being the 29 October 2026 stable, with development previews published alongside. Updating is the same pull-and-restart: the docs use docker compose up -d --pull always, which moved my server from 261007 to 261029 with the library intact. The full changelog is one long page at docs.photoprism.app, so search it for the feature you care about; GitHub releases carry a summary.

photoprism -v prints version 261029-963b58c50-Linux-AMD64-Plus after the update

The CLI reports the Plus build, even though the web interface says Community Edition.

Running PhotoPrism and Immich side by side

They can share a server and, with some care, a photo collection. Point an Immich external library at PhotoPrism's originals folder with a read-only mount and Immich will index everything PhotoPrism already has, without either app touching the other's metadata. Going the other way works best with the Immich storage template on, because the library folder then has a readable date-based layout for PhotoPrism to index. Budget the RAM for both ML stacks; on an 8 GB box that's tight while the initial jobs run.

A side note on Google Photos migrations, since that's how many libraries start. Immich's docs recommend immich-go, a community tool that reads Takeout archives, restores the dates Google strips out and uploads directly. PhotoPrism indexes an unzipped Takeout in place and reads dates, captions and GPS from Google's JSON sidecars; albums don't come across, and a community script handles those.

Which one to run

In a PhotoPrism vs Immich decision, PhotoPrism fits a library that already lives in a folder tree you curate: a photographer's archive, a family collection on a NAS, anything where the folders themselves carry meaning and you don't want a server renaming or moving things. Its lower memory floor also makes it the better fit for a 4 GB machine.

Immich fits a library that grows from phones. Native apps, background backup, partner sharing and typed search are the four things Google Photos refugees miss most, and PhotoPrism covers none of them without third-party pieces. It costs more RAM and it wants to own the upload folder, which is a fair trade for most households. On a VPS, Immich's recommended 8 GB of RAM and local SSD storage for Postgres are the sensible starting point, and the Immich VPS template installs it as a one-click app, so the first thing you do is install the phone app. Turn the storage template on before that first upload, whichever way the server was built.

If the folder tree matters more than the phone, PhotoPrism. If the phone matters more than the folder tree, Immich.

Questions?

How much does PhotoPrism cost?

PhotoPrism's Community Edition is free, with no limit on storage or on the number of instances, and it is the AGPL build. The paid memberships are Essentials at two euros a month and Plus from six euros a month, and the membership page says you can upgrade or downgrade at any time.

About the author

Matteo De Luca

I am from Turin. I studied electronic engineering there and discovered, somewhere during the second year, that I enjoyed explaining our laboratory work more than I enjoyed the laboratory work itself. I wrote for small Italian technology sites during university, then took freelance assignments on consumer hardware and later Linux and server software. The second change was better for me. I like subjects where there is something concrete to understand before the writing begins.

I live with my girlfriend and a very old Syberian cat. I go bouldering two evenings a week and draw when I remember to. I also have a small collection of film cameras inherited from my grandfather. Photography is one of the few hobbies where I am quite happy not to become more efficient. I don't want every interest I have to become work.

Never run out of space again

Keep backups, archives and media on reliable storage with unmetered bandwidth and a cost per gigabyte that stays low as the years add up. Your first VPS comes with a 30-day money-back guarantee.