A pure Rust reimplementation of ExifTool v13.53 — read, write, and edit metadata in image, audio, video, and document files. No unsafe code, no Perl dependency, no system libraries.
- 194/194 test files (100%) produce identical tag names as Perl ExifTool v13.53
- 93 format readers covering all Perl ExifTool modules
- 15 format writers: JPEG, TIFF, PNG, WebP, PSD, PDF, MP4, MKV, AVI, WAV, FLAC, MP3, OGG, CR2, HEIF/AVIF
- 17 MakerNote manufacturers with deep sub-table decoders
- Timed metadata extraction (
-ee) for dashcams, action cams, drones - Optional GUI with 23 languages (3230 tags translated per language)
- 0 compiler warnings, no unsafe code, minimal dependencies
| Category | Formats |
|---|---|
| Images | JPEG, TIFF, PNG, WebP, PSD, BMP, GIF, HEIF/AVIF, ICO, PPM, PGF, BPG, XCF, MIFF, PICT, PCX, MNG, JXR, FLIF, Radiance HDR, OpenEXR, PSP, InDesign |
| Raw | CR2, CR3, CRW, CRM, NEF, DNG, ARW, ORF, RAF, RW2, PEF, SR2, SRW, X3F, IIQ, 3FR, ERF, MRW, Rawzor, KyoceraRaw |
| Video | MP4/MOV, AVI, MKV/WebM, MPEG, MTS/M2TS, WTV, DV, FLV, SWF, MXF, ASF/WMV, Real (RM/RAM) |
| Audio | MP3, FLAC, WAV, OGG, Opus, AAC, AIFF, APE, MPC, WavPack, DSF, Audible |
| Documents | PDF, RTF, HTML, PostScript, DjVu, OpenDocument (ODT/ODS/ODP/ODG), TNEF |
| Fonts | TrueType (TTF), OpenType (OTF), WOFF/WOFF2, AFM, PFA, PFB |
| Scientific | DICOM, MRC, FITS, XISF, DPX, LIF (Leica) |
| Archives | ZIP, 7Z, RAR, GZIP, ISO, Torrent |
| Other | EXE/ELF/Mach-O, LNK, VCard, ICS, JSON, PLIST, PCAP, MIE, MOI, Lytro LFP, FLIR FPF, CaptureOne EIP, Palm PDB, FlashPix (OLE), iWork, Red R3D |
| Category | Formats |
|---|---|
| Images | JPEG, TIFF, PNG, WebP, PSD |
| Raw | CR2, HEIF/AVIF |
| Video | MP4, MKV, AVI |
| Audio | MP3, FLAC, WAV, OGG |
| Documents |
| Manufacturer | Sub-table Decoders |
|---|---|
| Canon | CameraSettings, ShotInfo, AFInfo, ColorData (WB), CustomFunctions, VRD, CIFF, CTMD |
| Nikon | NikonCapture (D-Lighting, Crop, ColorBoost, UnsharpMask), ScanIFD, CaptureOffsets |
| Sony | SonyIDC, lens tables (400+ entries) |
| Pentax | CameraSettings (K10D/K-5), AEInfo, LensInfo, FlashInfo, CameraInfo |
| Olympus | Equipment, CameraSettings, FocusInfo, RawDevelopment |
| Panasonic | RW2 sub-IFDs, AdvancedSceneMode composite |
| Fujifilm | RAF WB, PreviewImage |
| Samsung | MakerNote IFD |
| Sigma | MakerNote IFD, X3F raw |
| Casio | Type 1, Type 2 |
| Ricoh | MakerNote IFD |
| Minolta | MakerNote IFD |
| Apple | MakerNote IFD |
| MakerNote IFD | |
| FLIR | Thermal metadata, FPF |
| GE | MakerNote IFD |
| GoPro | GPMF timed metadata |
| Source | Formats |
|---|---|
| Dashcams | freeGPS (Novatek, Viofo, Azdome, Akaso, Vantrue, INNOVV, Nextbase), Kenwood (DRV-A510W) |
| Action cams | GoPro GPMF (GPS, accelerometer, gyroscope), Insta360 |
| Drones | DJI telemetry, Yuneec/Autel (subtitle tracks) |
| Android | Google CAMM (camera motion metadata, types 0-7) |
| Generic | NMEA sentences (RMC, GGA), RVMI, Garmin |
use exiftool_rs::ExifTool;
let et = ExifTool::new();
let tags = et.extract_info("photo.jpg").unwrap();
for tag in &tags {
println!("{}: {}", tag.name, tag.print_value);
}# Install (CLI only)
cargo install exiftool-rs
# Install with GUI
cargo install exiftool-rs --features gui
# Read metadata
exiftool-rs photo.jpg
# Short tag names
exiftool-rs -s photo.jpg
# JSON output
exiftool-rs -j photo.jpg
# Write tags
exiftool-rs -Artist="John Doe" -Copyright="2024" photo.jpg
# Show groups
exiftool-rs -G photo.jpg
# Numeric values
exiftool-rs -n photo.jpg
# Extract embedded GPS from dashcam video
exiftool-rs -ee video.mp4exiftool-rs includes an optional graphical interface built with egui.
# Install with GUI support
cargo install exiftool-rs --features gui
# Launch the GUI
exiftool-rs-gui
# Or with a specific language
exiftool-rs-gui -lang frFeatures:
- Open files or folders, navigate with arrow keys
- View all metadata grouped by category
- Double-click any writable tag to edit it
- Copy all metadata to clipboard
- Save edits back to the file
- 23 languages supported (CJK, Arabic, Hindi, Bengali fonts included via noto-fonts-dl)
| Code | Language | Code | Language | Code | Language |
|---|---|---|---|---|---|
en |
English | fr |
French | pl |
Polish |
ar |
Arabic | hi |
Hindi | pt |
Portuguese |
bn |
Bengali | it |
Italian | ru |
Russian |
cs |
Czech | ja |
Japanese | sk |
Slovak |
de |
German | ko |
Korean | sv |
Swedish |
en_ca |
English (CA) | nl |
Dutch | tr |
Turkish |
en_gb |
English (UK) | fi |
Finnish | zh |
Chinese (Simplified) |
es |
Spanish | zh_tw |
Chinese (Traditional) |
Each language includes 3230 translated tag descriptions plus all UI strings.
| OS | Icon in binary | Notes |
|---|---|---|
| Windows | Yes | Icon embedded in .exe via winres |
| macOS | No | Requires a .app bundle with .icns |
| Linux | No | ELF binaries don't support embedded icons |
| Option | Description |
|---|---|
-s |
Short tag names |
-s2 |
Very short (tag names only) |
-G |
Show group names |
-n |
Numeric output (no print conversion) |
-j |
JSON output |
-csv |
CSV output |
-X |
XML/RDF output |
-b |
Binary output (thumbnails, etc.) |
-ee |
Extract embedded data (GPS from dashcams, etc.) |
-r |
Recursively scan directories |
-ext EXT |
Process only files with extension EXT |
-TAG |
Extract specific tag(s) |
-ver |
Show version |
-TAG=VALUE |
Write tag |
-TAG= |
Delete tag |
-overwrite_original |
Overwrite without backup |
-stay_open True |
Keep running, read commands from stdin |
-lang LANG |
Set language (GUI and tag descriptions) |
-v |
Verbose output |
-htmlDump |
HTML hex dump of file structure |
-validate |
Validate metadata |
-diff |
Show differences between files |
-args |
Print in ExifTool arg format |
-php |
PHP array output |
-progress |
Show progress during processing |
-scanForXMP |
Scan file for XMP data |
# Unit tests
cargo test
# ISO-functional test against Perl ExifTool's 194 test files
# No Perl required — reference files included in tests/expected/
./scripts/test_iso.sh
# 194/194 files (100%) produce identical tag names — 11625 tags verifiedgit clone https://github.com/Le-Syl21/exiftool-rs
cd exiftool-rs
# CLI only
cargo build --release
# CLI + GUI
cargo build --release --features guiThe gui feature is optional and not included by default. Without it, the GUI dependencies (egui, eframe, image, rfd, noto-fonts-dl) are not downloaded or compiled.
GPL-3.0-or-later (same as the original Perl ExifTool)
- Sylvain (@Le-Syl21) — Project creator
- Claude (Anthropic) — Implementation
Based on ExifTool by Phil Harvey. Tag tables and print conversions are generated from the ExifTool Perl source.
