Privacy

Immich Setup on an Old Laptop: How I Moved My Google Photos Home, With Claude Code Doing the Typing

Your old laptop can be a full replacement for Google Photos. You open your photos on your phone from anywhere, just like Google Photos. New pictures back up from the phone on their own, and the whole library is backed up again every night. And it's free: Immich, Coolify and the Cloudflare Tunnel cost nothing, and there's no monthly bill. The only thing I paid for was a case for the backup drive.

Mine runs on a Lenovo ThinkBook I wasn't using. It holds everything now: 18,814 pictures and 1,131 videos, from 2002 to this year. I don't worry about Google storage any more. And I didn't type the setup myself. Claude Code did.

18,814 photos. One old laptop.
18,814 photos. One old laptop.
My whole Google Photos library, on a server at home that I can hold in one hand.

A storage warning and an old laptop

Google kept warning me my storage was almost gone, and an old laptop was lying around doing nothing. That's how this began. A Google Account gives you "up to 15 GB of storage", and Gmail, Drive and Photos share that one pool, as Google One's help page notes. My photos alone take about 62 GB.

I had the usual choice. Pay every month for extra space, or sit and delete things from old albums. I've written up both, and what Google One costs in India, in Google storage full: what to delete. Neither felt right for twenty-four years of photos.

The machine was a Lenovo ThinkBook 13s Gen 2. Inside: an Intel Core i7, four cores, 16 GB of RAM and a 512 GB SSD. It wasn't new, but nothing was wrong with it. I'd heard of Immich, which calls itself a "High performance self-hosted photo and video management solution". Its requirements page asks for 6 GB of RAM at the least and 8 GB ideally, and 2 to 4 cores. The laptop had room to spare.

I wasn't looking forward to the setup. That's where Claude Code stepped in.

Handing my Immich setup to Claude Code

For my Immich setup I leaned on Claude Code, Anthropic's coding agent, running on my Mac. Anthropic describes it as a tool that "reads your codebase, edits files, runs commands". It's built for software projects. I pointed it at the laptop instead. It logged in over SSH and got on with the work.

I asked for things in plain English, one by one. First, the login: drop passwords and use a key instead, so nobody can guess their way in. Next, install Coolify. Put Immich on it, and let the laptop's Intel graphics handle face recognition and search. Make it reachable from outside the house without opening anything on my router. Bring over my Google Photos and keep the albums. Each time, it went away, did the job, and came back with it done.

Honestly, it was super simple. I never thought I'd say that about setting up a Linux server.

One old laptop, three layers
Coolify runs Immich on the laptop, and a Cloudflare Tunnel lets my phone reach it from anywhere without opening a single port on the home router.

What it built has three layers. Coolify is "an open source, self-hostable platform for deploying and managing applications, databases, and services on servers you control". It runs each app inside a Docker container and gives me a dashboard. That turns Immich into a page I can click instead of a heap of config files. Immich itself is four containers: the server, a Postgres database, Redis, and a machine-learning container made for Intel chips, with the laptop's graphics passed through to it. Immich's docs say that kind of hardware acceleration speeds up "Smart Search and Facial Recognition".

The third layer is a Cloudflare Tunnel. A small program called cloudflared sits beside Immich and reaches out to Cloudflare. Nothing at home waits for incoming traffic, and my router has no open ports. The tunnel is managed from the Cloudflare dashboard. The laptop keeps only a token.

You still have to understand what's happening. Claude Code types quickly, but it only builds what you ask for. The asks that mattered came from knowing a little: no open ports, keys instead of passwords, a backup that actually gets checked. Leave those out and you'd still get a server that works. It would just be less safe.

From Google Takeout to Immich

Google Takeout to Immich turned out to be the easy part. I exported my library with Google Takeout, which hands you your photos as a set of zip files. Downloading them "doesn't delete it from Google's servers", so nothing is at risk while you try this.

The archives aren't a tidy library, though. Each photo's details sit in little JSON files next to the pictures. That's why Claude Code used immich-go, a single program that "intelligently matches photos with their JSON metadata to preserve albums, descriptions, and locations". It needs an Immich API key, and that's about it.

immich-go upload from-google-photos --server=<your Immich address> --api-key=<key> takeout-*.zip

All 34 albums made the move. Scroll to the end of the timeline now and you reach 2002, on a laptop in my own house.

The phone that backs itself up

The phone that backs itself up is what made this feel like Google Photos. It's the same habit as Google Photos backup, but the files go to my own laptop. On 20 October I signed in to the Immich app on my Android phone. The Takeout import finished on 22 October, and the app took over. I took 7 photos today. They're already on the server.

Setting it up is short. On the app's backup screen you pick which albums on the phone to back up. Immich's mobile backup page says the app will "upload new photos and videos from selected albums when you open or resume the app", and it also runs now and then in the background. "By default, Immich will only upload photos and videos when connected to Wi-Fi", and you can change that. On Android you can also let the background task run only while the phone is charging.

The same page adds a warning: "some Android models are very strict with battery optimization settings". That can stop background uploads, so check yours.

The pictures stay on your phone. The app has a Free Up Space button that removes the ones already saved to the server. They drop into the phone's trash, and you empty that by hand. It's there for the day the phone runs out of room.

The app isn't just for uploads. The phone gets the timeline, search and face groups too, as the Immich README lists. And through the Cloudflare Tunnel, the phone can reach the laptop from outside the house.

A backup drive from another old laptop

The backup came from another old laptop. I found one, took out its NVMe SSD and bought a USB NVMe enclosure for it. It's a 256 GB drive, which reads as 238.5 GB once it's plugged into the server over USB. My 62 GB library fits with room to spare.

Every night at 3 a.m.
Every night at 3 a.m.
An encrypted copy on a second SSD, checked again every Sunday.

Claude Code also wrote the backup script, and the timer that fires it. Each night at 03:00, give or take up to 15 minutes, the laptop backs itself up. If it was off at 3 a.m., the job runs when it starts up again.

The script dumps the databases first, Immich's included. You can't safely copy a database's files while it's running. That can give you a broken copy. Immich's own backup guide says to back up "the database first, and the filesystem second", and the script follows that order.

Then it copies the Coolify data, Immich's photos and data, and those fresh dumps into an encrypted restic repository on the drive. restic only writes what's new each night. It keeps 7 daily, 4 weekly and 6 monthly snapshots and lets older ones go, using its forget rules.

On Sundays it also reads back a sample of the backup to check it, using restic's check command. A backup nobody has read back is just a guess. The last run, at 03:12 on 25 October 2026, reported backup ok and verify ok.

It's not finished. Immich's README asks you to follow a 3-2-1 plan, which Backblaze sums up as "three copies of your data on two different media with one copy off-site". One copy on a second drive is a start. The script backs up to every connected drive labelled for backup, so the next step is a second drive that lives somewhere else.

Living with my own photo server

Living with my own photo server is quiet. The storage warnings have stopped. All my pictures sit on a drive I can hold. Immich groups the faces, and its search finds an image from a few words of description.

The laptop doesn't only hold photos any more. Once Coolify was there, trying a new app took a few clicks, so I keep adding things. Jellyfin streams my own videos and music to the TV and phone. Gokapi gives me download links for big files, which expire when I want them to. And there's usually some random app I'm testing that week. Immich still has the machine mostly to itself.

The catch is that I'm the administrator now. Coolify says so plainly: you stay responsible for updates, SSH access, firewalls, backups and security. Power cuts, updates and the router are my headache, not Google's. For my own photos, I'm fine with that. If looking after a machine sounds tiring, keep paying Google, and you won't be wrong.

Immich solves one problem: my own library. The problem I work on at AccioPix is a different one. At a wedding, every guest wants the photos they're in, not the whole shoot. The photographer uploads the album once, a guest sends a selfie on WhatsApp, and they get back their own photos. Photographers pay ₹0.20 per photo; the rest is on the pricing page, and AccioPix for photographers shows how it fits after the edit. Why a shared Google album struggles at a wedding is in Google Photos shared albums for weddings.

What's running, as of October 2026

  • The laptop: Lenovo ThinkBook 13s Gen 2, Intel Core i7-1165G7, 16 GB RAM, 512 GB SSD, Ubuntu 26.04.1 LTS.
  • Coolify 4.5.0: runs everything as Docker containers, with its Traefik proxy.
  • Immich 3.3.3: server, Postgres, Redis, and machine learning on the Intel graphics.
  • Cloudflare Tunnel: cloudflared 2026.10.1 in a container, no ports open at home.
  • Backup: restic to a 256 GB NVMe in a USB case, every night, checked on Sundays.
  • Also on it: Jellyfin, Gokapi, and whatever app I'm trying out that week.
  • The library: 18,814 photos, 1,131 videos, 34 albums, about 62 GB, 2002 to 2026.

Frequently asked questions

Can I use an old laptop as a server?

Yes, it works well for a photo library. Immich needs at least 6 GB of RAM and 2 processor cores, and recommends 8 GB and 4 cores. My laptop runs Ubuntu with 16 GB and a four-core Intel i7. Keep a backup on a second drive.

Is Immich a good Google Photos alternative?

For your own library, yes, if you're glad to look after a server. Immich backs up photos from its phone app, groups faces, and finds pictures from words you type. The catch is that updates, power and backups fall on you. Immich's own README tells you to keep a 3-2-1 backup.

How do I move Google Takeout to Immich?

Export Google Photos through Google Takeout and download the archives. Next, create an API key in Immich and run immich-go on those files. It links each photo to the details Takeout saves beside it, so albums, descriptions and locations all carry across. All 34 of my albums arrived intact.

How do I access Immich remotely without opening ports?

Use a Cloudflare Tunnel. A small connector called cloudflared sits beside Immich and calls out to Cloudflare, so nothing on your home network waits for incoming connections. You pick the public address in the Cloudflare dashboard. I run cloudflared in a container next to Immich, and my router has no open ports.

Does Immich need Docker?

Yes. Immich runs inside Docker containers, started with the docker compose command, and its docs suggest a 64-bit Linux such as Ubuntu or Debian. If you'd rather not handle containers by hand, a self-hosting platform like Coolify runs them for you and gives you a dashboard.

References

Send every guest their photos

Sign in with Google. Your first 20 credits are free, enough for 100 photos, and there's no card to add.


AccioPix

← Back to Blog