For years I had about 1,500 videos in Google Photos. Safe, I figured. Handled.
I found this out the way you find most things out. I tried to leave.
I wanted to move my library to Immich on a home server. Rclone is the standard move for cloud photo migrations. It stopped working for Google Photos in March 2025. The Google Photos Library API got restricted to media the calling app uploaded. Everything else comes back as transcoded copies. If you care about originals, Google Takeout is the only path left.
Takeout works, but it’s deliberate. The chunk size is configurable; pick against your local disk space and work the archives one at a time. I built a script around the verify-and-copy loop. I nearly lost every capture date and geotag in the process. The metadata sidecars aren’t named *.mp4.json. They’re *.mp4.supplemental-metadata.json. A copy pattern that matches *.mp4.json pulls every video and zero sidecars. The capture dates and geotags don’t live in the video containers. Takeout strips them from the files. The sidecars are the only copy.
Takeout also defaults to whichever Google account is at authuser 0. I have two accounts. I nearly queued an entire export from the wrong one. The product count in the export settings (59 vs 63 in my case) is the quick tell.
I ended up with 1,521 videos, 45.84 GB, all verified byte-for-byte. They’re now sitting in one folder on one machine. Google Photos still has the originals. I haven’t deleted anything, and won’t until there’s a second local copy.
Technically I have two copies right now. One is on Google’s infrastructure, where programmatic access to originals has been closed since March 2025. One is on a local drive with no redundancy. Immich goes on the HP desktop once the RAM I ordered arrives. Until then I haven’t closed the gap I set out to close.
Past me called it done when the photos loaded. They loaded fine. The exit rearranged what done meant.