# @suaveplan/exif - Dependency-free, runtime-agnostic EXIF/XMP/IPTC metadata reader, writer, and stripper for JPEG and PNG images Dependency-free, runtime-agnostic EXIF/XMP/IPTC metadata reader, writer, and stripper for JPEG and PNG images. Parses JPEG segment chains to locate and decode the EXIF IFD (TIFF byte-order aware, including GPS and SubIFD), IPTC IIM (caption, keywords, copyright), and XMP Dublin Core (raw XML string extraction). Writes back a revised EXIF IFD without re-encoding the image pixels, and strips all metadata segments for privacy-preserving image export. Includes a `ByteReader`/`ByteWriter` pair with rational arithmetic helpers and CRC-32 for PNG chunks. ## Documentation tree - [crc32](./src/binary/crc32/crc32.md) — _(no submodules)_ - [crc32](./src/binary/crc32/crc32.md) — _(no submodules)_ - [rational](./src/binary/rational/rational.md) — _(no submodules)_ - [rational](./src/binary/rational/rational.md) — _(no submodules)_ - [reader](./src/binary/reader/byte-reader.md) — _(no submodules)_ - [byte-reader](./src/binary/reader/byte-reader.md) — _(no submodules)_ - [writer](./src/binary/writer/byte-writer.md) — _(no submodules)_ - [byte-writer](./src/binary/writer/byte-writer.md) — _(no submodules)_ - [read-metadata](./src/core/read-metadata.md) — The main entry point for reading image metadata. Orchestrates format detection, JPEG segment parsing, and EXIF/XMP/IPTC… - [strip-metadata](./src/core/strip-metadata.md) — Removes metadata segments from a JPEG image buffer and returns a clean image with only the pixel data intact. Privacy-s… - [write-metadata](./src/core/write-metadata.md) — Writes or updates EXIF metadata in a JPEG image buffer. Merges the provided patch over any existing EXIF data and rebui… - [errors](./src/errors/exif-error.md) — _(no submodules)_ - [exif-error](./src/errors/exif-error.md) — _(no submodules)_ - [exif](./src/exif/read-exif.md) — _(no submodules)_ - [read-exif](./src/exif/read-exif.md) — _(no submodules)_ - [format](./src/format/detect.md) — _(no submodules)_ - [detect](./src/format/detect.md) — _(no submodules)_ - [ifd](./src/ifd/parse.md) — _(no submodules)_ - [parse](./src/ifd/parse.md) — _(no submodules)_ - [iptc](./src/iptc/read-iptc.md) — _(no submodules)_ - [read-iptc](./src/iptc/read-iptc.md) — _(no submodules)_ - [jpeg](./src/jpeg/segments.md) — _(no submodules)_ - [segments](./src/jpeg/segments.md) — _(no submodules)_ - [xmp](./src/xmp/read-xmp.md) — _(no submodules)_ - [read-xmp](./src/xmp/read-xmp.md) — _(no submodules)_ ## Installation ```bash bun add @suaveplan/exif ``` ## Quick Start ```ts import { readMetadata, writeMetadata, stripMetadata } from "@suaveplan/exif"; // Read all metadata const meta = readMetadata(imageBuffer); console.log(meta.format); // "jpeg" console.log(meta.exif?.make); // "Canon" console.log(meta.exif?.gps?.latitude); // Write / update metadata const updated = writeMetadata(imageBuffer, { orientation: 1, software: "My App" }); // Strip all metadata for privacy const clean = stripMetadata(imageBuffer); ``` ## Modules - [`src/core/read-metadata.md`](./src/core/read-metadata.md) — Main entry point for reading image metadata - [`src/core/write-metadata.md`](./src/core/write-metadata.md) — Write or update EXIF metadata in JPEG buffers - [`src/core/strip-metadata.md`](./src/core/strip-metadata.md) — Remove metadata segments for privacy-safe export - [`src/binary/reader/byte-reader.md`](./src/binary/reader/byte-reader.md) — `ByteReader` with endianness support - [`src/binary/writer/byte-writer.md`](./src/binary/writer/byte-writer.md) — `ByteWriter` for TIFF reconstruction - [`src/binary/rational/rational.md`](./src/binary/rational/rational.md) — Rational number arithmetic helpers - [`src/binary/crc32/crc32.md`](./src/binary/crc32/crc32.md) — CRC-32 for PNG chunk validation - [`src/format/detect.md`](./src/format/detect.md) — Magic-byte image format detection - [`src/jpeg/segments.md`](./src/jpeg/segments.md) — JPEG segment chain parsing - [`src/ifd/parse.md`](./src/ifd/parse.md) — TIFF IFD parsing (GPS, SubIFD) - [`src/exif/read-exif.md`](./src/exif/read-exif.md) — Raw EXIF/TIFF buffer parsing - [`src/iptc/read-iptc.md`](./src/iptc/read-iptc.md) — IPTC IIM caption/keywords/copyright parsing - [`src/xmp/read-xmp.md`](./src/xmp/read-xmp.md) — XMP Dublin Core raw XML extraction - [`src/errors/exif-error.md`](./src/errors/exif-error.md) — `ExifError` and `EXIF_CODES` registry ## Subpath Exports | Subpath | Description | | --- | --- | | `@suaveplan/exif` | Main API: readMetadata, writeMetadata, stripMetadata | | `@suaveplan/exif/binary` | ByteReader, ByteWriter, rational utilities, CRC-32 | | `@suaveplan/exif/format` | detectImageFormat — magic byte detection | | `@suaveplan/exif/exif` | readExifFromTiffBuffer — raw TIFF/EXIF parsing | | `@suaveplan/exif/iptc` | readIptc — IPTC IIM parsing | | `@suaveplan/exif/xmp` | readXmp — XMP Dublin Core parsing | | `@suaveplan/exif/errors` | ExifError, EXIF_CODES |