Skip to content

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 29 Sep 09:24
· 156 commits to main since this release
e53587d

Added

  • Generalized XMP property writer: arbitrary group:property keys with value
    shapes (scalar, rdf:Alt x-default, rdf:Bag, rdf:Seq), per-namespace
    xmlns declaration, upsert-or-replace semantics, and fresh-packet fallback
    when a container has no XMP.
  • P0 descriptive tags on all write containers: XMP-dc:Subject (keywords Bag,
    replace-not-append), XMP-dc:Title, XMP-dc:Description
    (Alt/x-default), XMP-xmp:MetadataDate.
  • XMP embedding per container: PNG (iTXt, uncompressed, keyword
    XML:com.adobe.xmp), WebP (XMP RIFF chunk + VP8X flag), plain TIFF
    (IFD0 XMP/XMLPacket tag 0x02BC) — previously EXIF-only.
  • IPTC IIM writer for JPEG APP13: repeatable Keywords (record 2, dataset 25)
    plus CodedCharacterSet (record 1, dataset 90) = UTF-8; merges into an
    existing Photoshop IRB, replacing only the 8BIM 0x0404 block.
  • ExifTool.writeSidecar(): Lightroom-readable .xmp sidecar for RAW/DNG
    pickup, with read-merge of unknown properties and idempotent re-runs.
  • ExifToolCore.writeBytes (in-memory path) supports all of the above.

Changed

  • TIFF writing restricted to plain TIFF: camera RAW (CR2, NEF, ARW, …) and
    files with SubIFDs (DNG raw data, previews, tiles) throw
    UnsupportedFormatError instead of risking corruption — use the sidecar
    mode for those.

Fixed

  • TIFF writer used a typo'd XMP tag id (0xBC01); the real XMP/XMLPacket tag
    is 0x02BC.
  • Big-endian TIFF version check read bytes 2/3 swapped, rejecting valid
    big-endian TIFF files.

Known limitation

  • Adding EXIF entries to a JPEG can shift value areas in the rebuilt EXIF
    block, breaking MakerNotes whose internal offsets are absolute from the
    TIFF header (e.g. Olympus). XMP/IPTC-only writes never touch the EXIF
    block. Reference exiftool fixes this with per-maker offset logic.