Move Google Photos into Immich

Takes an evening, most of it waiting

Your whole Google Photos library running on your own server, with the dates Google kept in sidecar files written into the photos themselves so Immich sorts them correctly.

Why bother

Immich gives you the parts of Google Photos worth having - search, albums, phone backup - without the account, the scanning or the subscription.

The bit people get wrong. Takeout puts the real capture date in a JSON file beside each photo rather than inside it. Import the photos without dealing with that and your entire library dates from the day you downloaded it.

What actually goes wrong

Open every Takeout part together, not one at a time
Google splits the export and does not keep a photograph and its metadata file in the same zip. Open part three alone and those photographs lose their date and place, because the JSON describing them is in part seven.
Immich's import path is the container's path
The path you give an External Library has to be the one Immich sees inside its container, not the one you use on the host. A scan that runs happily and finds nothing is almost always this.
Takeout is bigger than your library, and that is expected
A photograph in an album and in its year folder is exported once for each. They are byte-identical, so the duplicate pass folds them together - but do not panic at the download size.
1

Ask Google for your data

Free, and required by law - but it takes minutes to a few days depending on size, so start it now and come back. The full guide has the steps and the traps.

The Google guide

2

Open it in your browser

Drop the archive into Muletto. It is read on your own machine - nothing is uploaded - and you get a timeline, your pictures, your conversations and a map of where you have been. Open several exports together and they merge into one library.

Large archives are fine. They are read in pieces rather than loaded whole, so size is not the limit it usually is in a browser.

Open an export

3

Clean it up before you move it

This is the step worth not skipping, because it is far easier now than once the files are spread across a disk.

  • Duplicates across services. The same photo backed up to two places is one photo. Muletto finds byte-identical copies and near-copies - a burst, a crop, a re-save - and you choose what a tidied library keeps.
  • Dates that got lost. Exports routinely strip the capture date, so everything looks like it was taken the day you downloaded it. Muletto reads the real date back out and writes it into the file itself.
  • Places. Where the coordinates survived, they are written back in too, so whatever you import into can put things on a map.
4

Put it on Immich (self-hosted)

Muletto writes the tidied library straight out - into dated folders on a drive or a network share, or as a single archive. You choose the arrangement, and it writes an index of everything it wrote.

The destination guide covers the part that happens at the other end.

The Immich (self-hosted) guide

When it is done

Your whole Google Photos library running on your own server, with the dates Google kept in sidecar files written into the photos themselves so Immich sorts them correctly.

Check it worked. Scroll back several years in the Immich timeline. If everything sits on the day you imported, the dates did not make it and it is worth repairing them again before you delete anything from Google.

Keep the work file Muletto offers at the end. Export again next year and it recognises everything that carried over, so none of this has to be done twice.