I was sitting there one Sunday afternoon scrolling through my phone’s camera roll looking for a photo of Kade from when he was first born, and I spent ten minutes finding nothing. The picture existed. I knew it existed. I had taken it myself. But between four NAS units, a camera roll, a shared iCloud album Kimberly had started, and whatever Lauren had sent over text, I had no idea which container it had landed in.
That’s the thing nobody tells you about accumulating storage. Raw capacity doesn’t mean your data is actually accessible to you. I had the space. I didn’t have the system. And for photos specifically, that gap is a different kind of painful than losing a config file.
I’d been putting off a dedicated photo solution for a long time. Too long, honestly. The NAS units were handling the heavy lifting, backups were running, and I kept telling myself that was good enough. But “backed up” and “organized and findable” are two different things, and somewhere around Kade’s first few months of life I ran out of excuses to pretend otherwise.
So I stood up Immich.
Getting Immich Running on the Homelab
Immich is a self-hosted photo and video management platform that is, in plain terms, trying to be Google Photos without Google. It’s Docker-native, actively developed, and has been on my radar for a while. I’d read about it. I’d bookmarked it. Classic optimization-as-procrastination. I knew the tool existed and kept not pulling the trigger.
The actual deployment isn’t complicated if you’ve run Docker Compose before. Immich provides a well-maintained docker-compose.yml and a .env file that handles configuration. You set your upload directory, your database credentials, a couple of environment variables, run docker compose up -d, and you’ve got a working instance in under ten minutes. The stack spins up several containers: the main Immich server, a microservices worker, a machine learning container for face recognition and smart search, Redis, and Postgres. It’s not lightweight, but on any modern homelab box with 8GB of RAM and a halfway decent CPU, it runs without drama.
I pointed the upload volume at a directory on Lamont, which is where I keep documents and pictures already. That wasn’t a complicated decision. The important part was making sure that directory is inside whatever backup job is already running, which in my case it was. Don’t let a new tool create a new data island. The photo files need to live somewhere that’s already being protected.
The mobile app is where it starts to actually feel like something. You install Immich on your phone, connect to your instance (I run mine behind Caddy with a subdomain), set up automatic backup, and your camera roll starts syncing to your server. Not to Google’s server. Not to Apple’s server. To your server. That part still hits different when you watch it happen the first time.
Face recognition runs locally through that machine learning container. It’s not instant and it’s not perfect, but it found Kade across dozens of photos on its own and grouped them without me doing anything. That’s the feature that closed the loop emotionally. I searched “Kade,” and pictures came up. Not all of them. But enough. For the first time I felt like I actually had a photo library instead of a photo pile.
Now, a few things worth knowing before you go set this up:
The machine learning container is the resource hog. If you’re running this on something with limited RAM, you can disable smart search and face detection and still have a perfectly functional photo library. You lose the AI features but you keep the organized timeline view, albums, sharing, and mobile sync. It’s worth considering whether your hardware justifies running all of it.
The initial library scan takes time proportional to your existing photo collection. I had a few thousand photos from the phone and various sources I imported. The ML processing ran for a couple of hours. Plan accordingly and don’t panic when the “processing” indicator just sits there.
External libraries work, but they work differently than the main upload directory. Immich can read photos from a folder without importing them as managed files, which is useful if you’ve got an existing organized directory structure you don’t want to disturb. I’m still working through how I want to handle the historical archive versus new incoming photos. That’s a project in itself.
The sharing features are solid for family use. Kimberly now has an account on the instance. Lauren has one. I can share albums directly with them, they can add photos to shared albums from their phones, and we have one place where family photos actually live together. No more digging through iCloud shared albums that may or may not have synced correctly.
One real pitfall: Immich is under active, fast development. That’s a good thing for features and a thing to be careful about with updates. They are not shy about making breaking changes between versions. Read the release notes before you update. Seriously. Pull the notes, check for migration steps, then update. I’ve seen people in the community get burned by skipping that step. Set a maintenance window, treat it like a real service, and you’ll be fine.
What I didn’t expect was how much it changed the way I interact with my own photos. When photos were scattered across devices and NAS shares and shared albums, I basically stopped looking at them except when I had a specific reason to search for something. Now I actually browse. The timeline view is just there, it works, and scrolling through the last seven months of Kade’s first year of life is something I now do without thinking about it.
That’s not a technical outcome. That’s a human one.
I’ve been in IT for 28 years. I know how to store data. I’ve been storing data longer than most people reading this have been using a computer. But storing something and having it actually integrated into your life are two completely different problems, and I let my competence in one area blind me to the failure in the other.
The photos weren’t lost. They were just inaccessible in the way that matters, which is casually, without effort, when you just feel like looking at them.
If you’ve got a homelab and you’re still relying on Google Photos or iCloud for your family photos by default rather than by choice, Immich is worth a Sunday afternoon. The deployment is straightforward, the mobile experience is genuinely good, and the first time you search for a person’s face and it actually works on your own hardware, you’ll understand why people get excited about this one.
My grandson is seventeen months old. I’m not going to trust those pictures to a company’s business model decisions. That’s not ideology. That’s just sense.