ExifTool (13.30) powered by WebAssembly to extract and write metadata from files in browsers and Node.js environments using zeroperl.
npm install @uswriting/exiftool
This package provides a WebAssembly-based implementation of ExifTool that works in both browser and Node.js environments. It leverages zeroperl to execute ExifTool without requiring any native binaries or system dependencies.
import { parseMetadata } from '@uswriting/exiftool'; // Browser usage with File API document.querySelector('input[type="file"]').addEventListener('change', async (event) => { const file = event.target.files[0]; const result = await parseMetadata(file); if (result.success) { console.log(result.data); } else { console.error('Error:', result.error); } });
import { writeMetadata } from '@uswriting/exiftool'; const result = await writeMetadata(file, { 'Author': 'John Doe', 'Title': 'My Photo', 'Keywords': 'nature,photography' }); if (result.success) { // result.data contains the modified file as Uint8Array const modifiedBlob = new Blob([result.data]); }Extracting Specific Metadata
import { parseMetadata } from '@uswriting/exiftool'; const result = await parseMetadata(file, { args: ['-Author', '-CreateDate', '-Make', '-Model'] }); if (result.success) { console.log(result.data); }
import { parseMetadata } from '@uswriting/exiftool'; const result = await parseMetadata(file, { args: ['-json', '-n'], transform: (data) => JSON.parse(data) }); if (result.success) { // Typed access to properties console.log(result.data); // { ... } }
File
object directly from file inputs. Do not convert it to an ArrayBuffer or Uint8Array.async function parseMetadata<TReturn = string>( file: Binaryfile | File, options: ExifToolOptions<TReturn> = {} ): Promise<ExifToolOutput<TReturn>>
file
: Either a browser File
object or a Binaryfile
object with name
and data
properties.options
: Configuration options for the metadata extraction.async function writeMetadata( file: Binaryfile | File, tags: ExifTags, options: ExifToolOptions = {} ): Promise<ExifToolOutput<ArrayBuffer>>
file
: Either a browser File
object or a Binaryfile
object with name
and data
properties.tags
: Object containing metadata tags to write, where keys are tag names and values are tag values.options
: Configuration options for the write operation.Returns a Promise that resolves to an ExifToolOutput
object:
type ExifToolOutput<TOutput> = | { success: true; data: TOutput; error: string; exitCode: 0; } | { success: false; data: undefined; error: string; exitCode: number | undefined; };
Apache License, Version 2.0
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4