✨ New Features
- Preserve Google Photos captions/descriptions in EXIF (native JPEG writer, consolidated ExifTool writes) — Takeout JSON sidecars carry each item's caption (the note typed onto a photo/video in Google Photos) in the
descriptionfield, but GPTH previously only read these sidecars forphotoTakenTime/GPS and never preserved the caption — once the sidecar was gone, so was the caption.extractAllFromJson/extractAllFromJsonCached(Step 4) now also capturedescriptionfrom the same combined JSON read used for date/GPS (no extra file I/O), subject to the same issue #139 own-sidecar guard so a caption is never borrowed from an unrelated photo's sidecar.MediaEntitygained adescriptionfield (mirroringgpsCoordinates: not serialized toprogress.json, since it's cheap to re-extract on resume). Step 7 embeds the caption into EXIFImageDescription(tag0x010E), with routing that never spawns an extra ExifTool invocation for a caption: JPEG files are written natively with the built-in Dart writer (imagepackage — no ExifTool call at all, even when ExifTool is installed; the write shares the file's single native metadata pass), and only fall back to ExifTool (queued into the file's existing tag batch) if the native write fails; all other formats (PNG, HEIC, videos) queue the caption into the file's single already-queued ExifTool write. An entity with only a caption and no date/GPS is no longer skipped by Step 7. Captions are embedded as UTF-8 bytes and survive alongside embedded thumbnails and JFIF headers (issue #132-safe). TheXMP-dc:Descriptiontag remains fully implemented but is currently not written (captions go to EXIF only); see README "Caption/Description Metadata Writing".
What's Changed
New Contributors
Full Changelog: v6.3.0...v6.4.0