Skip to content

Instantly share code, notes, and snippets.

@tetebueno
Created February 18, 2021 13:39
Show Gist options
  • Save tetebueno/5800504133709c9844bcd1779019d390 to your computer and use it in GitHub Desktop.
Save tetebueno/5800504133709c9844bcd1779019d390 to your computer and use it in GitHub Desktop.
Google Photos Takeout archive holds a JSON file with photo/video metadata, thing is that the naming for this JSON file is not always so obvious. This takes care of resolving the name with all the variants I found so far.
import re as _re
import json as _json
JSON_EXTENSION = '.json'
def find_json_for_file(file: Path):
try:
if file.with_name(file.name + JSON_EXTENSION).is_file():
# file.jpg -> file.jpg.json
the_json_path = file.with_name(file.name + JSON_EXTENSION)
elif file.with_name(file.name.replace(file.suffix, JSON_EXTENSION)).is_file():
# file.jpg -> file.json
the_json_path = file.with_name(file.name.replace(file.suffix.lower(), JSON_EXTENSION))
elif len(file.name) >= 47:
# fileee...eee.jpg -> fileee...eee..json
the_json_path = file.with_name(file.name[0:46] + JSON_EXTENSION)
elif bool(_re.search(r'^(.+)(\(\d+\))(\..+)$', file.name)):
weird_search = _re.search(r'^(.+)(\(\d+\))(\..+)$', file.name)
if file.with_name(weird_search.group(1) + JSON_EXTENSION).is_file():
# file(1).jpg -> file.json
the_json_path = file.with_name(weird_search.group(1) + JSON_EXTENSION)
else:
# file(1).jpg -> file.jpg(1).json
the_json_path = file.with_name(weird_search.group(1) + weird_search.group(3) + weird_search.group(2) + JSON_EXTENSION)
#print('Using ' + the_json_path.name + ' for ' + file.name)
with open(the_json_path, 'r') as f:
json_dict = _json.load(f)
return json_dict
except:
raise FileNotFoundError(f'Couldn\'t find json for file: {file}')
@kyro-h
Copy link

kyro-h commented Jun 12, 2021

I have no idea how to use this, I have downloaded python so far and tried running the code but idk where to go from there. Can anyone help with a step by step tutorial? I'd be very thankful. Trying to merge all .json and photos together from a Takeout Folder.

@HJ1q
Copy link

HJ1q commented Nov 9, 2022

@kyro-h did you get that step by step instruction? I'm in the same situation you wear in a year ago. I would really appreciate any help anyone. @tetebueno

@kyro-h
Copy link

kyro-h commented Nov 10, 2022 via email

@Zero-Co
Copy link

Zero-Co commented Nov 10, 2022

@HJ1q I ended up using a different python script. (https://pastebin.com/SkYwF0Jy)
should be something like, nameofprogram "folder to be scanned")
It should rename all your jason files to match the name of the image files.

then i used exiftool (https://exiftool.org/) to apply the jason metadata to the images.
(https://pastebin.com/5Wr7yzkh)

That's all if i remember correctly form a year ago.
Also, do not run this on your only copy of your take out. Make a backup and
try it on a smaller set of images, so you don't waste time on something that
didn't do what you thought it would do.

@tetebueno
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment