Google Photos exporteren en importeren in Immich met immich-go

Ik ben bezig geweest met het migreren van mijn Google Photos naar Immich. Dat kan handmatig, maar de beste manier is wat mij betreft via immich-go. Die tool is speciaal handig voor Google Takeout exports, omdat hij niet alleen losse foto’s uploadt, maar ook probeert om metadata, albums, duplicates en Google Photos JSON-sidecars netjes mee te nemen.

Ik liep zelf tegen een paar dingen aan, dus hierbij een praktische handleiding.

1. Google Photos exporteren via Google Takeout

Ga naar Google Takeout:

  1. Kies eerst Deselect all.
  2. Vink daarna alleen Google Photos aan.
  3. Klik op Next step.
  4. Kies als exporttype bijvoorbeeld .zip.
  5. Kies een grote bestandsgrootte, bijvoorbeeld 50 GB, zodat je niet tientallen kleine zipbestanden krijgt.
  6. Maak de export aan.
  7. Wacht op de downloadlink van Google.
  8. Download alle zipbestanden die bij dezelfde export horen.

2. Zet de Takeout zip op je server

Ik heb de zip vanaf mijn laptop naar mijn Immich/Nextcloud-server gekopieerd met scp.

Maak eerst de map aan en controleer of die genoeg ruimte heeft:

mkdir -p /home/moofz/immich-import
df -h /home/moofz/immich-import

Kopiëer daarna de zip met Windows Powershell:

scp "C:\Users\moofz\Downloads\takeout-20260602T062433Z-3-001.zip" moofz@192.168.2.28:/home/moofz/immich-import/

Pas natuurlijk het pad, IP-adres en gebruikersnaam aan.

3. Takeout uitpakken

Ga naar de importmap:

cd /home/moofz/immich-import

Pak de zip uit:

unzip takeout-20260602T062433Z-3-001.zip

Controleer daarna of de grootte logisch is:

du -sh Takeout

En tel eventueel hoeveel media-bestanden erin zitten:

find Takeout -type f \( \
  -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" -o -iname "*.heic" \
  -o -iname "*.mp4" -o -iname "*.mov" -o -iname "*.webp" \
\) | wc -l

4. immich-go downloaden

Download de juiste versie van immich-go voor je systeem.

cd /home/moofz/immich-import
wget https://github.com/simulot/immich-go/releases/download/v0.31.0/immich-go_Linux_x86_64.tar.gz

Controleer eerst je architectuur:

uname -m

Voor een normale Intel/AMD Linux-machine heb je meestal de x86_64 versie nodig. Voor ARM64 bijvoorbeeld de arm64 versie.

Test daarna:

./immich-go --help

5. Immich API-key maken

In Immich:

  1. Ga naar je profiel/account.
  2. Open Account Settings.
  3. Ga naar API Keys.
  4. Maak een nieuwe API key aan.
  5. Kopieer de key.

Ik raad aan om een aparte tijdelijke key te maken voor deze import. Na de import kun je die key gewoon verwijderen.

6. Importeren met immich-go

De oude guides gebruiken vaak deze syntax:

./immich-go -server=YOUR_IMMICH_URL -key=YOUR_API_KEY upload -dry-run -create-albums -google-photos ./Takeout

Maar bij mijn versie van immich-go klopte die syntax niet meer.

Met immich-go v0.31.0 werkte deze syntax:

./immich-go upload from-google-photos -k YOUR_API_KEY --server=http://localhost:2283 Takeout/

Als Immich niet lokaal op dezelfde machine draait, gebruik dan het juiste adres, bijvoorbeeld:

--server=http://192.168.2.x:2283

Of via je domein:

--server=https://photos.jouwdomein.nl

7. Wat je tijdens de import kunt verwachten

Bij mij ging het om ongeveer:

27664 assets
44.4 GB totaal

Tijdens de import zie je onder andere:

  • Images
  • Videos
  • Sidecars associated
  • Metadata updated
  • Stacked
  • Tagged
  • Already on server
  • Duplicates
  • Pending
  • Processed
  • Errors

Als er staat:

Upload completed
You can quit the program safely.
Immich content: 100%

Dan is immich-go klaar met de uploadronde.

Maar dat betekent niet dat Immich zelf ook helemaal klaar is. Immich kan daarna nog duizenden achtergrondtaken hebben, bijvoorbeeld voor:

  • thumbnails
  • metadata extraction
  • video transcoding
  • machine learning
  • gezichtsherkenning
  • library jobs

Check dat in Immich via:

Administration → Jobs Queues

8. Errors zijn niet altijd rampzalig

Ik kreeg na afloop een paar errors, bijvoorbeeld rond:

Can't create stack
Failed to tag assets
server error

Bij een import van tienduizenden bestanden waren dat maar een paar fouten. Mijn advies: laat Immich eerst alle achtergrondtaken verwerken en draai daarna dezelfde import nog een keer.

Dat is veilig, want immich-go herkent duplicates en probeert vooral de missers opnieuw.

Opnieuw draaien kan dus gewoon:

./immich-go upload from-google-photos -k YOUR_API_KEY --server=http://localhost:2283 Takeout/

9. Logs bekijken

De logs staan bij mij hier:

~/.cache/immich-go/

Bekijk de logs:

ls -lh ~/.cache/immich-go/

Zoek naar fouten:

grep -Ei "ERR|error|failed|server error" ~/.cache/immich-go/immich-go_*.log | tail -100

10. Na afloop opruimen

Als je zeker weet dat alles goed in Immich staat, kun je de tijdelijke API-key verwijderen in Immich.

Daarna kun je eventueel de zip opruimen:

rm -f /home/moofz/immich-import/takeout-20260602T062433Z-3-001.zip

De uitgepakte Takeout-map zou ik pas verwijderen als je echt gecontroleerd hebt dat foto’s, video’s, datums en albums goed zijn overgekomen.

Grote imports kunnen meerdere runs nodig hebben

Bij mijn grote Google Photos Takeout merkte ik dat één run niet genoeg was. De import leek dan klaar, maar er bleef nog een grote hoeveelheid Pending over. Waarschijnlijk had Immich op dat moment te veel server-jobs in de wachtrij, waardoor immich-go niet alles in één keer netjes kon afronden.

Dat is niet direct een ramp. Je kunt dezelfde import gewoon opnieuw starten:

./immich-go upload from-google-photos -k YOUR_API_KEY --server=http://localhost:2283 Takeout/

Conclusie

De migratie van Google Photos naar Immich werkt prima met immich-go, maar let op deze punten:

  • Pak alle zipdelen uit als Google meerdere bestanden heeft gemaakt.
  • Gebruik de nieuwe immich-go upload from-google-photos syntax.
  • Laat Immich na de upload rustig zijn achtergrondtaken verwerken.
  • Draai de import eventueel later nog een keer om kleine missers op te vangen.
  • Verwijder na afloop je tijdelijke API-key.

Al met al is dit een nette manier om van Google Photos naar een selfhosted Immich-omgeving te migreren.

Na een paar runs was de import bij mij vrijwel helemaal afgerond

Uiteindelijk bleef er bij mij nog maar 1 bestand op pending staan en waren er nog 2 errors over. Op een totale import van ruim 27.000 bestanden vind ik dat acceptabel. De resterende errors kun je daarna eventueel nog apart uit het logbestand halen en handmatig controleren.