Different tools. Genuinely.
exiftool is one of the most complete pieces of software in its field and ScrubPony cross-checks itself against it in the test suite. This comparison is not "which is better" — it is "which problem are you solving".
exiftool for reading and editing metadata; ScrubPony for removing it and proving nothing else changed. exiftool reads and writes hundreds of tag sets across dozens of formats and is the reference implementation for most of them. ScrubPony does one operation on one format, with a fail-closed default, atomic writes, and a byte-identity guarantee on the image data that it will hand you the means to verify. If you need to know what is in a file, or to change a specific field, exiftool is the answer and it is not close.
At a glance.
| ScrubPony | exiftool | |
|---|---|---|
| Formats | JPEG only | Dozens, including HEIC, RAW, PNG, TIFF, video |
| Reads metadata | Structure and a summary of EXIF | Every tag, decoded and labelled |
| Edits metadata | Removal only, by design | Write, copy, shift dates, batch-rename |
| Removes metadata | The whole job, one policy | -all= and friends |
| Unknown vendor segments | Dropped by default — fails closed | Depends on the arguments you give it |
| Image data guarantee | Copied verbatim from SOS; verifiable in two commands | Also does not re-encode JPEG |
| Atomic writes | Temporary, fsync, rename — asserted under 30 SIGKILLs | Writes via a temporary; no fsync/interrupt guarantee documented |
| Keeps orientation when EXIF goes | Re-emits a 36-byte block automatically | Possible, with the right arguments |
| Preserves the mtime | Reset deliberately — it is metadata too | Optional, and the default with -P |
| Dependencies | libc | Perl |
| Size | 2,251 lines of C | Very large, by necessity |
| Fuzzed read path | 7,575,421 libFuzzer executions, zero crashes | Long-established, no published fuzzing figure |
| Licence | MIT | Perl Artistic / GPL |
| Price | Free | Free |
Honest tradeoffs.
Where exiftool wins
- It reads everything. exiftool decodes and labels tag sets ScrubPony does not even attempt to interpret — maker notes from dozens of manufacturers, formats ScrubPony refuses to open. If the question is "what is actually in this file", there is one answer and it is exiftool.
- It edits. Setting a copyright field, fixing a timezone across a shoot, copying metadata from one file to another: all of it routine in exiftool and all of it permanently out of scope here.
- It handles your whole camera roll, whatever is in it. HEIC, RAW, PNG, TIFF, video. ScrubPony reports and skips every one of those.
- It is the reference. ScrubPony's own golden tests compare its segment listing against exiftool's across 13 fixtures, and agreeing with exiftool is how they pass. That is the relationship: exiftool is the thing you check against.
- It can preserve the modification time. ScrubPony resets it deliberately and offers no flag. If you need mtimes intact, exiftool with -P is the tool.
Where ScrubPony wins
- One operation, one default, no arguments to get wrong. A removal command in exiftool is a set of arguments, and the difference between a good one and a subtly incomplete one is not obvious from reading it. ScrubPony has one policy: identified segments follow a published table, and anything unrecognised is dropped.
- It fails closed without being asked to. An unrecognised APPn segment is where a manufacturer parks a serial number, and it is removed by default here. Getting the equivalent guarantee elsewhere means knowing in advance what you are guarding against.
- Orientation survives without you thinking about it. Drop EXIF and rotated photos display sideways. ScrubPony writes back a minimal 36-byte block holding exactly that one field, automatically, on every file that needs it.
- The interrupt story is asserted, not assumed. Temporary, fsync, rename, with tests/run_interrupt.sh SIGKILLing a 24 MB in-place scrub thirty times and checking that only the two legal states ever appear on disk.
- Two commands to verify the strongest claim. tests/verify_scrub.py checks pixel identity four ways and locates the SOS offset with its own scanner rather than trusting the tool under test.
- Nothing to install but a compiler. No Perl, no module tree, no runtime. 2,251 lines you can read in an afternoon.
The verdict.
- Choose exiftool if you need to see what is in a file, edit a field, handle a format other than JPEG, or preserve modification times. It is more capable than ScrubPony in every one of those directions.
- Choose ScrubPony if the job is "remove everything identifying from these JPEGs and change nothing else", you want the unknown-segment case handled by default, and you want to be able to prove the picture is untouched.
- Use both if you already do —
exiftoolto look,scrubponyto clean, andexiftoolagain to confirm. That is exactly what the test suite does.
Common questions.
Is exiftool bad at removing metadata?
No. -all= works and is widely used. The difference is in defaults and guarantees rather than capability: ScrubPony picks one policy, fails closed on unknowns, keeps orientation without being asked, and ships a verification script for the pixel claim.
Does exiftool re-encode JPEGs?
No, and this is worth stating clearly: exiftool rewrites the container without touching the compressed image data, same as ScrubPony. Anybody telling you otherwise is wrong.
Why build another tool at all?
Because "remove everything identifying, keep the picture and the orientation, never leave a half-written file, and let me check it" turned out to be a small enough problem to do exhaustively in 2,251 lines. That is not an argument that exiftool should have done it — it is a different shape of tool.
Try ScrubPony
Free and MIT-licensed. No dependencies beyond libc, no configure step, and a pixel claim you can check in two commands.