Migrating from Monument 2 to Immich

This post could turn into a large rant over the need for open-source tooling from companies selling hardware that’s supposed to be long-lasting, but if you’re reading this, you’ve probably lived through the same thing I did in the last few months.

Monument is a company reportedly from Chicago, IL with 5 employees. They had come up with a neat photo management system on Kickstarter in 2017. I backed the early model, and loved it. There were limitations, sure, but it was infinitely better than other solutions available at the time. The hardware was a bit slow, and they release an upgraded device, the Monument 2, in 2022.

The migration from Monument 1 to Monument 2 wasn’t without hiccups, but all was going rather well, there was a roadmap for the features under development where users could report bugs or contribute ideas, and the performance was quite pleasant. The biggest asset of Monument 2 was the ability to create links that could be used to share albums or individual photos with people not registered as users on Monument.

This, however, all changed over the 2nd half of 2023. It turns out that the Monument 2 public share, as well as outside home access to the Monuments 1 & 2 relies on AWS routing, through some clever user-to-reverse DNS mapping, one assumes. But with the war in Ukraine, it became apparent that some of the development done by Monument’s team was dependent on Ukrainian developers. No reason they shouldn’t have. Except they were completely dependent on them, and as the war took over the entire country and mobilized all men aged 18 and up into the army, Monument’s cloud systems started breaking down. First it was an outage of a couple of weeks that caused issues. Then, in early September, the infrastructure fell again and to date, has still not been repaired.

Frustrated, and, as the parent of a toddler, wanting to share photos of said toddler with the grandparents and other family members, well, I had relied on the Monument 2’s shared album function. So I had to look for an alternative offering that I could run on my own without depending on closed-source, commercial services that could go down because of someone that wasn’t me not being available.

After spending a considerable amount of time researching through the thorough comparisons of open source libraries available, I tried two: Photoprism and Immich. Photoprism is using the more and more common “Community” vs “paid” editions system. But I quickly realized that while Photoprism works well for a single user, having the community edition makes having a multi-user setup difficult. You need to use the CLI for creating and managing users. So I then went on to try Immich.

Immich is more resource intensive than Photoprism, but I think the results are worth it. Because it runs as a docker compose stack, it’s relatively easy to virtualize across multiple servers (if you have access to that), or to make it use specific storage drives that you have attached to your machine. I had a 2010 mac mini lying around, that had been upgraded to 8GB of RAM, which I promptly formatted to use Ubuntu server 22.04 barebones, and worked my way through the Docker installation instructions in the thorough documentation.

After Immich was up and running, I had to start migrating the 60k-odd photos and a few thousand videos over from my Monument 2. The easiest way I found, because I’m paranoid about data loss, was to export all the photos from each user onto my desktop’s external hard drive (one folder for each user). This can take a considerable amount of space, to be sure.

After all the photos were accessible on my hard drive, I followed the instructions from the Immich Doc on bulk upload. This implied logging in as each user, creating an API key and then running a bulk import job on each user’s folder with the relevant API key. Time-consuming, but not overly painful to do. Even on Windows, the nodejs CLI is trivial to install and run the bulk uploader from.

After the import was completed, and I had adjusted the various jobs thread counts to something that wouldn’t choke the poor Intel Core 2 Duo of the Mac Mini (the default is 5 threads for nearly everything!)

I simply had to create the DNS records and reverse proxy for my instance, and send out my users’ passwords.

There may be a better way of importing from Monument to Immich – but I haven’t yet looked into it.

Keep in mind, setting up Immich is not as simple as setting up a Monument 2. I’m really disappointed in the way that Monument has dropped the ball on this, because if they’d simply made an API to open up the reverse-DNS they were doing, the more tech-savvy users could have built their own infrastructure to keep the services, and device, alive. As it is, I am now the proud owner of yet another defunct piece of hardware.

That said, the documentation is really straightforward if you’re somewhat familiar with how Linux and docker works. Even if you’re not sure how Docker works internally, reading the instructions and working your way through will do just fine. You just need to not be afraid of typing in a few commands through a terminal to execute programs on a computer.