github Xentraxx/GooglePhotosTakeoutHelper_Neo v6.1.9

2 hours ago

🐛 Bug Fixes

  • Native EXIF writes no longer shrink JPEGs or destroy their embedded preview thumbnail — The image dependency now points at the Xentraxx fork of brendan-duncan/image (pinned to main, currently commit 59e2bff), whose injectJpgExif fixes two byte-level defects: an offset bug dropped every segment between the SOI marker and the EXIF APP1 block (in particular the JFIF APP0 header), and the EXIF thumbnail payload (IFD1) was not carried through the rewrite, leaving dangling JPEGInterchangeFormat/-Length pointers. Together these made every natively-written JPEG a few KB smaller than its original and stripped the preview thumbnail some gallery apps use. With the fork, the JFIF header and thumbnail round-trip byte-for-byte. This resolves issue #132.
  • Numbered orphan album sidecars now resolve to the correct duplicate — When two same-named photos were in one album, Takeout numbers only the sidecar filenames (pic.jpg.supplemental-metadata(1).json) while the JSON title field keeps the plain original name for every copy. The issue #133 orphan-recovery lookup checked title first, so a "(1)" sidecar attached its album membership to the plain pic.jpg in the year folder instead of the pic(1).jpg it actually references. The lookup now derives the numbered name from the full-length title (which, unlike the sidecar filename, survives Takeout's 51-character truncation) and tries it before the plain name. Because the "(N)" numbering is per-directory — an album's pic(1).jpg and a year folder's pic(1).jpg can be different photos — a numbered match is only accepted when its year folder agrees with the sidecar's photoTakenTime; otherwise the lookup falls through to the plain name, and when the numbered twin exists nowhere the membership still falls back to the plain copy rather than being lost. Follow-up to issue #133.
  • Added Spanish translation of locked folder

🛠️ Maintenance

  • New regression test suites for issues #132 and #133 — Issue #132 is guarded at two levels: unit tests (test/unit/issue_132_exif_thumbnail_preservation_test.dart) drive the native date/GPS/combined writers in WriteExifAuxiliaryService against a JPEG fixture with a JFIF header and embedded EXIF thumbnail, asserting the thumbnail round-trips byte-for-byte, the JFIF header survives, no dangling thumbnail tags appear, and repeated writes never shrink the file; an e2e test (test/e2e/e2e_issue_132_exif_preservation_test.dart) validates the same guarantees through the full pipeline with --write-exif. Issue #133 gained e2e coverage (test/e2e/e2e_issue_133_orphan_recovery_test.dart) confirming every album mode materializes recovered orphan memberships on disk (shortcut/reverse-shortcut links, duplicate-copy real copies, json entries in albums-info.json without a stray file), plus unit tests for numbered-duplicate resolution, the cross-year veto, truncated sidecar names, multi-album recovery, case-insensitive matching, and the plain-copy fallback.

Full Changelog: v6.1.8...v6.1.9

Don't miss a new GooglePhotosTakeoutHelper_Neo release

NewReleases is sending notifications on new releases.