I have over a century's worth of pictures in Google Photos. I am not immortal or anything, I just inherited a trove of family photos and digitized them all. The oldest photos are from the late 19th century.
I honestly do very much respect Google, the company and the services, but one concern about Google is the horror stories when their systems decide a user should be suspended. I want to minimize irreplaceable losses were I to lose access to my data stored there. The first steps of this have been:
- Google Takeout of files in my Drive, to store it in a self-hosted NextCloud.
- Google Takeout of my Photos, to store in a self-hosted immich.
This post is about the second item, getting photos into immich.
immich
I went with immich primarily because of its good commonality with Google Photos — I've mostly liked Google's product, just looking for more control of the ownership of my data. Immich presents a chronological view of photos, and allows organization into albums. It provides facial recognition which has honestly been top notch so far.
I host immich on a Proxmox machine at my home, and use Tailscale to get access to it from anywhere. The primary immich developers prefer to package it as a set of docker containers, which Proxmox doesn't natively support. Instead I created a Debian 12 LXC for immich and installed docker, using Docker Compose to get a working system.
Google Takeout for Photos
This was actually the most time-consuming step in the process: I used Google Takeout to export my photos collection and schedule five more Takeouts every two months, spanning a year in total. The first export took a few hours to prepare, and then an entire day to download. It comprised fifteen ZIP files in all, the first fourteen being 50 Gigabytes in size and the last being the rest.
The ZIP files are so large because they are full of duplicates. The entire photo library is included, and every album. Every time a photo appears in an album, an entire additional copy of it is added to the ZIP file. For over a decade I've zealously made albums for every trip to the Zoo, every school event, every trip, and the duplication of a substantial percentage of the photo library adds to the size of the download. Don't worry though, the process of importing the collection into immich will deduplicate them as well.
Being Google, the Takeout also contains JSON files for any metadata about photos it has. For example if you manually add a location Photos does not add that location to the JPEG EXIF data, it provides it in the JSON file instead.
Once downloaded, the ZIP files can be left as-is — the next step can process the ZIP files directly. You don't need to unpack them.
immich-go
Immich-go is an alternative CLI for immich written by Jean François Cassan. One of the things it can do is import Google Takeout ZIP files. It makes a first pass collecting images and their associated JSON. Given an immich API key it then uploads the deduplicated images, creating all Albums contained within the Takeout.
After about 12 hours running, immich0go had uploaded about 60,000 photos to immich.
immich facial recognition
Over the next several days, immich gradually recognized faces in photos and began associating them together. This, unfortunately but understandably, is not something exported from Google Takeout. The carefully curated set of identified people from Photos is left behind at Google, instead I'll need to recontruct it afresh within immich.
On the bright side, immich thus far appears to be very accurate in its groupings, even moreso than Google's implementation. It doesn't conflate different individuals together quite so often.
Next steps
I've been happy with the results thus far. Google Takeout's first scheduled incremental export a the two month mark is coming up in a couple weeks. I'll export another, presumably much smaller, Takeout and see how well immich-go handles it.