Tools · · 7 min read

I Asked a Robot How to Fix iPhoto Search. Three Hours Later I Was Debugging Docker.

Immich gives you Google Photos-style AI search over your own photo library, hosted on your own hardware. Getting there on Windows is mostly straightforward, with a few walls nobody warns you about.

I have a problem. I have tens of thousands of photos and no good way to search them.

The Photos app on macOS would like you to believe it has search. It doesn't. It has a suggestions engine that shows you pictures from "One Year Ago" and groups your dog into a folder called "Unnamed Person." If you want to find a specific photo of, say, your cat sitting on the roof of a car at your cousin's wedding in 2019, you're on your own.

So I did what any reasonable person does in 2026: I asked an AI what to do.


The Conversation That Started All This

I wasn't looking to build anything. I just wanted to search my photos the way Google Photos lets you search: natural language, no tagging, no manual organization. Just find me the sunset photos from the mountains and have it actually work.

Claude walked me through the options. Google Photos can do it, but your photos go to Google's servers. Apple Intelligence is improving, but slowly. And then there's a third option: run the whole thing yourself, locally, with a tool called Immich.

Immich is open source, free, and uses the same kind of AI search (called CLIP) that Google Photos uses. Except everything stays on your own hardware. No subscription, no data mining, no one training their models on pictures of your kids.

I was sold. Then Claude told me I'd need Docker, and that's where the adventure began.


What Is Immich?

Immich is a self-hosted photo and video management tool. It looks and works like Google Photos: web interface, native iOS and Android apps with automatic backup, face recognition, map view, shared albums, and AI-powered search that understands natural language queries.

It's actively developed (version 2.6 dropped the same day I was setting it up), has 90,000+ stars on GitHub, and a genuinely helpful community. It's not an abandoned side project.

The catch is you have to run it yourself. That means Docker.


My Setup

I'm running this on a Windows gaming laptop, an ASUS ROG Strix G15 with an NVIDIA RTX 3070 and 32GB of RAM. Overkill for photos, but it's what I have, and the GPU will help with the AI indexing down the road.

I also had WSL2 (Windows Subsystem for Linux) already installed, which turned out to matter.


The Install: What They Don't Tell You

The official docs make it look simple. It mostly is, except for a handful of gotchas that aren't documented anywhere obvious.

1. You Don't Need the Full Source Code

My first instinct was to clone the GitHub repo. Don't. Immich is meant to be run via Docker, not built from source. All you actually need is two files:

  • docker-compose.yml
  • .env

Grab them in PowerShell:

Invoke-WebRequest -Uri "https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml" -OutFile "docker-compose.yml"
Invoke-WebRequest -Uri "https://github.com/immich-app/immich/releases/latest/download/example.env" -OutFile ".env"

Note: PowerShell's curl is an alias for Invoke-WebRequest, not bash's curl. Same with mkdir: use New-Item -ItemType Directory on Windows.

2. WSL2 Needs to Already Be Set Up

Docker Desktop on Windows uses WSL2 under the hood. If you haven't set it up before, Docker will walk you through it. In my case WSL2 was already installed (I had Debian running), so this was a non-issue. Worth checking before you start:

wsl --status

You want to see Default Version: 2.

3. Windows Firewall Will Block Your Phone

Once Immich is running, you'll want to connect the mobile app. It won't find your server. This isn't a configuration problem. Windows Firewall is silently blocking the connection on port 2283.

Fix it by running this in PowerShell as Administrator:

New-NetFirewallRule -DisplayName "Immich" -Direction Inbound -Protocol TCP -LocalPort 2283 -Action Allow

Then point the app at http://[your-local-ip]:2283. Include the http:// explicitly since the app sometimes needs it.

4. exFAT Drives Don't Work With Docker

This one cost me the most time. I have a 4TB external drive formatted as exFAT (it needs to work with both my Mac and Windows machine). I pointed Immich's upload location at it and got a cryptic "no space left on device" error, even though the drive had 3.5TB free.

exFAT is not supported by Docker/WSL2 for volume mounts. You need NTFS.

Your upload location needs to be on an NTFS drive. For most Windows machines that's your C: drive, or a dedicated external formatted as NTFS.

5. The Storage Display Is Misleading on Windows

Before I figured out the exFAT issue, Immich was telling me I had 135MB of storage. Terrifying. It was reporting the size of Docker's internal volume, not my actual drive. Once the mount is working correctly it'll show your real drive space.

6. Immich Needs Marker Files in Each Subfolder

When you change the upload location and restart, Immich may refuse to start with an error like:

Failed to read /data/encoded-video/.immich

This is Immich's way of verifying the mount is actually working. It expects a hidden .immich marker file in each of its subdirectories. If you change locations, create them manually:

$base = "C:\Users\yourname\Pictures\immich-upload"
@("upload", "thumbs", "profile", "encoded-video", "backups", "library") | ForEach-Object {
    New-Item -ItemType Directory -Force -Path "$base\$_"
    New-Item -ItemType File -Force -Path "$base\$_\.immich"
}

Then restart Docker and it should come up cleanly.


Where Things Stand

After all that, Immich is running. The mobile app is connected. Phone photos are backing up automatically. The web interface is fast and clean and looks like a product someone actually cared about.

The big task still ahead is getting my existing photo library into Immich. Tens of thousands of images sitting on that exFAT drive is a separate adventure involving External Libraries, a dedicated NTFS drive, and a tool called immich-go that handles bulk imports much better than the official CLI.

And then the real payoff: semantic search. Being able to type "cat on roof" or "hiking trail foggy morning" and have it find the right photos. That's the whole reason this started. I'll write that up when I get there.


The Takeaway

If you're frustrated with iPhoto search and don't want to hand your photo library to Google, Immich is worth the effort. It's real software, actively maintained, and genuinely impressive once it's running.

The Windows install has more friction than Linux, but it's doable. The gotchas above would have saved me a few hours.

And if you're wondering whether an AI can guide you through the whole thing: yes, mostly. It's a good way to work through something unfamiliar. Just be prepared for a few walls that even the robot didn't see coming.

Running Immich v2.6.1 on Windows 11, Docker Desktop with WSL2 backend.