Home ยท Volume 2 ยท Chapter 02

๐Ÿ“– Chapter 02 โ€” Photos

The family photo library. The highest-value data on the NAS, the app the family will use most.

v0.1 ยท draft Vol 2 ยท Ch 02
~15 min

Learning Objectives

Why Immich

Immich is a self-hosted photo and video manager. Think Google Photos, but on your hardware. It does:

It's free, open-source, and the most actively-developed photo app for self-hosted setups. The mobile app is good (iOS and Android). The web UI is good. The ML runs on your NAS (using CPU or GPU if available).

Initial setup

From Volume 1, Chapter 08: you already installed Immich. Now we're going to configure it for the family.

  1. Open the Immich web UI (at http://<nas>:3001 on the LAN, or via Tailscale remotely).
  2. Log in as the admin user you set up during install.
  3. Administration โ†’ Users โ†’ Create User. Create one Immich user per family member. For TK's build: tk, Mimi, Lai.
  4. For each user, set the role: admin for TK (so TK can manage the install), user for the rest.

Storage location

During install, you mounted /mnt/tank/Apps/immich. Immich creates subdirectories inside it:

/mnt/tank/Apps/immich/ โ”œโ”€โ”€ upload/ โ† the actual photo files โ”‚ โ”œโ”€โ”€ library/ โ† original-resolution library โ”‚ โ”œโ”€โ”€ thumbs/ โ† thumbnails โ”‚ โ”œโ”€โ”€ encoded-video/ โ† transcoded videos for streaming โ”‚ โ””โ”€โ”€ profile/ โ† user profile pictures โ”œโ”€โ”€ postgres/ โ† Immich's database (don't touch) โ””โ”€โ”€ cache/ โ† ML model cache

The upload/ directory is what gets big. For a family taking 10,000 photos a year, expect 50-100 GB of originals per year (more if there are videos). This dataset is already covered by the Apps snapshot policy.

The mobile app

Each family member installs the Immich mobile app. The setup:

  1. Install from the App Store / Play Store.
  2. Open the app. It will ask for the server URL. This is the NAS URL with port 3001 (or your Tailscale URL).
  3. Log in with the user's Immich credentials.
  4. Grant the photo library permission.
  5. Configure backup:
    • Toggle Backup on
    • Choose "Wi-Fi only" (saves cellular data)
    • Choose to back up original quality (full resolution) or "high quality" (compressed, unlimited storage)
  6. Wait. The first backup can take a while (depending on how many photos are on the phone).

What "original quality" vs "high quality" means

Immich has two upload modes:

For a home NAS where you have 44TB of usable space, always use original quality. The point of the NAS is to have the originals. If you wanted compressed copies, you could stay on Google Photos.

Library and search

Once photos are uploaded, the family can browse them in several ways:

Timeline view

The default view in Immich is a vertical timeline of all photos, grouped by date. Scroll to browse. Click to open. The simplest possible interface.

Search

Immich's search uses both metadata (date, location) and ML (objects, faces, scenes). Examples of searches that work:

Map view

If the photos have GPS metadata (most phone photos do), the map view shows them pinned to the location they were taken. The conversation's recommendation: enable this. It's the "wow" feature for the family.

Albums

Users can create albums manually (drag photos into a new album) or use smart albums (criteria-based, e.g. "all photos from the Hawaii trip"). For the family, the most useful albums are usually:

Face recognition and people

Immich automatically detects faces in uploaded photos. It groups similar faces together, but it doesn't know who they are โ€” that's where you come in.

  1. Immich's Explore view shows a "People" section with all detected faces.
  2. Click a face cluster. Add a name ("Mom", "Dad", "Emma").
  3. Immich now knows: every face in that cluster is that person.
  4. You can merge two clusters if Immich split the same person into two groups (very common with kids โ€” they look different at different ages).
  5. You can also name a cluster "Not a person" to ignore it (artwork, statues, etc.).

The first time you do this, expect to spend 30-60 minutes. Immich has to process every photo. After that, the model is smart enough that new uploads get auto-tagged if the face matches a known person.

Sharing

There are two ways to share:

Share with other Immich users

Open a photo or album. Click Share. Type the other Immich user's name. They can see it in their library.

Share via public link

Open a photo or album. Click Share โ†’ "Create public link." Immich generates a URL that anyone can open in a browser to see the photo. You can set:

This is the right way to share "here are the photos from the wedding" with grandma. Generate a link, send it via Signal/iMessage, set an expiration. Done.

Common mistake

Sharing a public link with a long expiration "just in case." The link can be discovered or forwarded. Set a reasonable expiration (30 days, 90 days) and rotate the link when needed. Public links are the most common way private photos leak.

Migrating from Google Photos or iCloud

Most families have years of photos in Google Photos or iCloud. The conversation's recommendations for migrating:

From Google Photos

  1. Use Google Takeout to download all your photos. Google provides a zip of everything.
  2. Immich has a CLI tool called immich-go that can import from a Google Takeout export. It preserves dates, albums, and favorites.
  3. After import, verify a few photos look right. Check that dates are preserved (Google sometimes changes them).
  4. Disable Google Photos backup on your phone (so new photos only go to Immich, not Google).
  5. After a month of Immich-only photos, you can delete the Google Photos library if you want.

From iCloud

  1. On a Mac, enable "Download originals to Mac" in iCloud Photos.
  2. Use the Mac's Photos app to export everything as a folder structure.
  3. Use immich-go to import the folder into Immich.
  4. Disable iCloud Photos backup once you're sure Immich is working.

Both

The migration takes hours of waiting (downloads + uploads), but the actual setup is minutes. Do it on a weekend when you don't need either service for a day.

Hardware: ML and transcoding

Immich does some heavy lifting:

For a 4-person family with normal photo usage, CPU-only is fine. If you have a hardware transcoder (Intel iGPU, NVidia GPU), configure Immich to use it in Administration โ†’ Settings โ†’ Transcoding.

The "ops dashboard" the family uses

For a family, Immich is the only photo interface that matters. Don't also offer the SMB share \\NAS\Photos for direct file browsing. That's two ways to do the same thing, and the family will be confused.

Pick one: Immich for everything. The SMB Photos share can still exist for TK's own use (managing files, copying to external drives), but it shouldn't be the family's primary interface.

Engineering Note

The best photo system is the one the family actually uses. It doesn't matter how good the ML is if the photos sit on a phone forever. It doesn't matter how good the search is if the family doesn't know to use it. The success metric for this chapter is: does the family use Immich? If yes, the chapter worked.

To make the family use it: set it up on everyone's phone in one sitting, in person, with them. Show them one search. Show them the timeline. Show them the map. Don't write a manual. Don't make a video. Just show them, once, in person.

Summary

Immich is the family photo library. One user per family member. Original quality uploads. Face recognition takes 30-60 minutes of initial labeling. Search, maps, and albums replace the iCloud/Google Photos experience. Public links for sharing with grandma; explicit expiration. Migrate from Google/iCloud on a weekend. The success metric is whether the family actually uses it.

Checklist

Looking Ahead

Chapter 03 is the videos chapter. Jellyfin is to Netflix what Immich is to Google Photos. Same principle: one app, used by the whole family, replacing a cloud service. But with the added wrinkle of transcoding and bandwidth.

Ch 02 ยท v0.1 ยท drafted from the original ChatGPT conversation, July 2026