exiftool-vendored
Advanced tools
Changelog
v17.1.0
✨ ExifDateTime
and ExifDate
now have a toMillis()
to render in
milliseconds from common epoch
📦 Expose closeChildProcesses
from underlying BatchCluster instance
🐞 Pull in batch-cluster bugfix
(Note that this build does not pull in ExifTool v12.44, due to this bug)
Changelog
v17.0.1
reasonableTzOffsetMinutes()
, extractOffset()
, and
offsetMinutesToZoneName()
handle UnsetZone
properly. This shouldn't normally come into play, as this would require serialization of the unset timezone, but... why not, eh?Changelog
v17.0.0
💔 Luxon has a breaking change. Please verify that date parsing and zone assignments work as expected.
🌱 ExifTool upgraded to v12.43.
🐞 UnsetZone
now uses Info.normalizeZone()
.
📦 Updated dependencies
Changelog
v16.5.1
🌱 ExifTool upgraded to v12.42.
📦 Updated dependencies
📦 Dropped Node v12 from GitHub Actions CI
📦 Added RELEASE.md
Changelog
v16.4.0
🐞 Struct values are now properly encoded when writing. Specifically, prior versions didn't support JSON string values (and now WriteTask knows how to serialize those characters to make ExifTool happy)
📦/💔 String.htmlEncode
was made private: it was a special-purpose function
just for WriteTask
.
📦 Added Node 18 to test matrix. Node 12 will be dropped from support in the next version.
📦 Updated dependencies
Changelog
v16.3.0
✨ Added ExifDateTime.fromMillis()
📦 Fixed hanging sentence in README. Rebuild docs.
📦 Migrated omit()
to Object
.
Changelog
v16.2.0
✨ Added read/write support for History and Versions structs.
These two tags return typed optional struct arrays.
Via the new StructAppendTags
interface, ExifTool.write()
now accepts
plus-suffixed variants of these tags to append to existing records.
🌱 ExifTool upgraded to v12.41.
📦 Updated dependencies
Changelog
v16.1.0
✨ Updated dependencies, including batch-cluster v10.4.0).
This new version will detect when tasks are rejected (due to parsing issues or
any other reason), and in that case, the child exiftool
process will be
verified to be "healthy" before being put back into the service pool.
Changelog
v16.0.0
💔/🐞 Timezone extraction has been adjusted: if there is a GPS location, we'll
prefer that tzlookup
as the authoritative timezone offset. If there isn't
GPS lat/lon, we'll use Timezone
, OffsetTime
, or TimeZoneOffset
. If those
are missing, we'll infer the offset from UTC offsets.
Prior builds would defer to the offset in Timezone
, OffsetTime
, or
TimeZoneOffset
, but GPS is more reliable, and results in a proper time zone
(like America/Los_Angeles
). Zone names work correctly even when times are
adjusted across daylight savings offset boundaries.
💔/🐞 Timezone application is now has been improved: if a timezone can be
extracted for a given file, ExifTool.read()
will now make all ExifDateTime
entries match that timezone. The timestamps should refer to the same
timestamp/seconds-from-common-epoch, but "local time" may be different as
we've adjusted the timezone accordingly.
Metadata sometimes includes a timezone offset, and sometimes it doesn't, and it's all pretty inconsistent, but worse, prior versions would sometimes inherit the current system timezone for an arbitrary subset of tags. This version should remove the system timezone "leaking" into your metadata values.
As an example, if you took a photo with GPS information from Rome (CET,
UTC+1), and your computer is in California with TZ=America/Los_Angeles
,
prior versions could return CreateDate: 2022-02-02 02:02:22-07:00
. This
version will translate that time into CreateDate: 2022-02-02 11:02:22+01:00
.
Note that this fix results in ExifTool.read()
rendering different ExifDateTime
values from prior versions, so I bumped the major version to highlight this
change.
💔 Tags
is automatically generated by mktags
, which now has a set of
"required" tags with type and group metadata to ensure a core set of tags
don't disappear or change types.
As a reminder, the Tags
interface is only a subset of fields returned, due
to TypeScript limitations. ExifTool.read()
still returns all values that ExifTool
provides.
🐞 Fixed a bunch of broken API links in the README due to typedoc
changing
URLs. Harumph.
🐞 Prior versions of ExifDateTime.parseISO
would accept just time or date
strings.
🐞/📦 TimeStamp
tags may now be properly parsed as ExifDateTime
.
📦 Added performance section to the README.
📦 Timezone offset formatting changed slightly: the hour offset is no longer zero-padded, which better matches the Luxon implementation we use internally.
📦 ExifDateTime
caches the result of toDateTime
now, which may save a
couple extra objects fed to the GC.
📦 Updated dependencies, including batch-cluster v10.3.2), which fixed several race conditions and added several process performance improvements including support for zero-wait multi-process launches.