Skip to content

Releases: photostructure/exiftool-vendored.js

v29.0.0

04 Nov 22:48
02e397e
Compare
Choose a tag to compare
  • 💔/🐞/📦 ExifTool sometimes returns boolean values for some tags, like SemanticStylePreset, but uses "Yes" or "No" values for other tags, like GPSValid (TIL!). If the tag name ends in Valid and is truthy (1, true, "Yes") or falsy (0, false, "No"), we'll convert it to a boolean for you. Note that this is arguably a breaking API change, but it should be what you were already expecting (so is it a bug fix?). See the diff to the Tags interface in this version to verify what types have changed.

  • 📦 Reduced streamFlushMillis to 10. This reduced elapsed time for the full test suite by 2.5x on macOS and 3x on Windows, and drops the upper latency bound substantially. Note that this is at the risk of buffered stream collisions between tasks. The (extensive) test suite on Github Actions (whose virtual machines are notoriously slower than molasses) still runs solidly, but if you see internal errors, please open a Github issue and increase your streamFlushMillis.

  • 💔 TypeScript now emits ES2022, which requires Node.js 18.

GPS improvements

  • 🐞/📦 GPS Latitude and GPS Longitude values are now parsed from DMS notation, which seems to avoid some incorrectly signed values in some file formats (especially for some problematic XMP exports, like from Apple Photos). Numeric GPSLatitude and GPSLongitude are still accepted: to avoid the new coordinates parsing code, restore GPSLatitude and GPSLongitude to the ExifToolOptions.numericTags array.

  • 🐞/📦 If ExifToolOptions.geolocation is enabled, and GeolocationPosition exists, and we got numeric GPS coordinates, we will assume the hemisphere from GeolocationPosition, as that tag seems to correct for more conditions than GPS*Ref values.

  • 🐞/📦 If the encoded GPS location is invalid, all GPS* and Geolocation* metadata will be omitted from ExifTool.readTags(). Prior versions let some values (like GPSCoordinates) from invalid values slip by. A location is invalid if latitude and longitude are 0, out of bounds, either are unspecified.

  • 🐞/📦 Reading and writing GPS latitude and GPS longitude values is surprisingly tricky, and could fail for some file formats due to inconsistent handling of negative values. Now, within ExifTool.writeTags(), we will automatically set GPSLatitudeRef and GPSLongitudeRef if lat/lon are provided but references are unspecified. More tests were added to verify this workaround. On reads, GPSLatitudeRef and GPSLongitudeRef will be backfilled to be correct. Note that they only return "N" | "S" | "E" | "W" now, rather than possibly being the full cardinal direction name.

  • 🐞 If ignoreZeroZeroLatLon and geolocation were true, (0,0) location timezones could still be inferred in prior versions.

  • 📦 GPS coordinates are now round to 6 decimal places (≈11cm precision). This exceeds consumer GPS accuracy while simplifying test assertions and reducing noise in comparisons. Previously storing full float precision added complexity without practical benefit.

Full Changelog: v28.8.0...v29.0.0

Release 28.8.0

30 Oct 22:44
1fb8399
Compare
Choose a tag to compare

Important: ExifTool versions use the format NN.NN and do not follow semantic versioning. The version from ExifTool will not parse correctly with the semver library (for the next 10 versions) since they are zero- padded.

  • 🌱 Upgraded ExifTool to version 13.00

    Note: ExifTool version numbers always increment by 0.01: between version 12.99 and 13.00 are only minor updates without any known breaking changes.

  • 📦 Added Node.js v23 to the build matrix.

Commits

Release 28.7.0

20 Oct 04:43
ed269ed
Compare
Choose a tag to compare
  • 🌱 ExifTool upgraded to version 12.99

Commits

Release 28.6.0

07 Oct 00:26
669a411
Compare
Choose a tag to compare
  • 🌱 ExifTool upgraded to version 12.97

  • 📦 Fields in Tags sub-interfaces are correctly sorted

Full Changelog: v28.5.0...v28.6.0

Release 28.5.0

07 Oct 00:11
ac32eda
Compare
Choose a tag to compare
  • 🐞/📦 Add new ExifToolOptions.preferTimezoneInferenceFromGps to prefer GPS timezones. See the jsdoc for details.

  • 🐞 Support triple-deep IANA timezones, like America/Indiana/Indianapolis.

Commits

  • prettier (whitespace diff) (ed91863)
  • push ET update to next release (048e23e)
  • update ET (a0612d2)
  • revert .only (6f6e098)
  • yarn docs (4bd4a9f)
  • fix mktags and rebuild (72fab06)
  • add support for triad IANA zones (765ce5d)
  • yarn docs (c4ed3ea)
  • clean up documentation warnings. DRY up GeolocationTags. (7107c4c)
  • add preferTimezoneInferenceFromGps (cbc92c5)

Release 28.4.1

05 Oct 20:45
43eb28f
Compare
Choose a tag to compare
  • 📦 The warning "Invalid GPSLatitude or GPSLongitude. Deleting geolocation tags" will only be added if GPSLatitude or GPSLongitude is non-null.

Full Changelog: v28.4.0...v28.4.1

v28.4.0

05 Oct 20:46
e13fec3
Compare
Choose a tag to compare
  • ✨ Add workaround for abberant Nikon TimeZone encoding. Addresses #215. Set ExifToolOptions.adjustTimeZoneIfDaylightSavings to () => undefined to retain prior behavior.

Full Changelog: v28.3.1...v28.4.0

Release 28.3.1

03 Oct 19:43
f8504ce
Compare
Choose a tag to compare
  • 🐞 Re-add +13:00 as a valid timezone offset. Addresses #214.

Commits

Full Changelog: v28.3.0...v28.3.1

Release 28.3.0

22 Sep 22:02
1298d06
Compare
Choose a tag to compare
  • 🌱 ExifTool upgraded to v12.96

  • ✨ Add support for timezone offset extraction from TimeStamp. Note that this is disabled by default to retain prior behavior (and due to me being chicken that this might break other random cameras). Addresses #209

  • @bugfest improved write typings around Structs. See #212

  • 🐞 [@noahmorrison] found and fixed an issue with inferLikelyOffsetMinutes. Thanks for the assist! See #208 for details.

  • 📦/💔 Possible breaking change: several archane timezone offsets were removed from the ValidTimezoneOffsets array, to better address #208.

Commits

  • remove yarn reference (6338cd4)
  • update ExifTool (c1e5700)
  • rebuild docs (a3ee1d1)
  • don't override *Source tags (39f70db)
  • rebuild tags (d70f7b8)
  • pull in new exiftool (256ab46)
  • update changelog (e17597a)
  • rebuild docs (3b63c89)
  • Feat: inferTimezoneFromTimeStamp. Fixes #209 (6b6e83b)
  • Refactor blank function to accept any type for input (5b98623)
  • ExifDateTime improvements: (03b41e1)
  • Refactor Tag class to obscure string values for tags ending with "Source" (2a0b216)
  • Add more tests for #203 (a012098)
  • verify #203 (d5d27ae)
  • Update for #208: use improved ValidTimezoneOffsets. Use new leastBy (6c9c4a8)
  • prettier (b2b75d5)
  • Refactor Array module to add leastBy function (d575d92)
  • Fix compile:watch script in package.json (9ba1635)
  • Refactor chai imports and use chai-as-promised (f4448b7)
  • Merge branch 'main' of github.com:photostructure/exiftool-vendored.js (638ab8d)
  • Make inferLikelyOffsetMinutes pick the closest real timezone (36c1090)
  • Clean up valid timezone offsets (7d7d812)
  • Update devDependencies in package.json (97b9a17)
  • Merge branch 'main' of github.com:photostructure/exiftool-vendored.js (c678ec2)
  • update .gitignore (59c7f5a)
  • feat(WriteTask): Add struct+array test (5ee6469)
  • feat(package): implement prepare script (7bcc337)
  • feat(struct): Add support to Array in Struct properties (40874d9)

What's Changed

New Contributors

Full Changelog: v28.2.1...v28.3.0

Release 28.2.1

15 Aug 04:05
d6fa634
Compare
Choose a tag to compare
  • rebuild docs (a050bb1)
  • Merge branch 'main' of github.com:photostructure/exiftool-vendored.js (5371d76)
  • prep release (a37054a)
  • fix #200 (5ad534b)
  • update eslint. delint. (8678922)
  • Bump @types/node from 20.14.14 to 22.1.0 (ae42603)
  • Bump npm-check-updates from 16.14.20 to 17.0.2 (6a36098)