Head to head
Ente or Immich for self-hosted photos?
Both back up phones and both find faces. The difference is who can read the files: with Ente only your devices can, with Immich anything that can open a folder can.
Should I self-host Ente or Immich for my photos?
Pick Ente if the server or the disk it writes to is somewhere you do not fully trust, such as a rented VPS or a third-party S3 bucket: Ente encrypts each photo on the device before upload and runs face recognition and search on your phones and desktops, so its server never sees a readable image. Pick Immich if the hardware is yours and you want originals that stay readable without the app: Immich keeps unmodified files in a directory and runs machine learning on the server. Ente needs far less server (1 GB of RAM, 1 core) but losing its database, keys or password makes the bucket unreadable.
Run Ente if you do not trust the place your photos are stored, and Immich if you do. That is the deciding axis, and everything else follows from it. Ente encrypts each photo on the phone before upload, so its server and the bucket behind it hold only ciphertext, and face recognition and search have to run on your own devices. Immich stores readable originals in a directory and does its machine learning on the server, so the server has to be a machine you control.
What the server can and cannot see#
Ente's own comparison page puts it in one line: photos are end-to-end encrypted on your device before upload, and Ente does not have the keys required to decrypt them. That is a vendor claim, but the architecture page explains the mechanism, and it holds up. Each file gets its own key. File keys are encrypted with the key of the album they belong to. Album keys are encrypted with a master key generated at signup, and the master key is stored on the server only after being encrypted with a key derived from your password through Argon2id. Album metadata such as names and folder paths is encrypted too.
Ente says the self-hosted server, called museum, keeps that model. Self-hosting means you run the machine that stores things you still cannot read without a client and a password.
Immich makes no such claim, and Ente's page says so accurately: Immich does not use end-to-end encryption for the photo library, and photos are stored on infrastructure you control. Anyone with access to the disk, the backup or the host can open them. On a box in your house that is a feature. On a rented VPS it is a trust decision you have made without noticing.
What each one asks of the server#
| Ente (self-hosted) | Immich | |
|---|---|---|
| Minimum RAM | 1 GB for the cluster | 6 GB (8 GB recommended) |
| Minimum CPU | 1 core | 2 cores (4 recommended) |
| Docker | Compose plugin 2.30 or newer | Compose plugin |
| Database | PostgreSQL | PostgreSQL 14 to 19 with VectorChord |
| File storage | S3-compatible object storage | A directory, UPLOAD_LOCATION |
| Machine learning | On phones and desktops | On the server |
| What the disk holds | Encrypted objects | Unmodified originals |
| Readable without the app | No | Yes |
Ente describes museum as a lightweight Go binary that suits older hardware and low-end embedded devices, because most of the work happens on the clients. That is also where the cost went.
Immich's figures come from the opposite design: the immich-machine-learning container keeps its models resident, which is most of the 6 GB. Its Postgres window is narrow: Immich documents Postgres >= 14, < 20, VectorChord >= 0.3, < 2.0 and pgvector >= 0.7, < 0.9, and the server refuses to start if VectorChord is out of range. pgvecto.rs support ended at 3.0. If you run Immich's bundled Postgres image you never touch this; if you point it at a shared database server, this is the line that fails first.
Where the machine learning runs, and what that means for you#
Ente's machine learning page says face recognition and Magic Search run on your device, and that photos and ML data are never sent to Ente's servers. The mobile apps and the desktop apps for Mac, Windows and Linux index. The web app does not offer these features at all. Indexes are encrypted and synced, so one device can do the work for all of them, and for a large library Ente suggests enabling machine learning on the desktop app first because it indexes faster than a phone.
So with Immich the server does the indexing and the phone only uploads. With Ente, plan on a desktop left awake with the app open; a household with only phones has nowhere fast to index a decade of photos.
Immich's model is simpler to reason about: one server, one queue, one place to watch, and the RAM bill that Immich vs PhotoPrism spends so long on.
Object storage is the part people underestimate#
Ente stores photos, thumbnails and videos as objects in S3-compatible storage, and the quickstart bundles MinIO for that. Two details from Ente's object storage page catch people out. First, museum embeds the bucket endpoint into pre-signed URLs, so the phone talks to the bucket directly; the default localhost:3200 works on the server and nowhere else, and you must change it to a LAN address or a domain before any other device can upload. Second, the bucket names are fixed: b2-eu-cen for primary, wasabi-eu-central-2-v3 for secondary and scw-eu-fr-v3 for cold storage, whatever provider you use.
MinIO's community edition was archived in April 2026, as MinIO vs Garage explains. For a long-lived install, point museum at a maintained S3 store such as Garage or a hosted bucket. Because objects are encrypted before they leave the phone, a hosted bucket is a much smaller trust decision here than it would be for Immich.
The consequence: what you hold when the software is gone#
Ente's backup page lists what you need to decrypt anything: the encrypted file data from object storage, the file and collection keys from the Postgres database, and your master key, which comes from your password. All three. It names the common mistake: replicating the object storage carefully and neglecting the database, without which the encrypted data will not be usable. Museum's own museum.yaml and credentials.yaml belong in the backup too. And on the account side, the architecture page says that if both the password and the recovery key are lost, recovery is impossible: there is no backdoor.
So if Ente's keys or the software are lost, the files in the bucket are unreadable. A full disk of objects is not a photo library.
Immich's failure mode is gentler. Its backup documentation says originals live under UPLOAD_LOCATION, in upload/ by default or library/<userID> with the storage template on, as original, unmodified files. Thumbnails and encoded video are regenerable. If Immich is gone, the database is corrupt, or you simply stop wanting it, you still have a folder of JPEG, HEIC and video files that any viewer opens. You lose albums, faces and sharing, which live only in Postgres. You do not lose the photos.
Ente's own answer to its failure mode is sensible: for beginners the backup page recommends keeping a plaintext backup of your photos, exported through the CLI or the desktop app. With a scheduled plaintext export to a separate disk, Ente is as recoverable as Immich, at the cost of storing the library twice.
The two answers that circulate#
One camp says Ente is the private choice, so it is better. The other says Immich is already self-hosted, so it is already private and encryption adds nothing. Each is right about one machine.
If the server is a box in your house, on a disk you own, backed up to another disk you own, the second camp is right. End-to-end encryption protects you from the operator of the server, and you are the operator.
If the server is a rented VPS, or the storage is someone else's bucket, the first camp is right. Immich on a VPS means the provider's staff, their snapshots and anyone who compromises the host can read every photo. Ente in the same place exposes ciphertext.
Which one for your situation#
| Situation | Pick | Why |
|---|---|---|
| Home server you own, family photos | Immich | Readable originals, server-side search, nothing to lose but the database |
| Cheap 1 GB VPS or a hosted S3 bucket | Ente | 1 GB and 1 core is enough, and the host only sees ciphertext |
| Only phones, no desktop that stays on | Immich | Ente indexes on clients, and the web app has no machine learning |
| You worry about a stolen disk or a seized server | Ente | The disk holds encrypted objects |
| You want to be able to quit the app in ten years | Immich, or Ente with plaintext exports | Immich's files stand alone; Ente's need the database, keys and password |
| You already run Nextcloud | Read Immich vs Nextcloud for photos | Whether you need a photo app at all comes first |
Where this answer stops applying#
This page compares self-hosted Ente with self-hosted Immich. It does not cover Ente's paid hosted service, where storage is included in the plan and Ente says it keeps three copies across three cloud providers in the EU. That is a different decision: hosted end-to-end encrypted storage against running your own server, which is closer to Replace Google Photos than to this page.
It also does not make a disk-encrypted Immich equivalent to Ente. Full-disk encryption protects a powered-off drive. It does nothing against someone with access to the running host, which is the threat end-to-end encryption exists for.
What to do next#
Decide where the server lives first. If it is yours and at home, install Immich, give it 8 GB and an SSD for Postgres, and read Backups that actually restore before the first import. If it is rented, install Ente, move its object storage off the bundled MinIO, and before you upload anything that matters, back up the Postgres volume, museum.yaml and credentials.yaml, write down the recovery key, and schedule a plaintext export. Then do a full restore into a scratch install, because a backup you have not restored is not a backup. Backing up a running database covers why the database dump matters more than the snapshot, and the rest of the category is in Photos and files.
Questions#
Can the Ente server see my photos when I self-host it?
No. Ente says photos are end-to-end encrypted on the device before upload and that it does not have the keys needed to decrypt them, and it says the self-hosted server keeps that model. Each file has its own key, encrypted with its album's key, which is encrypted with a master key that never leaves your devices unencrypted. Running the server yourself does not give you a way in, which is the point and also the risk.
How much RAM does a self-hosted Ente server need?
Ente's requirements page says at least 1 GB of RAM and 1 CPU core for the cluster, with Docker Compose 2.30 or newer as a plugin. The server, called museum, is a Go binary and stays light because the heavy work happens on the clients. Immich asks for 6 GB minimum, 8 GB recommended and 2 to 4 cores, because its machine learning runs on the server. The cost does not disappear with Ente: it moves to your phones and laptops.
Does Ente face recognition work in the browser?
No. Ente's machine learning page says face recognition and Magic Search run on the mobile and desktop apps, and that these features are not available on the web. Indexes are encrypted and synced between your devices, so you can index on one and search on all. For a large library Ente suggests turning machine learning on in the desktop app first, because a computer indexes faster than a phone.
What happens to my Ente photos if I lose the database?
They become unusable. Ente's backup page says the object storage holds encrypted photo data, the Postgres database holds the file and collection keys, and the master key comes from your password. You need all three to decrypt anything. The same page warns that people often replicate the buckets carefully and neglect the database. Back up Postgres, museum.yaml and credentials.yaml, and keep a plaintext export as well.
Can I read Immich photos without Immich?
Yes. Immich stores original, unmodified uploads under UPLOAD_LOCATION, in upload/ or, with the storage template enabled, in library/ per user. Any file manager or photo viewer can open them. What you lose without Immich is what lives only in its Postgres database: albums, face groupings, shared links and search. The files themselves are ordinary JPEG, HEIC and video, which is why Immich is the easier one to walk away from.
Which Postgres versions does Immich support?
Immich's documentation says it is known to work with Postgres 14 up to but not including 20, so 14 to 19, with the VectorChord extension between 0.3 and 2.0 and pgvector 0.7 or 0.8. The server checks the VectorChord version at startup and refuses to start if it is incompatible. pgvecto.rs support ended at 3.0. Most people never meet this, because the Compose file pins Immich's own Postgres image.
Sources#
- Ente help, self-hosting quickstart
- Ente help, self-hosting requirements
- Ente help, self-hosting object storage
- Ente help, backing up a self-hosted instance
- Ente help, machine learning on device
- Ente architecture, key hierarchy
- Ente, Ente vs Immich (vendor comparison)
- Immich docs, pre-existing Postgres
- Immich docs, hardware requirements
- Immich docs, backup and restore
Published . Last reviewed . Found something out of date? Tell us and we will fix it and log the change.