Run Immich. It is the only one of the three with official apps in both stores. It searches on the server. It speaks OIDC, and its backup covers the database. The price is a documented 6 GB floor. Choose PhotoPrism if the server is small and the phone is not the point. Choose Ente if the server must never see a plaintext photo. You will build its apps yourself. What follows is the table, then where each one breaks.

The comparison table

Immich PhotoPrism Ente
Licence AGPL-3.0 “Other” in GitHub metadata AGPL-3.0
Latest v3.3.6, 4 Nov 2026 261029-963b58c50, 29 Oct 2026 photos-v1.3.69, 5 Nov 2026
Floor “Minimum 6GB, recommended 8GB” RAM “at least 2 cores, 3 GB of physical memory” “A minimum of 1 GB of RAM”; “1 CPU core”
Mobile App Store, Google Play PWA built by you
Search server-side, VectorChord People, Labels, Faces on-device
Storage UPLOAD_LOCATION, Postgres originals, storage, index DB Postgres, S3 storage
Auth OIDC passwords, 2FA, app passwords, OIDC recovery keys, passkeys
Backup uploads and database originals and index database museum.yaml, data volume
Migration not documented Import to Originals none from hosted

Every number there is the project’s own documented minimum or recommendation. Nothing in this piece was measured.

On the hardware

The floors differ by more than a gigabyte, and they are documented numbers rather than measurements. Immich asks for “Minimum 6GB, recommended 8GB” of RAM and “Minimum 2 cores, recommended 4 cores” of CPU. Since v3 its machine learning container on amd64 needs an x86-64-v2 processor, and the docs say “the last version to support x86-64-v1 is v2.7.5”. That last line retires a lot of older NAS boxes.

PhotoPrism asks for “at least 2 cores, 3 GB of physical memory” and a 64-bit operating system. Its docs add that “RAM should match the number of CPU cores” and want “at least 4 GB of swap”. They also warn against a hard memory limit, because the indexer needs more than the baseline while it works. Its index runs on SQLite or MariaDB.

Ente documents its own floor, and it is the lowest of the three. The quickstart script asks for “A minimum of 1 GB of RAM”, with “A minimum of 1 CPU core”. The shape behind that number is a Postgres database, an API server and S3-compatible object storage, with MinIO on the default path.

Its requirements page carries a software floor that catches people out. “Ente requires Docker Compose version 2.30 or higher”, and the command is docker compose rather than docker-compose.

What each one is good at

Immich behaves like a service. You install it, your phone backs up to it, and the server does the work that keeps the library searchable later. Search runs through Postgres with the VectorChord extension, filtering on faces, locations, OCR text and albums.

Identity sits behind OIDC, with the mobile redirect URI documented. The docs list both app stores and publish Android signing fingerprints, and backup follows a 3-2-1 strategy. The release line has moved on since our September piece on 3.2.

PhotoPrism is the conservative choice. It runs on a documented 3 GB with 2 cores, and its face recognition and labels run locally on the server. Accounts get local passwords, two-factor, app-specific passwords and roles, with OpenID Connect documented under Advanced.

Backups are one command plus the originals folder, which is the kind of thing that goes in a cron job and stays there. We looked at its October release, which moved the AI models onto the GPU.

Ente is the privacy answer. It is a different design, not a shorter feature list. Photos are encrypted before they leave the device, and the machine learning runs on the client: the docs describe face recognition and magic search as on-device. The server keeps ciphertext in object storage and metadata in Postgres. It never holds a readable copy of a photo. The keys that matter come from your password and live in the database.

Where each one breaks

Immich has the highest floor, and the processor requirement is the part people miss. Server and machine have to match, so a NAS from before x86-64-v2 is not a candidate. Non-Linux hosts are “strongly discouraged”, and Docker inside LXC is “not recommended”. The 4 GB configuration exists only with machine learning off, which removes the feature that justifies the RAM. And server-side search means the server reads your photos in plaintext.

PhotoPrism breaks more softly. There is no native app. The documentation lists a PWA, and a PWA is not an app with a background upload queue. The 3 GB floor comes with the restart warning above, so the resource story is small but spiky. The licence line needs care too. GitHub reports “Other” rather than a licence name, which is a metadata gap rather than a dual-licensing statement. Read the repository’s own licence file before deploying it commercially.

Ente breaks at the front door, which is why people start it and stop. Self-hosting is a build: “You can modify Ente mobile apps and CLI to connect to your server”, and the mobile page points at a Flutter workflow. A self-hosted account is separate from a hosted one, even with the same email address, with its own password and recovery key. Nothing documents moving a hosted library onto your server.

There is a second trap in the storage. The object storage endpoint must be reachable from the clients, or uploads fail, and the docs warn that they fail quietly. Backups must take the whole data volume, because as the documentation puts it, “this encrypted data will not be usable without the database”.

What the docs do not say

The gaps are worth stating. Immich documents no library migration path in the pages read, and nothing about how the 6 GB floor scales with library size.

PhotoPrism does not name the machine learning model it runs. Its navigation carries cloud-migration pages for Google Photos, Apple Photos and Flickr, but those were not read here, so their limits are unknown.

Ente documents no route from a hosted account to your own server, and no import from another app.

How this was compared

Compared from each project’s documentation and release records, read on 7 November 2026; nothing was installed, no benchmark was run and no library was migrated for this piece.

What I would run, and why

I would run Immich. The thing I want from a photo library is that my phone stops asking me questions. Official apps, a working search box and a backup that tells me to take the database are worth more than two gigabytes of RAM. I would check the CPU flags first. That requirement cannot be fixed by adding memory.

On a small box, or on hardware from 2019, I would run PhotoPrism and accept the PWA. If the photos were of something I would not put on a server with a shell, I would build Ente’s apps and put up with the work. It is the only column where the design does what I want.

Sources: Immich’s installation requirements, Immich’s search docs, Immich’s OAuth docs, Immich’s backup docs, PhotoPrism’s getting started, PhotoPrism’s backup docs, PhotoPrism’s account docs, Ente’s post-install notes, Ente’s backup docs, Ente’s machine learning page, and the latest release records for Immich, PhotoPrism and Ente.