🐛 Bug Fixes
- Album symlinks for Pixel Motion Photos now use the correct extension — When a
.MP/.MVfile was transformed to.jpgor a still image, the moving step only updated the primary file's path. Secondary references to the same file (album copies used for shortcut/symlink creation) still referenced the old.MPpath, so album symlinks ended up namedPXL_….MPpointing at a.jpgfile. All secondary references are now updated in-place immediately after each transform, ensuring album symlinks use the correct filename. - Apple Live Photo
.jpgsiblings no longer appear as orphaned MP4 companions — When a Google Storage-Saver HEIC was fixed to.jpg(e.g.PXL_20230101.heic→PXL_20230101.jpg), the companion.MP4suppression logic only looked for a.heicsibling, not a.jpgsibling. The.MP4was therefore not suppressed and ended up as a stray file in the output. The check now also looks for an existing.jpgsibling. - Pixel Motion Photo video-index lookup made more robust — The
motion_photospackage'sgetMotionVideoIndex()method searches for anftyp mp42MP4 header pattern and falls back to XMP parsing. For Pixel.MP.jpgfiles that use a different MP4 container brand or a slightly different XMP attribute format, both lookups returnednull, causing extraction to fail. A pure-Dart fallback parser now reads theGCamera:MicroVideoOffsetattribute directly from the JPEG XMP segment via regex, so extraction works reliably across all Pixel motion photo variants. - Still-mode output
.jpgfiles are no longer detected as motion photos — The JPEG extracted from a Pixel.MPfile contains a stale XMP segment withGCamera:MicroVideoOffsetandMicroVideomarkers. Because no MP4 is appended to the extracted still, the offset is invalid, but themotion_photospackage does not bounds-check it —isMotionPhoto()returnstruefor the plain JPEG. GPTH now strips the entire XMP APP1 segment from the extracted bytes before writing the output file, so photo managers no longer misidentify the still as an unplayable motion photo.
Full Changelog: v6.1.2...v6.1.3