Takeout JSON
RU

Immich показывает неправильные даты фото после импорта

Почему фото попадают в Immich не на ту дату, как Immich выбирает дату из EXIF и файлов-спутников и как исправить файлы до импорта.

Вы развернули Immich, загрузили медиатеку, а лента неправильная. Тысячи фото датированы днем импорта. Старые отпуска висят на самом верху. Часть дат сдвинута ровно на несколько часов.

Как Immich выбирает дату

Immich читает метаданные каждого файла и берет первую дату, которую находит, в фиксированном порядке. Примерно так: XMP-файл рядом с файлом, если он есть, затем EXIF DateTimeOriginal, затем CreateDate у видео и в самом конце дату изменения файла.

Он читает файл. Он не спрашивает вас. Поэтому фото без даты в EXIF получает дату файла, а дата файла — то, что оставило последнее копирование, обычно сегодняшний день. Разницу объясняет статья EXIF date taken vs file modified (на английском).

Собственные загрузчики Immich, мобильное приложение и CLI, передают дату изменения файла. Если и она неверна, фото уже ничто не спасет.

Частые причины

Google Takeout. Самая большая из них. Google убирает даты EXIF из многих фото и кладет настоящую дату в файл .json рядом. Immich не читает формат .json от Google. Загрузите эти файлы напрямую, и каждый файл без EXIF получит дату загрузки. Полная инструкция для этого случая — Google Photos to Immich (на английском).

Мессенджеры. WhatsApp и похожие приложения полностью удаляют EXIF. У таких фото есть только дата файла.

Скриншоты и скачанные картинки. У PNG и картинок из интернета дата в EXIF бывает редко.

Сканы. Дата сканера, то есть день сканирования, а не день съемки.

Сдвиги часовых поясов. Фото с датой в EXIF, но без смещения часового пояса одни пути обработки считают UTC, а другие — местным временем. Дата верная, час нет. Новые телефоны записывают тег смещения и этого избегают.

Два способа исправить

Исправить внутри Immich. В веб-интерфейсе можно выделить фото и изменить дату и время, по одному выделению за раз. Для нескольких фото это нормально. Для экспорта Takeout на сорок тысяч фото — нет, и исправление живет только в базе данных Immich. Экспортируете медиатеку позже — и даты снова пропали.

Сначала исправить файлы. Запишите правильную дату в EXIF каждого файла до загрузки. Immich ее прочитает и все сделает правильно, как и любая другая программа, которой вы когда-нибудь откроете эти файлы. Это надежное исправление.

immich-go и когда он нужен

immich-go — бесплатный загрузчик для командной строки, который понимает Google Takeout. Он читает файлы .json, сопоставляет их с файлами и при загрузке передает в Immich правильную дату. Если Immich — ваше единственное место назначения и терминал вас не пугает, это хороший инструмент, и с альбомами он тоже справляется.

Но файлы он не меняет. Дата попадает в базу Immich, а не в фото. Если вы когда-нибудь снова переедете или откроете те же файлы в PhotoPrism или Apple Photos, придется начинать заново.

Исправление файлов вручную

exiftool умеет записать дату из Takeout в EXIF. Команда капризная, потому что имена файлов-спутников Google сразу в нескольких отношениях не совпадают с именами фото. Рабочий пример есть в статье как исправить даты Google Takeout через exiftool.

Для фото без файла-спутника и без EXIF, но с верной датой файла, скопируйте дату файла внутрь:

exiftool "-DateTimeOriginal<FileModifyDate" -if 'not $DateTimeOriginal' -r .

Для папки, про которую вы знаете только дату, задайте ее:

exiftool -DateTimeOriginal="2014:08:10 12:00:00" -overwrite_original .

Затем заново запустите задачу извлечения метаданных на странице администратора Immich или загрузите файлы еще раз, чтобы Immich прочитал новые значения.

С помощью программы

Takeout JSON Metadata Fixer готовит папку, которую Immich импортирует без проблем. Программа записывает настоящую дату и GPS в каждый файл, и Immich читает их прямо из EXIF.

Дайте ей экспорт Takeout, в одном zip-архиве или в нескольких, или любую папку. Для каждого фото она берет дату из файла .json, если его нет — из EXIF, затем из даты файла, и записывает результат в EXIF и в метки времени файла. GPS попадает внутрь так же. По пути можно сконвертировать HEIC в JPG. Фото совсем без даты можно дать одну дату и место на всю папку.

Если включить эту функцию, программа также записывает файл .json рядом с каждым итоговым файлом. Сам Immich их не читает, но immich-go и другие импортеры читают, а метаданные остаются доступными вне любой медиатеки. Затем загрузите итоговую папку через приложение Immich, CLI или как внешнюю библиотеку. Даты уже в файлах, поэтому с первого раза приходят правильными.

Работает без интернета на macOS, Windows и Linux. Бесплатно для 1000 фото, 19,99 $ один раз — без ограничений.

Частые вопросы

Я уже импортировал. Начинать заново?

Не обязательно. Исправьте файлы на диске, затем запустите задачу «Extract metadata» для всех объектов на странице администратора Immich. Если файлы были загружены, а не лежат во внешней библиотеке, нужно загрузить исправленные файлы заново и удалить старые копии, потому что Immich хранит собственную копию.

Почему некоторые даты сдвинуты на несколько часов?

Часовой пояс. У даты в EXIF нет смещения, и Immich считает ее UTC или временем сервера, в зависимости от версии и настроек. Новые версии справляются с этим лучше. Помогает выставить часовой пояс сервера таким, где сделана большая часть фото.

Immich уже читает файлы .json от Google?

На момент написания — не напрямую. Он читает XMP-файлы. immich-go читает формат Google и преобразует его на лету. Следите за примечаниями к выпускам Immich, потому что это меняется.

Запись EXIF ухудшит качество фото?

Нет. Запись EXIF меняет блок метаданных. Сжатое изображение не затрагивается.