revelo
Read technical metadata from any media file — pure Rust, no system dependencies.
A from-scratch Rust port of MediaInfoLib with optional ExifTool-grade EXIF/maker-note depth. Detects 180+ formats, decodes EXIF/IPTC/XMP tags, and handles maker-notes from 14 camera vendors.
No ./Configure, no system libraries, no Perl runtime. Zero unsafe code.
Part of the revelo project — see the project README for the full picture.
Install
[]
= "0.4"
Or via Cargo:
For ExifTool-grade maker-note depth across 14 camera vendors, opt into the exiftool-tables
feature:
[]
= { = "0.4", = ["exiftool-tables"] }
License note: the default build is BSD-2-Clause. The
exiftool-tablesfeature pulls in tables derived from ExifTool, so a binary or library built with it is subject to GPL/Artistic terms. See Licensing below.
Quick start
API surface
Metadata — the main type
| Method | Returns | Description |
|---|---|---|
Metadata::from_file(path) |
Option<Metadata> |
Parse a file by path |
Metadata::from_bytes(buf) |
Option<Metadata> |
Parse an in-memory byte slice |
meta.streams() |
&StreamCollection |
Raw stream collection for advanced queries |
meta.into_streams() |
StreamCollection |
Consume and return the underlying streams |
Stream accessors
Each method returns an Iterator<Item = (&str, &str)> of (field_name, value) pairs.
| Method | Stream kind | Typical use |
|---|---|---|
meta.general() |
General | Format, duration, file size, overall bitrate |
meta.video() |
Video | Codec, resolution, frame rate, HDR signalling |
meta.audio() |
Audio | Codec, channels, sample rate, language |
meta.text() |
Text | Subtitle/caption tracks |
meta.image() |
Image | Still-image metadata |
meta.exif() |
Exif | EXIF tags (camera settings, GPS, timestamps) |
meta.iptc() |
Iptc | IPTC press-photo metadata |
meta.xmp() |
Xmp | XMP/RDF metadata |
All accessors refer to the first stream of that kind (index 0). For files with multiple video or
audio tracks, use meta.streams() directly and call
streams.stream(StreamKind::Video, index) for each index.
MediaFile<'a> — low-level engine
MediaFile (a type alias for revelo_core::FileAnalyze) is the byte-level parsing engine.
It is re-exported for callers that need to feed raw FileAnalyze state into downstream crates
(revelo-dispatcher, revelo-parsers-tag, etc.). Most users should prefer Metadata.
What it extracts
- Containers & codecs — MP4/MOV, Matroska/WebM, MPEG-TS, AVI, WAV, and 180+ formats total, with codec details from AVC/HEVC/AV1/VP9 and AAC/AC-3/DTS/FLAC/Opus.
- Photo metadata — EXIF, GPS, IPTC, XMP, ICC, C2PA, and (with
exiftool-tables) deep maker-notes for Canon, Nikon, Fujifilm, Olympus, Sony, Panasonic, and more. - HDR signalling — HDR10+, Dolby Vision, HLG/PQ, plus Dolby Atmos / AC-4 and IAMF audio.
Re-exported crates
revelo re-exports its three underlying crates for callers that need direct access:
| Re-export | Crate | Purpose |
|---|---|---|
revelo::revelo_core |
revelo-core |
Stream model, FileAnalyze, StreamCollection, StreamKind |
revelo::revelo_dispatcher |
revelo-dispatcher |
Format detection and parser dispatch |
revelo::revelo_parsers_tag |
revelo-parsers-tag |
EXIF/IPTC/XMP/ICC/C2PA tag parsing |
License
- Core (default build): BSD-2-Clause — see LICENSE.
exiftool-tablesfeature: pulls inrevelo-exiftool-tables, which is GPL-1.0-or-later OR Artistic-1.0-Perl (tables derived from ExifTool, © Phil Harvey). A binary or library built with this feature inherits those terms.