Exportar o Google Fotos para o Immich: datas, JSON e álbuns
Como levar uma exportação do Google Takeout para o Immich com as datas certas. Cobre o immich-go, por que as datas quebram no envio comum e como preparar tudo.
Você montou o Immich, enviou a pasta do Takeout, e a linha do tempo mostra tudo em um dia só. Ou usou o immich-go e alguns milhares de fotos ainda entraram sem data, e o log diz que centenas de arquivos JSON estão faltando.
O Immich é um bom lugar para chegar. O truque é colocar as datas em uma forma que ele leia.
Como o Immich decide a data de uma foto
O Immich lê o EXIF DateTimeOriginal das imagens e a data de criação do container dos vídeos. Se nenhum dos dois existe, ele usa a data de modificação do arquivo. Ele também lê sidecars .xmp. Ele não lê os .json do Google quando você envia pela interface web, pelo app do celular ou pela CLI. Esses arquivos simplesmente não são suportados, e o Immich registra um erro para cada um.
Depois de descompactar o Takeout, a data de modificação do arquivo é o momento em que você descompactou. Então qualquer foto sem data EXIF cai nesse dia. Prints, imagens de conversa, digitalizações e qualquer coisa que você redatou no Google Fotos são as vítimas habituais. Fotos de câmera com EXIF intacto ficam bem.
Caminho 1: immich-go
O immich-go é uma ferramenta gratuita de linha de comando feita exatamente para isso. Ele lê os zips do Takeout direto, combina cada foto com o seu JSON, usa o photoTakenTime como data, recria os álbuns a partir das pastas de álbum e envia para o seu servidor. É o caminho que a comunidade do Immich recomenda, e funciona bem.
Uma execução básica:
immich-go upload from-google-photos --server http://seu-servidor:2283 --api-key SUACHAVE ~/Downloads/takeout-*.zip
Pontos que valem saber. As versões atuais tratam o nome supplemental-metadata de 2024 e os nomes cortados; se você vir "JSON missing" para muitos arquivos, atualize antes. Ele envia o arquivo como está e manda a data do JSON separadamente, então a data fica guardada no banco de dados do Immich, não gravada na foto. Se mais tarde você exportar do Immich ou apontar outra ferramenta para os mesmos arquivos, o arquivo em si continua sem data. Rode com --dry-run primeiro para ver as contagens.
Uma contagem de JSON faltando na casa das centenas, em uma biblioteca grande, é normal. Normalmente são clipes de Live Photo, cópias editadas e arquivos de envios antigos que nunca tiveram JSON. O immich-go usa a data do arquivo para eles.
Caminho 2: corrigir os arquivos, depois enviar como quiser
A alternativa é gravar os dados do JSON dentro dos arquivos antes de eles chegarem ao Immich. Aí qualquer caminho de envio funciona, as datas viajam com os arquivos se um dia você sair do Immich, e uma biblioteca externa apontada para a pasta indexa corretamente.
Com o exiftool:
exiftool -r -d %s -tagsfromfile "%d/%F.supplemental-metadata.json" \
"-DateTimeOriginal<PhotoTakenTimeTimestamp" \
"-GPSLatitude<GeoDataLatitude" "-GPSLatitudeRef<GeoDataLatitude" \
"-GPSLongitude<GeoDataLongitude" "-GPSLongitudeRef<GeoDataLongitude" \
-ext jpg -ext heic -ext png -overwrite_original .
Vídeos precisam das tags QuickTime, e nomes de JSON cortados ou com (1) precisam de passadas extras. O guia do exiftool percorre tudo isso.
O Takeout JSON Metadata Fixer faz isso como um programa de desktop no macOS, no Windows e no Linux, inclusive na máquina que hospeda o Immich.
Aponte para os zips do Takeout. Ele grava a data e o GPS reais em cada foto e vídeo, ajusta as datas do arquivo para bater e organiza a saída em pastas de ano e mês, se você quiser. Duas opções importam para o Immich. Deixe as Live Photos em "Manter o clipe ao lado da foto", para o Immich juntar foto e clipe no envio. E ligue "Gravar sidecars .json" se pretende usar o immich-go depois; ele grava um JSON limpo por arquivo no formato do Google, com a data e as coordenadas reais, para o immich-go não ter que adivinhar nada.
O resultado é uma pasta normal de fotos com data. Envie pela interface web, pela CLI ou pelo immich-go. Ou adicione como biblioteca externa e deixe o Immich indexar no lugar. As primeiras 1000 fotos são grátis.
Álbuns
O Takeout representa um álbum como uma pasta com cópias das fotos mais um metadata.json com o nome do álbum. O immich-go transforma isso em álbuns do Immich. Se você for pelo caminho de corrigir os arquivos, ou envia as pastas de álbum também, o que cria duplicatas que o Immich depois elimina pelo hash, ou envia só as pastas Photos from AAAA e refaz os álbuns na mão.
O Immich elimina cópias idênticas byte a byte no envio. Depois que as datas são gravadas nos arquivos, duas cópias da mesma foto continuam idênticas entre si, então a eliminação de duplicatas continua funcionando.
Conferindo o resultado
Depois do envio, abra a linha do tempo e role até um ano antigo. Abra uma foto e olhe o painel de informações; a data deve bater com o que o Google Fotos mostrava. Abra o mapa. Fotos com GPS real devem aparecer. Fotos que tinham 0.0, 0.0 no JSON não devem aparecer no oceano; se aparecerem, o seu passo de gravação escreveu zeros, e você precisa removê-los com exiftool -gps:all= nos arquivos afetados.
Se um lote ainda estiver errado, o Immich permite selecionar fotos e editar a data em massa pela interface web.
Perguntas frequentes
Devo usar o immich-go ou corrigir os arquivos antes?
Os dois funcionam. O immich-go é mais rápido e reconstrói os álbuns. Corrigir os arquivos antes faz as datas morarem nas fotos, o que importa se você usa bibliotecas externas ou pode mudar de novo no futuro. Algumas pessoas fazem os dois: corrigem os arquivos e depois enviam com o immich-go pelos álbuns.
Por que o Immich mostra uma hora algumas horas fora?
O timestamp do JSON está em UTC. Ao ser gravado no EXIF, vira hora local no fuso do seu computador, sem fuso registrado. O Immich então exibe como está. Coloque o computador no fuso das fotos antes de gravar, ou ajuste no Immich depois.
O Immich diz "Unsupported file" para cada .json. Isso é problema?
Não. Ele está avisando que ignorou esses arquivos. Ou apague os JSON antes de enviar, ou use o immich-go, que os consome.
Preciso converter HEIC?
Não. O Immich lê HEIC e gera as próprias miniaturas. Mantenha os originais.