
A problem that was not really pressing and hence unsolved for a long time is how to archive and synchronize images I and members of the family take regularly. Obviously, using a public cloud service for this was out of the question, my pictures are my pictures. Back in January, a friend made me aware of Immich, an open source and GNU APGL licensed ‘Self-hosted photo and video management solution’. Could this be a software to address my needs?
Fortunately, the question was easy to answer, as Immich offers a docker-compose.yml and .env file that run out of the box. For a quick test, I was up and running in 5 minutes. There’s a web interface and apps for Android and iOS to automatically upload new images and videos taken and to view content stored on the server. From a simplicity point of view, there is little to write about, it just works.
From a feature point of view, it’s hard to know where to start. Obviously being able to get a timeline on all devices connected to my Immich server of images uploaded from all kinds of different devices is the core, followed by multi-user capability, so everybody in the family can have his/her own timeline and can decide which images to share with other local Immich users or an external audience by a sharing link. GPS images embedded in images are of course also analyzed and displayed on a global map.
And then, there are those extra features that I didn’t quite expect. There’s a face recognition module so I can find all pictures with a certain person on it. Works well. And then, there’s an AI module that analyzes all pictures when they are first uploaded and one can search for things that are shown on the pictures. And I was very much surprised that when I searched for ‘sim card’, ‘mobile phone’, ‘plane’ or ‘Scottish castle’, I actually got corresponding images in descending order of likelihood.
From an operational point of view, Immich is also simple to maintain. As it is container and docker compose based, a simple ‘docker compose pull‘ and restart performs an update. Backups are also straight forward, I just stop the containers, tar the data folder that includes all images, videos and the database. To test if I could restore a backup, I copied the rather large tar file to a different server and used my docker-compose.yml configuration file from the original server to start Immich there. Worked like a charm. The only little technical issue I had, which is not Immich’s fault, is that my reverse proxy for https connectivity was not configured to handle large uploads. So I had to adapt my reverse proxy configuration to allow for large file uploads. And those can be quite large with Immich, particularly when video files are being synchronized.
And here we go, I’m 3 months into running Immich at home and I’m super happy!