Immich vs Ente
Pick Immich if you want the fullest Google Photos replacement and trust the machine it runs on: its server reads your library to run face recognition and smart search, so they work everywhere, the web app included — at the cost of a heavier box (upstream asks for 6 GB of RAM, or 4 GB with machine learning off). Pick Ente if the server must never see your photos: files and metadata are end-to-end encrypted on your device, faces and magic search run on your phone or desktop, and the server's floor is 1 GB — at the cost of an S3 bucket your devices can reach, no machine-learning search in the web app, and no recovery if you lose both your password and your recovery key.
Side by side
Immich and Ente both replace Google Photos with apps that back up your phone to a server you run, and both are AGPL-3.0. The difference is who is allowed to look at the photos. Immich's server reads your library — that is how it runs face recognition and smart search for every device, the web app included. Ente's server never sees a photo: files and their metadata are end-to-end encrypted on your device before upload, and the machine learning runs on your phone or desktop instead. Almost everything else in this comparison follows from that one decision.
Where your photos can be read
Immich is a conventional server application. Your originals land in the
upload location you set in its .env, and the server processes them: its
architecture docs put every machine-learning task in a separate
immich-machine-learning container, and its remote-ML guide says the server
sends that container an image preview to work on. Anyone with access to the
server — you, a compromised container, a hosting provider with disk access —
can read the library.
Ente is built the other way round. Its FAQ says files are "encrypted on your device before being uploaded", with keys derived from your password, and that metadata — EXIF capture time, location, descriptions — is end-to-end encrypted too. Its backup docs spell out what that means for a self-hoster: decrypting a photo takes the encrypted file from object storage, the file-specific key from the database, and the master key from your password. The server, including the one you run, holds ciphertext. The source and cryptography have been audited externally, per the project's README.
That protection has a cost. Ente's FAQ is blunt: if you are logged out of every device and have lost both your password and your 24-word recovery key, the data cannot be recovered — "an inherent property of end-to-end encryption". Running the server yourself does not change that.
Machine learning: on the server or on your devices
Both offer face recognition and natural-language search; they run it in different places.
- Immich runs the models server-side, so smart search and faces work the same in the web app and the mobile app, and a phone never has to index anything. The price is server RAM — the ML container is the heavy part — and the fact that the server must see your photos to do it.
- Ente runs face recognition and magic search on the mobile and desktop apps. The indexes are encrypted and synced between your devices, so one device indexes and the others reuse it. Its docs recommend letting the desktop app do the initial indexing of a large library, say mobile indexing can be turned off on phones with 4–6 GB of RAM, and state that machine learning is not available in the web app, where search is limited to date, file name, description and album.
Setup, storage and footprint
Both are Docker installs rated 3 / 5 here, for different reasons.
Immich is the official docker-compose.yml plus an .env template: set
UPLOAD_LOCATION and DB_PASSWORD, docker compose up -d, and the server,
machine-learning container, Valkey (a Redis fork) and PostgreSQL come up on port 2283. Photos
go to a local folder. The weight is in RAM: upstream's requirements page asks
for a minimum of 6 GB (8 GB recommended) and says 4 GB systems can run it
with machine learning disabled. A fresh, empty Immich instance measured
~1.9 GB idle at first boot on our test box, before a single photo was
imported.
Ente starts with one command: a quickstart script writes compose.yaml
and museum.yaml with generated credentials and starts museum (the Go API
server), the web app, PostgreSQL and an S3-compatible bucket. Upstream's
floor is 1 GB of RAM and 1 CPU core for that cluster, because the
expensive work happens on the clients. The friction is object storage. Ente
stores every file in an S3-compatible bucket, and clients upload straight
to it through pre-signed URLs — so the bucket has to be reachable from your
phone, not just from the server. The quickstart points it at
localhost:3200, which is why the docs warn that mobile uploads fail
silently until you change the endpoint to a LAN IP or a domain, and why CORS
comes up so often in its troubleshooting pages. Account verification codes
land in the server logs until you configure SMTP, and per-user storage quotas
are raised with the Ente CLI. Ente has not been through our install sweep, so
there is no measured figure for it here.
Backups differ in kind, too. For Immich, a copy of the originals is a usable backup. For Ente, the encrypted objects are useless without the database that holds the per-file keys — the docs call backing up storage but not the database "a common oversight" — and upstream recommends keeping a plaintext export of your photos while you learn the setup.
Migrating from Google Photos
Both have a documented Google Takeout path. Ente's desktop app imports a Takeout export directly — an unzipped folder is the recommended form — reads the JSON metadata sidecars, and encrypts everything on the way in; the docs suggest enabling machine learning first, so photos are indexed as they upload rather than downloaded again later. Immich's recommended route is the community immich-go CLI linked from its docs, which reads the same sidecars.
Which should you self-host?
Pick Immich if…
- You want the fullest Google Photos replacement, with smart search and faces available everywhere, the browser included.
- You trust the machine it runs on — your own hardware, or a VPS you are comfortable holding readable photos.
- You can give it the RAM: upstream's 6 GB minimum, or 4 GB with machine learning off.
Pick Ente if…
- The point is that the server cannot see your photos — not the host, not a backup provider, not someone who gets into the box.
- You want a small server (1 GB floor) and are happy for your phone or desktop to do the indexing.
- You are prepared to configure an S3 bucket reachable from your devices, and to store a recovery key somewhere safe.
Neither is the better photo app in general. Immich gives you more, in more places, by trusting the server; Ente gives you a server that is not trusted at all. Decide which of those you need, and the choice is made. If you are weighing Immich against a library organizer instead, see Immich vs PhotoPrism; every option is listed on the Google Photos alternatives page.
Running either on a VPS
The two want very different machines. Immich needs a server sized for its machine-learning container, and there is a step-by-step Immich deploy guide. Ente runs in a gigabyte, but on a VPS you will want a domain and a reverse proxy in front of both museum and the bucket, so your phone can reach them over HTTPS. In both cases, put the photo storage on a volume you back up independently.
Common questions
Immich vs Ente — which should I self-host?
Pick Immich if you trust the server and want smart search and faces everywhere, including the web app; its server runs the machine learning, so it needs the RAM (upstream asks for 6 GB, or 4 GB with machine learning off). Pick Ente if the server must never see your photos: everything is end-to-end encrypted on your devices, the machine learning runs on your phone or desktop, and the server runs in 1 GB.
Does a self-hosted Ente server do face recognition?
No — by design. Ente's face recognition and magic search run on the mobile and desktop apps, and the encrypted indexes sync between your devices. The server only ever holds encrypted data. The web app has no machine-learning search; it searches by date, file name, description and album.
Why does Ente need S3 or MinIO when Immich does not?
Ente stores every file in an S3-compatible bucket, and clients upload straight to it through pre-signed URLs from the server. The quickstart ships a MinIO-style bucket on localhost:3200; phones cannot reach that address, so set the bucket endpoint in museum.yaml to a LAN IP or domain. Immich writes photos to a local folder you set as UPLOAD_LOCATION.
Can I move my Google Photos library into either one?
Yes. Ente's desktop app imports a Google Takeout export directly and reads its JSON metadata sidecars. Immich's recommended route is the community immich-go tool linked from its docs, which reads the same sidecars.
Paid link — we earn a commission if you shop through it.
Other comparisons with these apps
Phone-first backup vs. mature library organizer.
The multi-database web client from DBeaver vs. the PostgreSQL-only admin tool.
One conf.yml with an in-browser editor vs. YAML files and Docker label discovery.