Installing Immich Alongside Photoprism

Page content

Last night I installed Immich on an HP laptop with ease. The issue I came up against is that laptops sleep and hibernate after a few minutes unless you are actively using them. This means that you need to use them whilst files are being transferred if you do not want tasks to be interrupted. That’s why, this morning I decided to try installing immich on two different raspberry Pi devices. The first is the one running Nextcloud.

Trial and Error Installation

I struggled with this install because first I had to download the right docker packages and then I had to unpack them and then I needed to check that docker was up and running and then I had to try to get Immich to launch but I encountered an error message. “no matching manifest for linux/arm/v8 in the manifest list entries”. After a quick search of the web I found that version of Linux and ARM processor are not supported via this instance so I searched for whether Jammy Jellyfish is. It is and that’s when I tried to install on my other Raspberry Pi 4 device. This time was a success so I have Photoprism and Immich running on one Pi and Nextcloud running on the second.

Best for 360 Photos

The biggest difference I noticed with Immich is that it supports 360 photos. If you’re the type of person to take spherical photographs you will be happy with this version. Another strength is that the app is free. It gives you the option of uploading in the foreground or the background, and on or off wifi.

With this experiment I am uploading the photos from a secondary iphone that I retired from outdoor use due to the battery getting old. I am now uploading 19,000 images and videos from that device to Immich to see how it copes. With the laptop it struggled against the device’s desire to sleep. Now it should run until it’s done on the Pi.

Jobs Status

If you look at the administration page you will see job status for a few jobs. These are: Generate thumbnail, extract metadata, library, sidecar metadata, tag objects, smart search, recognise faces, transcode video, storage template migration and migration.

With this instance you see that each job has “active”, “waiting”, “clear” and pause.

Server Stats

The server stats aren’t as complete as Nextcloud. These stats tell you about total usage in terms of photos, videos, storage as well as info by user about photos, videos and size of photo gallery.

Image Tagging

Image tagging is off by default in settings. It uses microsoft/resnet-50 as the image classification model.

Video Transcoding

Immich gives quite a bit of control for video encoding. It gives you options to control Constant rate factor, preset for how quick or slow an encode is, audio codec, video codec, whether h.264, hevc or vp9. You can also select video encoding from 480p to 4k.

It gives you control over max bit rate, threads used, transcode policy, tone mapping, two pass encoding hardware encoding and more.

The Phone App

The phone app has four tabs. Photos, search, sharing, and library. Photos shows all photos that the app is allowed to see, as well as clouds next to the images that have been synced and clouds with a line for images that are yet to be synced. The library tab shows you the albums that are on the device.

The backup icon at the top allows you to select which albums you want to include or exclude, as well as the total number of images, the number of images backed up and the remainder.

The uploading file info gives you the file name, creation date and id info for immich.

It’s in the backup settings that you can choose automatic foreground backup, for when you open the app and want to sync, automatic background backup if you want background options as the nuance to only upload when charging.

With Photoprism and Immich I noticed that you have the option not to backup iCloud images. Immich and Photoprism indicate when they are downloading images from iCloud to the phone, and uploading from the phone to themselves.

Geeking Out

When files are uploaded from the phone or other device they are moved to the uploads folder and from there Immich reads their metadata and sorts them into folders by year, and then by individual days of the year. The format is year-date-day. The images are then stored with their default name.

Export from Google Photos - Takeout

Yesterday I came across Immich-Go which is a tool that can, among other things import from zipped archives without prior extraction. This is great, considering the eight hundred or more zip files from Google Takout, containing all my photos. With this tool I can save a lot of time and effort but it does come with two disclaimers:

⚠️ This an early version, not yet extensively tested ⚠️ Keep a backup copy of your files for safety

Immich comes with the same warning: “The project is under very active development. Expect bugs and changes. Do not use it as the only way to store your photos and videos!”

Since I have Nextcloud, Photoprism and now Immich running I think I’m spreading the risk of all three failing at once.

Why use PhotoPrism, NextCloud and Immich?

iCloud, Picasa and other tools were great for storing photos on our laptops until we lost the ability to swap out the default drive with a bigger drive. Now that we the same storage on our mobile phones, as on our laptops we need external devices to back up images. If we use hard drives then we need to plug them in before each sync and this takes time, and limits mobility. NAS storage solutions are interesting but if the NAS driver fails then we have hard drives that we can no longer access. The beauty of using Raspberry Pi, thin clients and Bare bone PCs is that we have redundancy.

If a Pi dies we just remove the SD card and within seconds our photo gallery is restored by inserting it into a second device. We could start with a 256 gigabyte SDXC card and move up to a 500 gig sd card before moving up to a two terabyte card.

For more resiliency I would use a USB drive connected to the Pi to really increase storage capacity from half a terabyte up to 120 terabytes, in theory, with certain multidisk storage solutions.

With this setup if the Pi fails you just swap out the Pi.

And Finally

I reconfigured my Pis around. Now I have one Pi with photoprism and Immich. I have another with Homeassistant, a third with Nextcloud and a fourth running Pi-Hole. By swapping cards between Pis I got to see whether installations were easily transferred between devices. Home Assistant was, but the Pi-Hole wasn’t happy. Until this experiment I had just copied and pasted instructions. With Immich I did this too, but because I saw that I had to download specific packages to get docker to work I practiced using curl, and then replacing version numbers for an unpack command.

I encountered an error that meant that one setup woudln’t work, but instead of destroying a Pi configuration that I had a added to another one and it worked. It’s easier to start from scratch and get things to work, especially if they have a Pi image, like Photoprism does. Photoprism and Immich run on docker, so they both need the same base setup, which is why they work in parallel.

To conclude, with Docker you could install Nextcloud, Immich and Photoprism on the same Pi and have the three of them running on the same system. Each one uses a different port so they do not clash. You could even add a splash page so that when people browse to this device they are given the choice of all three storage solutions.