So this is one of those posts that started as a Sunday afternoon project and ate my whole week. I finally moved our family photo library off Google Photos and onto a self-hosted Immich instance running on an old mini PC in the closet. I've been threatening to do this since roughly 2019, and I want to write down what actually worked before I forget half of it.
Backstory: we've got about 41,000 photos and a couple thousand videos going back to 2011, split across three Google accounts because my wife and I never consolidated after we got married, and my kid has his own account now too since school issued him a Chromebook. Google Takeout exports were the easy part, honestly — you just request the archive, wait (mine took almost 19 hours to generate), and download a pile of zip files. The annoying part is Takeout strips a lot of the metadata into sidecar JSON files instead of writing it into the photo itself, so if you don't handle that step right you end up with 40,000 photos all dated the day you exported them. Nobody wants their 2013 beach trip showing up as "today" in the timeline.
What I actually used
I run Immich in Docker on a Beelink mini PC I bought two years ago for about $180, which normally just handles Pi-hole and a couple of Home Assistant automations. Immich's docker-compose setup is genuinely painless if you've done any self-hosting before — copy the example .env, drop in a Postgres password, point it at a data directory, docker compose up -d, and you've got a working instance on your LAN in maybe ten minutes. Getting it reachable outside the house took longer because I was fighting with my router's port forwarding rules for reasons that turned out to be a stale DHCP reservation, not anything Immich related. That was a dumb hour and a half I won't get back.
For the metadata problem, there's a script called google-photos-takeout-helper that basically reads those JSON sidecar files and writes the correct EXIF timestamps and GPS data back into each photo before you import anything. Don't skip this step. I did skip it on my first attempt, imported 12,000 photos with garbage dates, and had to wipe the library and start over. Once I ran the helper script properly, the import into Immich preserved dates, locations, even the original album groupings close enough that I didn't have to manually rebuild anything major.
The stuff nobody tells you
Face recognition and search are the two features that actually sold my wife on switching, not the privacy angle, which tells you something about how most people actually think about this. Immich's ML features (face grouping, "search for dog on beach" style natural language search) run locally if you enable the machine learning container, and on the mini PC it's slow but it works. A full face-detection pass over 41,000 photos took most of a night running on CPU alone. I'm tempted to throw a cheap GPU in there at some point just to speed that up, but I haven't justified the expense to myself yet.
The other thing worth knowing: mobile backup. The Immich app on iOS and Android does background upload from your camera roll pretty much identically to how Google Photos does it, which matters because that's the actual daily use case, not the migration itself. Once that's set up and reliable, the original Google Photos apps basically become dead weight you can delete.
I haven't turned off the Google accounts entirely yet. I'm the kind of person who keeps a backup of the backup, so for now the export sits untouched on an external drive and Google Photos still has everything too, I just don't add to it anymore. Eventually I'll actually delete the source, but I want a solid three or four months of the new setup working without a hiccup before I trust it with the only copy of, say, my son's first steps.
Total cost for all this: the mini PC I already owned, an 8TB drive for local storage I bought at $139, and about a weekend and a half of actual hands-on time spread across two weekends because the first one got derailed by that bad import. Compared to what Google One storage was costing us across three accounts, it pays for itself in under a year. Whether that math matters to you depends entirely on how much you care about somebody else holding onto every photo your kid has ever been in, which, increasingly, is a thing I care about a lot more than I used to.