Yet Another Immich Migration Guide #12334
Replies: 5 comments 3 replies
-
Hi @bitsondatadev, thank you for such a great documentation for photos migration for immich. |
Beta Was this translation helpful? Give feedback.
-
Some of the steps and scripts from this repo could be useful for migrating from iCloud: https://github.com/platelminto/icloud-to-nextcloud |
Beta Was this translation helpful? Give feedback.
-
Thank you @jac4e |
Beta Was this translation helpful? Give feedback.
-
I am actually testing from-icloud sub command using immich-go from the documentation https://github.com/simulot/immich-go?tab=readme-ov-file#from-icloud-sub-command |
Beta Was this translation helpful? Give feedback.
-
Hi @bitsondatadev ! I mainly agree with what you said : the immich-cli is getting good and can perform most migrations. But it lacks a few options and some user-friendliness. Maybe a companion GUI in the administration page could resolve both issues. For example my original library has dates in folder name so I modified immich-cli to clean up folder names before creating albums. This works for me but this is quite hard to keep customizable from cli, you would need to pass regex as arguments (like here). Imo it would rapidly turn to a nightmare with too much options to pass to I also agree with the fact that efforts should be centralized in a single tool and not hundreds of user specific scripts (even if they are really useful to do things quick and dirty). Maybe a companion GUI should be initiated and progress hand-in-hand with immich-cli as option are added. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Yet Another Immich Migration Guide
One migration guide to rule them all. 💍
Overview
The goal of this guide is to be a central guide where the community can update and consolidate the dispersion of different workflows and scripting towards a more centralized approach to migration to Immich.
Why?
This will become more important as the community becomes less technically savvy and people support their families performing our favorite task...data migrations on all their data (godspeed). As the community builds towards a more common list of well tested and understood steps, we can then work with the core team to simplify those steps, enable customization of migration from multiple sources and for various preprocessing tasks to verify most paths and one off issues are handled.
Getting the migration portion of this story ironed out is so important and commonly overlooked since most developers feel a sense of accomplishment by writing their cool custom scripts that only make sense to them. This is good because it's how projects like Immich get started in the first place. But this technology should eventually lower the assumptions that these tasks are handled by software developers or hackers. That said, we can't and shouldn't just jump from where Immich is today to over-engineers GUI features that over-obfuscate the internals. In this way it's valuable to take the slow journey as a community to gather what inputs different migration steps need today and in the future as Immich adoption soars and people gain autonomy over their data.
Guide Goals
Community driven migration process development. (more)
Updated to use latest Immich features. (more)
Organize features to simplify migration steps. (more)
Enough rambling, here's the dang guide already!
Guide
Prerequisites
exiftool
if needed for the exif inspection or manual fixing errors.Image and video libraries tend to exceed hundreds of gigabytes so they are exported in compressed formats that make it faster and easier to transfer, but you'll take up space for both the compressed file and decompressed files after you extract the data.
Phase 1: Download and Extract the data
Phase 2: Process image metadata
The primary metadata that exists on images that comes in handy during imports are the EXIF data, Album data, geolocation, and other data possibly stored by the source provider like face tagging. Since there is no current state-of-the-art tool for fixing these issues, we're going to use the Docker install of the garzj/google-photos-migrate project. If you prefer npm, feel free to take that route and skip this section. To keep consistent with using Docker, we will follow these steps:
Download the google-photos-migrate repository, unzip it and move into the google-photos-migrate directory. You can optionally use
git clone
if you prefer.Create an
output
anderror
directory in the root directory of the google-photos-migrate repository.Assuming your unzipped Google Takeout folder is located at
~/Pictures/Takeout/
, run the following command with the takeout directory updated according to your location.(Optional) if there are files in the error folder, you can use
exiftool
to attempt to fix those issues manually, or just ignore them (the files without metadata are there already). See this tutorial for some ideas on how to useexiftool
.fixme-album
. One day you'll get to them...I have faith in you.The resulting images are in the
output
folder.Phase 3: Upload images to Immich
This phase assumes you've created the user you intend to upload data for. As done in previous sections, we will also use the Docker command to upload the
If you don't already have one for the user you're uploading data for, create a new Immich API key from their account.
Run the upload command.
I assume you'll want to do recursive and album options if you have to enable copying the album names automatically based on the directory structure. You may also want to add
--dry-run
to verify nothing blows up. Here's a list of all the options for theupload
command.Verify things are looking good on the web browser.
Appendix
Appendix A: Common issues
Appendix B: Migration-related features and discussions
Appendix C: Migration tools
immich-go
mattwilson1024/google-photos-exif
CrcCheckCopy
delete_photos.js
gphotos-sync Python tool
Appendix D: Existing guides
exiftool
step to fix the errored data.exiftool
operationsBeta Was this translation helpful? Give feedback.
All reactions