Skip to content

fix(deps): update dependency exiftool-vendored to v31#22922

Closed
renovate[bot] wants to merge 1 commit intomainfrom
renovate/major-exiftool
Closed

fix(deps): update dependency exiftool-vendored to v31#22922
renovate[bot] wants to merge 1 commit intomainfrom
renovate/major-exiftool

Conversation

@renovate
Copy link
Contributor

@renovate renovate bot commented Oct 14, 2025

This PR contains the following updates:

Package Change Age Confidence
exiftool-vendored (source) ^28.8.0 -> ^31.0.0 age confidence
exiftool-vendored (source) ^28.3.1 -> ^31.0.0 age confidence

Warning

Some dependencies could not be looked up. Check the Dependency Dashboard for more information.


Release Notes

photostructure/exiftool-vendored.js (exiftool-vendored)

v31.1.0

Compare Source

  • 🌱 Upgraded ExifTool to version 13.38.
  • ✨ Rebuilt Tags.ts: fields that live in multiple groups are now included in every group. Prior versions would pick the first-seen group for these fields, and that was nondeterministic between versions.
  • 📦 TagMetadata.json keys are sorted to minimize later per-version diffs
  • 📦 (did you know that File:Comment was writable? TIL!)

v31.0.0

Compare Source

  • 💔 Rebuilt Tags.ts with new exiftool v13.37 and additional newer exemplar test images. Several prior fields (that hopefully no one is using) were dropped, and new fields were added (see the git diff of Tags.ts from the prior release for details)
  • 🌱 Upgraded ExifTool to version 13.37.

v30.5.0

Compare Source

  • 🌱 Upgraded ExifTool to version 13.35.

v30.4.0

Compare Source

v30.3.0

Compare Source

  • 🌱 Upgraded ExifTool to version 13.31.

  • ✨ Added Disposable interface support for automatic resource cleanup:

    • ExifTool now implements both Disposable and AsyncDisposable interfaces
    • Use using et = new ExifTool() for automatic synchronous cleanup (TypeScript 5.2+)
    • Use await using et = new ExifTool() for automatic asynchronous cleanup
    • Synchronous disposal initiates graceful cleanup with configurable timeout fallback
    • Asynchronous disposal provides robust cleanup with timeout protection
    • New options: disposalTimeoutMs (default: 1000ms) and asyncDisposalTimeoutMs (default: 5000ms)
    • Comprehensive error handling ensures disposal never throws or hangs
    • Maintains backward compatibility - existing .end() method unchanged
  • Enhanced JSDoc annotations for Tags interface with emoji-based visual hierarchy:

    • Replaced cryptic star/checkmark system with even more cryptic semantic JSDoc tags
    • Added 🔥/🧊 emojis to indicate mainstream consumer vs specialized devices
    • Format: @frequency 🔥 ★★★★ (85%) combines device type, visual rating, and exact percentage
    • Consolidated @​mainstream into @​frequency tag for cleaner, more compact documentation
    • Added @​groups tag showing all metadata groups where each tag appears (e.g., "EXIF, MakerNotes")
    • Generated data/TagMetadata.json with programmatic access to frequency, mainstream flags, and groups
    • Custom TypeDoc tags defined in tsdoc.json for proper tooling support
    • Star ratings maintain same thresholds: ★★★★ (>50%), ★★★☆ (>20%), ★★☆☆ (>10%), ★☆☆☆ (>5%), ☆☆☆☆ (≤5%)

v30.2.0

Compare Source

  • ✨ Enhanced StrEnum with iterator support and JSDoc

v30.1.0

Compare Source

  • 🌱 Upgraded ExifTool to version 13.30.

  • 🐞 Fixed ExifToolVersion to be a string. Prior versions used exiftool's JSON representation, which rendered a numeric float. This caused versions like "12.3" and "12.30" to appear identical. We now preserve the exact version string to enable proper version comparisons.

  • ✨ Added partial date support for ExifDate class. XMP date tags (like XMP:CreateDate, XMP:MetadataDate) now support:

    • Year-only dates: 1980 (numeric) or "1980" (string)
    • Year-month dates: "1980:08" (EXIF format) or "1980-08" (ISO format)
    • Full dates: "1980:08:13" (unchanged)
  • ✨ Enhanced ExifDate with type-safe predicates:

    • isYearOnly(): Returns true for year-only dates with type narrowing
    • isYearMonth(): Returns true for year-month dates with type narrowing
    • isFullDate(): Returns true for complete dates with type narrowing
    • isPartial(): Returns true for year-only or year-month dates
  • ✨ Added compositional TypeScript interfaces:

    • ExifDateYearOnly: {year: number}
    • ExifDateYearMonth extends ExifDateYearOnly: {year: number, month: number}
    • ExifDateFull extends ExifDateYearMonth: {year: number, month: number, day: number}
  • ✨ Enhanced WriteTags interface with group-prefixed tag support:

    • "XMP:CreateDate", "XMP:MetadataDate", etc. accept partial dates
    • "EXIF:CreateDate", etc. require full dates (type-safe distinction)
  • 📦 Docs are now automatically updated via GitHub Actions

  • 📦 Added comprehensive test coverage (47 new tests) for partial date functionality

  • 📦 Upgrade to batch-cluster v14.0.0 which removes the requirement for procps on most linux distributions.

v30.0.0

Compare Source

  • 🏚️ Dropped support for Node v18, whose End-of-Life was 2025-04-30.

  • 🌱 Upgraded ExifTool to version 13.29.

  • ✨ Added new TagNames string enumeration with the most popular 2,500(ish) tag field names that is automatically updated by mktags. As a reminder: the Tags interface is not comprehensive. If we're missing any of your favorite fields, open an issue with an attached example media file and I look into promoting it to a "guaranteed" status (like we've done with several hundred fields already).

  • 📦 Renamed the .tz field in Tags to .zone. Note that for the next few releases, .tz will be kept, but marked as deprecated. After doing a bit of research, it turns out the correct term for identifiers like America/Los_Angeles within the IANA Time Zone Database is "zone." The "tz" term commonly refers to the entire Time Zone Database, or "tz database" (also called tzdata or zoneinfo).

  • ✨ Updating to new versions of ExifTool is now fully automated via GitHub Actions.

v29.3.0

Compare Source

  • 🌱 Upgraded ExifTool to version 13.26.

  • ✨ Added support for keepUTCTime to ExifToolOptions. This is a new ExifTool feature specifically for unixtime-encoded datetimes, but seems to be rarely applicable as unixtime is not a valid encoding format for most datetime tags.

v29.2.0

Compare Source

v29.1.0

Compare Source

  • 🌱 Upgraded ExifTool to version 13.17. Note that this release includes seventeen ExifTool version bumps (from November 2024 through January 2025--Phil Harvey has been busy!). Although I haven't seen any breaking changes in the Tags generation or test suite with the new versions, please do your own validation.

  • ✨ Thanks to Mert for adding forceWrite to binary tag extraction.

  • ✨ ExifTool's Geolocation feature seems to work around some obscure GPS encoding issues where the decimal sign gets ignored. This project now leverages that "corrected" GPS location by adopting the hemisphere signs, which seems to fix this issue.

  • 🐞 Removed OffsetTime from the list of Timezone offset tags we infer tz from. Thanks for the heads-up, Carsten Otto!

  • 📦 Updated to the latest eslint, which required rewriting the config, and delinting the new nits

  • 📦 Deleted most of the prettier config to accept their defaults. This created a huge no-op commit but now it's over.

v29.0.0

Compare Source

  • 💔/🐞/📦 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.


Configuration

📅 Schedule: Branch creation - "before 9am on tuesday" (UTC), Automerge - At any time (no schedule defined).

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about these updates again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate renovate bot added changelog:skip dependencies Pull requests that update a dependency file labels Oct 14, 2025
@renovate renovate bot requested a review from danieldietzler as a code owner October 14, 2025 07:24
@renovate renovate bot added the renovate label Oct 14, 2025
@renovate renovate bot force-pushed the renovate/major-exiftool branch from 7e6dc20 to 508de93 Compare October 21, 2025 09:12
@danieldietzler
Copy link
Member

Superseded by #21445

@renovate
Copy link
Contributor Author

renovate bot commented Oct 21, 2025

Renovate Ignore Notification

Because you closed this PR without merging, Renovate will ignore this update. You will not get PRs for any future 31.x releases. But if you manually upgrade to 31.x then Renovate will re-enable minor and patch updates automatically.

If you accidentally closed this PR, or if you changed your mind: rename this PR to get a fresh replacement PR.

@renovate renovate bot deleted the renovate/major-exiftool branch October 21, 2025 10:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

changelog:skip dependencies Pull requests that update a dependency file renovate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant