CLI tool
exiftool/exiftool avatar
exiftool/exiftool

ExifTool: reading and writing metadata across 200+ file formats

ExifTool meta information reader/writer

5,262 stars502 forksPerlGPL-3.0

At a glance

What is it?
ExifTool is a Perl library plus a command-line application that reads, writes and creates EXIF, IPTC, XMP, GPS, MakerNotes and dozens of other metadata blocks. It is aimed at people who need to inspect or change metadata in bulk, not at photographers who want a GUI.
Who is it for?
Adopt ExifTool if you need scriptable metadata reads and writes across mixed formats, especially camera MakerNotes that other libraries ignore. Do not adopt it if you need a GUI, a stable API for a language other than Perl, or a tool that guarantees a reversible write on every format.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 4 days ago.
What is it written in?
Mainly Perl, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on November 14, 2026, and from our analysis. They are not legal advice.

From daily snapshots

Star history

  • exiftool/exiftool5,262 ★ · +180
Star history
Repository2026-09-232026-11-14
exiftool/exiftool5.1k5.3k

180 Stars in the last 52 days, measured from the daily GitHub snapshot. Compare with other projects

Editorial analysis

What ExifTool actually solves, and for whom

Most metadata libraries handle one container. A JPEG library reads EXIF; a PDF library reads document info; a video library reads QuickTime atoms. ExifTool treats all of them as one problem. The README lists support for EXIF, GPS, IPTC, XMP, MakerNotes, Photoshop IRB, ICC Profile, MIE, JFIF, PDF, PNG, GeoTIFF, CIFF, AFCP, Kodak Meta, FlashPix, QuickTime, Matroska, MXF, ID3 and more, with r/w/c markers showing which can be read, written or created.

The file-type table is the part that matters. Alongside JPEG, TIFF, PNG, HEIC, AVIF, JXL and WEBP, it covers raw formats from Canon (CR2, CR3, CRW), Nikon (NEF, NRW), Sony (ARW, SR2, SRF, SRW), FujiFilm (RAF), Olympus (ORF), Panasonic (RW2, RWL), Pentax (PEF), Sigma (X3F), Phase One (IIQ) and DJI, plus MP4, MOV, MKV, M2TS and INSV for video. That breadth is the reason forensic examiners, archivists and photo pipeline engineers keep it in their toolchain: one command covers a folder where every file has a different extension.

The audience is narrow in one respect. ExifTool is a command-line application and a set of Perl modules. There is no bundled graphical interface. Anyone who wants to click through tags should look elsewhere.

How the Perl modules and the exiftool script fit together

The distribution is a Perl module tree under lib/ named Image::ExifTool, plus a top-level script called exiftool that uses it. The README states the script can be run immediately without installing the package, because it looks in the adjacent lib directory. Move the script on its own and it stops working unless you move lib/ with it or install the package system-wide.

Reading is the default mode. Running the script against a file prints a tag list; creation of new metadata blocks is limited to the formats the table marks with c, such as EXIF, IPTC, XMP, ICC Profile, MIE and Canon VRD.

The README points to html/index.html for feature detail, and the repository ships config_files/, fmt_files/ and arg_files/ directories alongside build_tag_lookup and build_geolocation.

One design choice worth naming: MakerNotes are vendor-specific binary blobs. ExifTool can read and write them, but the README does not promise that a write is safe on every camera model. Treat MakerNote edits as the highest-risk operation in the tool.

Installing ExifTool and running a first read

The README describes two paths. The first needs no install at all: unpack the distribution and run the script from inside its directory. The example uses the bundled test image.

bash
cd ~/Desktop
gzip -dc Image-ExifTool-13.60.tar.gz | tar -xf -
cd Image-ExifTool-13.60
./exiftool t/images/ExifTool.jpg

You should see a table of tag names and values for that test image. Substitute the full path of your own file for t/images/ExifTool.jpg.

The second path installs Image::ExifTool so other Perl scripts can use it. The README gives this sequence, and notes that the final step needs root access.

bash
perl Makefile.PL
make
make test
make install

On Windows, the README warns that the cmd shell may require renaming exiftool to exiftool.pl, or invoking it as perl exiftool. The repository also ships windows_exiftool and windows_exiftool.txt, and a pp_build_exe.args file for building a standalone executable.

Where ExifTool is the wrong tool

ExifTool is distributed under the same terms as Perl, offering an Artistic License or GPL option rather than only GPL-3.0. Review the licence accompanying the exact distribution and your chosen terms before redistributing or embedding it.

The second constraint is the Perl dependency. The README warns that some Perl installations, naming the standard OSX installation as an example, may lack the files needed for perl Makefile.PL. The fallback is manual installation by moving exiftool and lib/ into place. That is workable but it means the tool is not a self-contained binary unless you build one through the pp_build_exe.args route.

The third constraint is write coverage. The file-type table marks many formats read-only: MP3 is r, FLAC is r, OGG is r, AVI is r, ASF is r, DOCX is r, XLSX is r, PPTX is r. If your pipeline needs to write metadata into an MP3 or a DOCX, ExifTool will not do it, and the table is the authoritative answer rather than the description at the top of the README.

Finally, test writes on copies first: the part of the README shown here does not cover backups, so check the full documentation before editing irreplaceable originals.

ExifTool compared with format-specific libraries

The obvious alternative is to use one library per format: piexif or Pillow for JPEG and TIFF, pypdf for PDF document info, mutagen for audio tags, ffmpeg or a container parser for MP4 and MKV. Each of those is typically available as a native package in the language you already write, and each is smaller than a Perl distribution.

The difference in approach is coverage versus integration. A format-specific library knows its container deeply and exposes a typed API in your language. ExifTool knows many containers shallowly but uniformly, and its uniform interface is a tag name and a string value. That uniformity is what makes a single shell loop over a mixed folder possible; it is also why the output is text you have to parse rather than objects you can inspect.

A second alternative is ExifTool's own Perl API. If your codebase is already Perl, using Image::ExifTool directly avoids spawning a process per file and gives you the parsed structure. The README's installation section exists precisely for that case. For everyone else, the CLI is the interface.

There is no bundled GUI, so anyone comparing ExifTool with a desktop metadata editor is comparing two different categories.

Maintenance, upgrade cost and licence

The repository is not archived, and the last push was on 2026-10-28. The README names version 13.60 in its unpacking example, which indicates the project is on a 13.x line at the time of that document. The repository has no published GitHub releases, so there is no cadence between versions to state.

Upgrade cost is low for the CLI path: unpack a new tarball and the script runs. It is higher for the installed-module path, where make install touches the system Perl tree and a version mismatch between the installed Image::ExifTool and a separately downloaded exiftool script is a plausible failure. The README's instruction to move lib/ alongside the script exists to avoid exactly that.

The repository also ships .pre-commit-hooks.yaml and a perl-Image-ExifTool.spec file.

ExifTool is available under the same terms as Perl, including an Artistic License or GPL option. Review the licence files in the version you distribute and the terms you choose, including any third-party components.

Editorial conclusion

Adopt ExifTool if you need scriptable metadata reads and writes across mixed formats, especially camera MakerNotes that other libraries ignore. Do not adopt it if you need a GUI, a stable API for a language other than Perl, or a tool that guarantees a reversible write on every format. Before relying on it in a pipeline, verify the write behaviour on your own files: keep a copy of the original, run the exiftool script from the distribution directory so it finds lib/, and confirm the tags you expect appear in the output.

Frequently asked questions

What is ExifTool used for?

It reads, writes and creates meta information in a wide variety of files, including EXIF, GPS, IPTC, XMP, MakerNotes, ICC Profile, PDF and QuickTime data. The README lists both the file types and the metadata formats it supports.

Is ExifTool safe to use?

MakerNote writes are the riskiest case because they touch vendor-specific binary data. Verify on a copy before editing originals.

Is ExifTool free to use?

The repository is licensed GPL-3.0, so it is free software under that licence. Read the LICENSE file for the terms.

What does ExifTool stand for?

The README does not explain the name. It identifies the tool as ExifTool by Phil Harvey, a set of Perl modules plus a command-line application for reading and writing meta information.

How do I install ExifTool on Windows?

The README says the cmd shell may need the script renamed to exiftool.pl, or invoked as perl exiftool. The repository also ships windows_exiftool and windows_exiftool.txt, and a pp_build_exe.args file used to build a standalone executable.

How do I use ExifTool to read metadata?

Run the exiftool script against a file, as in the README example ./exiftool t/images/ExifTool.jpg from inside the distribution directory. It prints a table of tag names and values.

Official sources

  1. exiftool/exiftool on GitHub
  2. Issues
  3. License: GPL-3.0
  4. Project website
  5. README
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/exiftool-exiftool.svg)](https://hysenlabs.com/projects/exiftool-exiftool)

Star history chart for your README

markdown
[![Star history](https://hysenlabs.com/chart/exiftool-exiftool.svg)](https://hysenlabs.com/projects/exiftool-exiftool)

Was this useful?