O que são os arquivos JSON nas fotos do Google Takeout?
O que o arquivo .json ao lado de cada foto exportada pelo Google Takeout contém, por que ele existe e se é seguro apagar.
Você descompactou a exportação do Google Fotos e metade dos arquivos não são fotos. Ao lado de cada imagem tem um arquivo .json com um nome como IMG_3391.HEIC.supplemental-metadata.json. Você não pediu por eles, a maioria dos programas não abre, e são milhares.
Eles não são lixo. Eles guardam as datas e os locais que o Google não gravou nas suas fotos.
Por que o Google inclui esses arquivos
O Google Fotos guarda o que sabe sobre cada foto no seu próprio banco de dados: quando foi tirada, onde, em qual álbum está, se você marcou como favorita, e qualquer data ou local que você corrigiu na mão. O arquivo de imagem pode ou não carregar essa informação no bloco EXIF. Prints e imagens de conversa normalmente não carregam. Edições feitas dentro do Google Fotos nunca.
Quando você exporta, o Google entrega o arquivo de imagem mais ou menos como ele foi enviado. Ele não grava o banco de dados de volta em cada arquivo. Em vez disso, despeja a entrada do banco em um pequeno arquivo de texto ao lado da imagem. Esse arquivo de texto é o que chamamos de sidecar, e JSON é só o formato em que ele é escrito.
O que tem dentro
Abra um deles no Bloco de Notas, no TextEdit ou em qualquer editor. Um JSON típico, um pouco resumido, é assim:
{
"title": "IMG_3391.HEIC",
"description": "",
"imageViews": "12",
"creationTime": {
"timestamp": "1690120442",
"formatted": "Jul 23, 2023, 2:34:02 PM UTC"
},
"photoTakenTime": {
"timestamp": "1689929130",
"formatted": "Jul 21, 2023, 9:25:30 AM UTC"
},
"geoData": {
"latitude": -22.9519,
"longitude": -43.2105,
"altitude": 35.0,
"latitudeSpan": 0.0,
"longitudeSpan": 0.0
},
"geoDataExif": {
"latitude": -22.9519,
"longitude": -43.2105,
"altitude": 35.0
},
"url": "https://photos.google.com/photo/...",
"googlePhotosOrigin": {
"mobileUpload": {
"deviceType": "IOS_PHONE"
}
}
}
Os campos que importam:
photoTakenTime é a data em que a foto foi tirada, como o Google Fotos mostrava. O timestamp está em segundos desde 1º de janeiro de 1970, em UTC. Se você corrigiu uma data dentro do Google Fotos, esse campo tem a sua correção. É este que você deve usar.
creationTime é quando o arquivo foi enviado para o Google. Para uma foto tirada e salva no mesmo dia, os dois batem. Para a digitalização de uma foto de 1985 enviada em 2021, há décadas de diferença.
geoData é o local como o Google Fotos conhecia, incluindo qualquer lugar que você definiu na mão. geoDataExif é o local que estava no EXIF do próprio arquivo quando ele foi enviado. Quando uma foto não tem local, os dois ficam zerados: 0.0, 0.0, um ponto no Oceano Atlântico. Trate zeros como "desconhecido", não como um lugar real. Mais sobre isso em fotos do Takeout sem localização.
description é a legenda que você digitou, se houver. people lista os nomes de pessoas marcadas, quando existem. favorited é verdadeiro para fotos favoritas. title é o nome original do arquivo, o que é útil porque o Takeout às vezes encurta o nome real.
Os arquivos dos álbuns
Cada pasta de álbum também tem um metadata.json que descreve o álbum, não uma foto. Ele traz o título do álbum e, às vezes, uma data e um sinal de álbum compartilhado. É pequeno e inofensivo. Ferramentas que importam álbuns, como o immich-go, leem esse arquivo.
Por que os nomes são estranhos
Exportações antigas chamavam o sidecar de IMG_3391.HEIC.json. A partir de 2024 o nome virou IMG_3391.HEIC.supplemental-metadata.json. O Google também corta nomes longos de JSON em 46 caracteres, então uma foto de Pixel acaba com um parceiro chamado PXL_20230721_092530123.jpg.supplemental-m.json. Quando duas fotos têm o mesmo nome, o contador vai para um lugar diferente no JSON: IMG_3391(1).HEIC faz par com IMG_3391.HEIC.supplemental-metadata(1).json. Os detalhes estão em supplemental-metadata.json explicado.
Dá para apagar?
Sim, mas só depois de usar. Se você apagar os JSON antes, as datas e os locais que eles contêm somem. Suas fotos vão mostrar a data do download para sempre, e não há como recuperar a informação a não ser rodando o Takeout de novo.
Se todas as suas fotos já têm EXIF bom, os JSON acrescentam pouco. Dá para conferir com o exiftool: exiftool -r -if 'not $DateTimeOriginal' -filename . imprime cada foto sem data EXIF. Se a lista sair vazia, pode apagar.
Na maioria das bibliotecas a lista não sai vazia. A ordem segura é: gravar os dados do JSON nas fotos, conferir algumas, e só então apagar os .json. Immich, PhotoPrism e algumas outras ferramentas de servidor caseiro leem os JSON do Takeout direto na importação, então se esse é o seu destino, guarde-os até a importação terminar.
Colocando os dados de volta nas fotos
Você pode fazer isso com o exiftool, que lê o JSON e grava as tags EXIF. O comando e as armadilhas estão no guia do exiftool. Scripts gratuitos como o GooglePhotosTakeoutHelper fazem a mesma coisa.
O Takeout JSON Metadata Fixer faz isso como um programa de desktop no macOS, no Windows e no Linux, com a interface em português.
Ele lê cada JSON, grava o photoTakenTime no EXIF da foto, ajusta as datas do arquivo para bater e grava as coordenadas GPS quando elas são reais, e não zeros. Ele conhece os dois estilos de nome, os nomes cortados e os contadores (1), então não pula arquivos que um padrão de nome deixaria passar. Se quiser, ele renomeia e organiza as fotos em pastas, e pode gravar novos .json ao lado da saída para o Immich ou o PhotoPrism. Tudo roda no seu computador. As primeiras 1000 fotos são grátis.
Perguntas frequentes
É um JSON por foto?
Normalmente. Fotos que aparecem em vários álbuns têm uma cópia do JSON em cada pasta de álbum. Algumas fotos não têm JSON nenhum, na maioria das vezes os clipes de Live Photo e arquivos de envios muito antigos. Essas ficam com a data que estiver no arquivo.
O próprio Google Fotos consegue ler esses arquivos de volta?
Não. Se você enviar a pasta de volta para o Google Fotos, ele ignora os JSON e usa o EXIF dos arquivos. É por isso que quem muda de uma conta Google para outra também perde as datas.
Os timestamps estão no meu fuso horário?
Não. São instantes em UTC. Uma ferramenta converte para o horário local ao gravar o EXIF, usando o fuso do seu computador. Confira se o computador está no fuso onde a maioria das fotos foi tirada, normalmente o horário de Brasília.
Os JSON ocupam muito espaço?
De algumas centenas de bytes a alguns quilobytes cada. Dez mil deles dão mais ou menos 10 MB. Espaço não é motivo para apagar; bagunça é.