I went through this process myself as I transitioned from Google Photos to Proton Photos. This is what I did:
1. Exported my data via google takeout
2. Consolidated the many zip files (on mac `ditto -x -k -V takeout-*.zip result 1>log.txt 2>&1`)
3. Ran MetaSort : https://github.com/iamsanmith/MetaSort see README there
That got me through the photos rather cleanly.
Now for the videos - Proton Drive preserves the original EXIF creation date for photos when uploaded, ensuring accurate timeline placement. However, videos often lose their correct creation date when imported via Google Takeout or direct upload, as Proton Drive uses the file’s "last modified" date instead of the original metadata (e.g., "media created" date), resulting in a disrupted timeline.
So I used the exiftool to copy the Created Date into the Modified Time - for a single file, it looks like `exiftool "-FileModifyDate<CreateDate" IMG_0093.MOV`
I used the below python script to go through my folder of videos:
I went through this process myself as I transitioned from Google Photos to Proton Photos. This is what I did:
1. Exported my data via google takeout
2. Consolidated the many zip files (on mac `ditto -x -k -V takeout-*.zip result 1>log.txt 2>&1`)
3. Ran MetaSort : https://github.com/iamsanmith/MetaSort see README there
That got me through the photos rather cleanly.
Now for the videos - Proton Drive preserves the original EXIF creation date for photos when uploaded, ensuring accurate timeline placement. However, videos often lose their correct creation date when imported via Google Takeout or direct upload, as Proton Drive uses the file’s "last modified" date instead of the original metadata (e.g., "media created" date), resulting in a disrupted timeline.
So I used the exiftool to copy the Created Date into the Modified Time - for a single file, it looks like `exiftool "-FileModifyDate<CreateDate" IMG_0093.MOV`
I used the below python script to go through my folder of videos:
```
#!/usr/bin/env python3
import subprocess
import sys
import os
def check_exiftool():
try:
subprocess.run(['exiftool', '-ver'], capture_output=True, check=True)
except (subprocess.CalledProcessError, FileNotFoundError):
print("Error: exiftool not found. Install it with: brew install exiftool")
sys.exit(1)
def sync_dates_recursive(path):
if not os.path.exists(path):
print(f"Error: {path} does not exist")
return False
try:
result = subprocess.run(
['exiftool', '-r', '-overwrite_original', '-FileModifyDate<CreateDate', path],
capture_output=True,
text=True,
check=True
)
print(result.stdout)
return True
except subprocess.CalledProcessError as e:
print(f"Error processing {path}: {e.stderr}")
return False
if __name__ == '__main__':
if len(sys.argv) < 2:
print("Usage: python3 script.py <directory>")
sys.exit(1)
check_exiftool()
for path in sys.argv[1:]:
sync_dates_recursive(path)
print("Done!")
```
4. Finally I batched uploaded all the photos/videos in chunks to not choke the Proton Drive web uploaded.