Immich and Google Photos

Immich and Google Photos

I recently installed the docker container : Immich and while I like the functionality, I was having an issue "committing" to it as it didn't have my photos handy - those were still in Google Photos.

So with the help of a script called Immich-Go , I can quickly copy these Google Photos to Immich.

I didn't find it to be the most intuitive process so I thought I'd cover it real quick.

This assumes you have Immich already installed and running.


Download your Google Takeout. Use this link and be sure to "Deselect All" except for Google Photos.

Click Next at the bottom of the page and click export once.

I recommend the 50GB .zip files if you have the bandwidth and storage as it will be less actions required by you to download the files.

Click Create Export and wait. It will take several hours - up to a day, I think.


Put the .zip files in a folder somewhere. I moved mine out of mine downloads folder as this will act as s psuedo "backup" for me. For right now, I just stuck it in a folder called "Google Takeout" on an extra drive.


Download the correct version of Immich-Go, depending on your device. At the time of writing, this was on version 0.9, but use the latest version you can.

Releases · simulot/immich-go
An alternative to the immich-CLI command that doesn’t depend on nodejs installation. It tries its best for importing google photos takeout archives. - simulot/immich-go


Unzip the Immich-Go zip, for me it was called "" and place the contents in the same folder as the Google Takeout Zips.

Note - You don't have to unzip these Google Takeout files. It will process them from there and I think makes it easier!

At this time, my folder containing the Immich-Go files and my Takeout .zips looks like:


Inside of Immich, go to Settings > API Keys > Click "New API Key". Name it something to remind you what it is - I used " API Key ImmichGo". It will show you the API Key ONCE. Be sure to copy it. If you misplace it, you can't recover it. You will have to create a new key.


If you read the github for Immich-Go or the readme file that it comes with, it explains all the commands and modifiers. I used the example import script in their and modified it to use my information.

Edit the below line to replace the SERVER_IP, PORT, and XXXAPIKEYGOESHEREXXX with the corresponding information from your Immich Install and the API Key we just got.

The last section "takeout-*.zip" will look for the takeout zip folders (multiple) and process through each one.

The -dry-run portion will do a quick process without actually moving any photos to let you make sure there are minimal errors. I had 3 for wrong file types but I am not going to fix those.

immich-go -server=http://SERVER_IP:PORT -key=XXXXAPIKEYGOESHEREXXXXXXXX upload -dry-run -create-albums -google-photos takeout-*.zip


With the above script copied, right click the inside of your folder containing your takeout .zips and click "Open in Terminal". Or if you are on another OS, navigate to the folder with your takeout .zips.

Inside the now open terminal folder, paste the script.

Press enter

Outdated: You will see many lines of (Hopefully) Green text flashing by and when it stops you'll get a little report.

Updated: It seems that Immich-Go has updated their command since I created this. The commands still work but the tool is easier to read and gauge your progress. Do not worry if it is not green!

In my case, 4 files couldn't be handled due to file types. I don't mind in comparison to 25k files so I will continue on.


I will now press the UP arrow on my keyboard to recall the last submitted command. Or I could paste the script again - this time I will be using my arrow keys to navigate to the section of -dry-run and delete that section.

So my script should now look like:

immich-go -server=http://SERVER_IP:PORT -key=XXXXAPIKEYGOESHEREXXXXXXXX upload -create-albums -google-photos takeout-*.zip

I will press enter to execute the script and sit back while it processes all the photos.

You're done!

If you get an error : invalid character looking for beginning of value it is due to invalid characters or spacing. Double check that you DON'T have an ending "/" forward slash after your SERVER_IP:PORT, as that is what initially caught me.

Hope this helped!

Privacy Policy
Terms and Conditions