Traditional photo libraries like Amazon or Google Photos will sell and use my media to build an AI and advertising profile on my family, and they can refuse me access to my photos. I get to “own nothing and be happy.” Well, I’m not happy with that offer—I’ve used Windows before, so I know when I’m being screwed over. (Or I’m paranoid.) I deleted my Google account two weeks ago, and the only loose end was to get my wife off of paying for iCloud photos.
I had my photos on my laptop, and my wife’s photos on her laptop, and I used Kopia to create system backups/snapshots of both machines. These backups went to both my Filen cloud storage and an SSD mounted on my Raspberry Pi 4. Even with this, Apple Photos presented photos in an easy-to-digest UI, decoupled from any file system. There was only one competitor to Apple, Amazon, and Google for photo management. Today, it is the most popular, full-featured, free and open source (FOSS) image management platform: Immich.
Immich comes with:
- thumbnail generation
- video transcoding
- smart context-based search
- photo stacking
- user management with upload restrictions
- Redis job/queue managemen
- facial recognition and people grouping
- duplicate photo detection
- archiving and soft deletion
- public QR code/link album and photo sharing
- slideshows
- and more!
I could’ve synced my family’s existing media folders to my Pi’s SSD with Syncthing, and then scanned the syncs as external libraries, but then Immich would be a photo viewer, not a photo manager.
Setting up Immich itself was like setting up any other self-hosted container service. Get the sample/default Docker Compose files, create the Podman containers in Komodo with a shared network, and deploy them behind my Netbird VPN. Immich needs 4 containers: Redis for job management and queues, Postgres for all non-image data, a server for web and mobile clients, and a machine learning instance for the LLM jobs.
I learned too late that Immich is flaky and slow when using network drives or cloud storage solutions as their primary storage mechanism. Cloud storage is good for backups; hot storage should be on local drives. So, I had to delete and re-upload my entire photo library after my media migration.
Soon after that, I learned about image ownership… You guessed it: the hard way. I assumed I could be transfer images with ease between different user accounts, and that they were structured by date (or something) in the filesystem by default. Both assumptions were false. You can’t transfer ownership of photos, only make copies of them. And, by default, if I don’t apply a storage template, all photos get saved as generic blobs in the filesystem. So I had to restore the system again. There were other unnammed preventable user-errors that resulted in further system restores.
Hey, nobody’s perfect.
Once the system was ready, getting my family set up with Immich was simple! On their phones, I installed the Netbird and Immich apps, pointed Immich at the *.netbird.cloud Raspberry Pi address, gave them their user accounts, and backed up their local media libraries to free up space on their phones. As for the backups of Immich itself, both the database and photo library are rsynced (is that a word? I don’t care, I’m making it so!) to my cloud storage. I don’t care for snapshots because Immich handles recovery like every other photo system—trash each image, with the option to recover.
That’s it! I could’ve done this better, but it was fun getting to view the final result.
