Both Ente and Immich are tools to manage images and videos, and both come with a self-hosting option. And even though they do the same thing in general, there are some fundamental differences in their implementation.
In this article, I explicitly compare them for self-hosting purposes and thus ignoring the cloud version of Ente explicitly. If you don’t want to self-host, Ente would be your way to go anyways.
Principles
Immich stores the files in is unencrypted form, making them still usable if the software itself breaks. Ente, on the other hand, encrypts all files. While this is generally a good thing, it makes you dependent on their implementation. And if the software breaks, it’s not that easy to get to the files. While in my case I only self-host locally, there’s no special need for an encryption for me.
Aside of that, Immich just stores the files in a directory you want it to, while Ente requires an actual S3 storage, which requires more administrative work.
This is also not a fully review between all functions of both systems. I just write about things I noticed while using them. It’s more an impression on how they behave.
Installation
Installing Immich is pretty straight forward and doesn’t really left any questions open. This is not the case for Ente and you need to understand how the particular parts of the system work together to get the system working. This is especially true for my TrueNAS Community system in this case, since Immich can be installed via a pre-defined app, while Ente needs to be installed manually.
Import
Since I wanted to import all of my photos and videos, both systems had something to do, as there are over 16.000 files to import. Immich tells me when files are excluded, but doesn’t tell me why. I assume it was because of duplicates by importing them via both on iOS and macOS.
None of the apps did it very smoothly, though. While the upload to Ente was way more faster, it also draw so much power and used so much compute resources that the iPhone was nearly unusable during this time. On macOS, it also used around 60 % CPU usage while importing.
Also, the iOS app stopped multiple times and finally crashed, often after 50 – 150 files. But sometimes, it also successfully uploaded more than 1.000 files in one try.
While not requiring that much resources in the Immich app, the upload was way slower. And it too crashed more often than it should.
In the end, in Ente it took me around 4 hours to import all the data, while Immich took me more than 24 hours.
Mobile iOS app
In short: The Ente app is superior most of the time. Syncing files in the background is faster, viewing items stored on my NAS is way faster, especially noticeable in the same Wi-Fi, where Immich sometimes behaves like it had just a slow 3G connection.
One nice thing I noticed in the Ente app (and made me worried at first, because I didn’t expect it) is that it uses the images on the device itself to display, at least if it has no connection to the server. Thus, images in the Photos app are always displayed there, even without internet connection. Immich, on the other hand, does only store thumbnails locally and doesn’t access locally stored images if there is no connection.
I also like the UI more for Ente, but essentially they are similar. Scrolling is more snappy for the Ente app, while especially faster scrolling is stuttering in the Immich app.
However, this all comes with one major drawback: Nearly everything you do in the Ente app requires very much compute resources, which is noticeable especially when viewing videos. My iPhone 13 Pro gets very hot while watching, while there’s no such problem in Immich.
My best guess is that this is to the continuous encryption and decryption operations in Ente, since the server apps always run very cool and without many resources.
Server resources
Which brings us to the server resources. Ente can run even with very small amount of resources. According to the documentation, also some embedded devices are sufficient to run it. On the other hand, Immich requires 4 GiB of RAM (recommended 6 GiB) and 2 CPU cores (4 cores recommended).
In my system, the Ente apps need around 130 – 150 MiB RAM and nearly no CPU usage while viewing a video, the S3 storage 300 – 500 MiB RAM and 1 – 3 % CPU usage. Immich uses more than 900 MiB RAM with 5 – 12 % CPU usage while viewing a video.
Immich on the other hand needs around 950 MiB RAM and also 3 % CPU usage while viewing a video.
However, if you upload files, you can see the difference between on-device handling for Ente, which does produce nearly no notable usage on the server, while Immich ramps up to using around 25 % of my AMD Ryzen 5 PRO 2400GE CPU and peaks at 1,6 GiB RAM usage.
And even though all systems are in the same Wi-Fi, a 4K clip sometimes cannot be viewed without buffering on Immich. It just doesn’t load fast enough (this seems to be improved the last weeks through updates, though). However, the comparison is not really fair, since Ente doesn’t allow you to view the raw footage as originally stored. In my case, the original video was around 145 MiB in size, while the video viewed directly in Ente was only half its size. So, there’s definitely some kind of converting taking place in Ente.
Interestingly, Immich has a file storage usage of 127 GiB, while the S3 storage of Ente consumes only 107 GiB. And in its UI, Immich tells me it stores 236 GiB.
Machine learning
Both projects use machine learning, e.g. for face recognition or searching for natural language and it works fine for both. They also get both a plus for using the correct term machine learning instead of “AI”.
Also, in Ente, machine learning is an on-device process, while Immich does it on server-side. While both should be working fine, in general, I like it more to have it on server-side (since I also own the server) to keep resource usage low on the (often mobile) device.
Conclusion
Even though I don’t use it that often, the UI of Ente looks more polished to me. However, I am very ambivalent about the rest due to the different advantages and disadvantages.
However, Immich is easier to administrate and doesn’t consume that much resources on your (mobile) device.
In the end, both systems work for me in the way they should: store my photos and videos on my local NAS. And both have their drawbacks. I hope, especially through the current movement around data sovereignty, both projects attract more users and thus will fix these issues.
If you’re not that familiar with self-hosting and want to try it, keep Immich a shot. The same applies if you want to view your videos in its raw resolution all the time. If that’s not that important, if you explicitly want to use an encrypted storage or if self-hosting is not new to you, try out Ente.
In the end, I’m still unsure which system I want to use, as they’re currently running both simultaneously. If you decided, which one you’ll use, let me know. Maybe, it helps me to decide. 🙂
Thank you for the insights. Was a great read. Did you settle on either or are you still using both?
Thank you for your feedback! ❤️
I decided to go with Immich due to easier setup, less resource usage on my mobile phone and also due to a faster development pace, especially regarding some of the mentioned problems with the mobile app.
I’m looking into these now. As an Ente subscriber, logically I feel I should use Ente on my Raspberry Pi 5. However, I also feel that, while Ente is a safer option for publicly accessible services, due to e2ee, it may not be necessary on a server at home.
One of my ideas is to use Ente to upload photos from my mobile device, create an SMB path on my Mac to the Raspberry SSD drive, and use the Export feature to download (and keep in sync) the Ente-hosted files. I haven’t tried it yet, but I believe Immich will let me set it’s folder to be the exported folder where I’m saving the Ente photos.
If this works as expected, taking photos on mobile devices will end up exporting to the folder on the Raspberry Pi, and therefore making photos available to Immich.
That’s the theory anyway!!
Nice article!
For my part I went the immich way because I have a workflow where I download all images onto my Mac, have digicam to the face recognition, tagging etc, then I sync the photos folder to my NAS where immich runs as a docker image.
That way I don’t have to import into immich. I just present it with a folder it scans. It makes it light weight (ML is disabled). I currently host 76000 photos and videos on an External Library.
This setup is obviously not for everyone but I like curating and organizing my media and just have immich parse it and display it.
Thank you for your insight! Looks very interesting and it’s nice that you’ve got a workflow that suits your needs.