Cross-platform desktop GUI app to clean image metadata
See the code
Desktop app to clean metadata from supported images, media files, and PDFs.
ExifCleaner v4.0 is a complete modernization — the first release since v3.6.0 (May 2021). Highlights:
See the CHANGELOG for the full list of changes.
macOS 12+, Windows 10+, and Linux are supported (64-bit).
arm64 build for Apple Silicon, the other for IntelExifCleaner.<version>.portable.exe (recommended) or ExifCleaner.Setup.<version>.exe (installer)For Linux, the AppImage needs to be made executable after download.
Your OS will warn you the first time you open it. ExifCleaner is not code-signed — see Opening unsigned builds for the one-time steps, and why.
Arch Linux users can install from the AUR:
paru -S exifcleaner-bin
ExifCleaner is not code-signed. On first launch your OS will warn you. This is expected, it is a one-time step, and it does not mean the download is unsafe — verify the checksum below if you want certainty.
macOS
Windows
Windows Defender SmartScreen shows "Windows protected your PC". Click More info → Run anyway.
Linux
No gatekeeping. The AppImage just needs chmod +x (above). .deb and .rpm install
normally.
Signing macOS builds requires an Apple Developer certificate at $99/year, and the certificate embeds the holder's legal name, which macOS then displays in the Gatekeeper dialog. Windows requires a separate EV certificate at $200–600/year tied to a verified legal identity. For a privacy tool maintained anonymously, that tradeoff isn't one this project is willing to make.
What you get instead:
Only download from the GitHub releases page. Builds shared through other channels are not ours and are not verified.
Each release includes a SHASUMS256.txt file. Download it from the release page and verify your download:
sha256sum -c SHASUMS256.txt 2>&1 | grep OK
ExifCleaner accepts only the formats below. This is the app's tested intake contract, not ExifTool's much broader reader/writer catalog.
.jpg, .jpeg, .png, .gif, .tiff, .tif, .webp, .heic, .heif, .bmp, .avif, .svg, .cr2, .cr3, .nef, .arw, .orf, .rw2, .raf, .dng, .pef, .srw.mp4, .mov, .avi, .m4a, .m4v, .3gp, .wmv.pdfExifCleaner relies on ExifTool's writer support. Some formats impose structural limits that prevent ExifCleaner from making an irreversible-removal guarantee:
| Format | What ExifCleaner can guarantee | Status |
|---|---|---|
| RAF | The operation is refused before writing because ExifCleaner cannot currently guarantee a safe cleaned RAF artifact. | Source is left unchanged |
| ExifTool writes a reversible PDF update; the original metadata remains recoverable, so ExifCleaner cannot securely erase PDF metadata. | Documented limitation — #216 | |
| MKV / Matroska | ExifTool exposes Matroska metadata for reading but does not provide writable tags, so ExifCleaner rejects MKV at intake. | Unsupported — #182 |
| TIFF | Removal may be partial because some metadata can remain in IFD0. | Open investigation — #199 |
| AVIF | A user-reported partial-removal case remains under investigation. | Open investigation — #215 |
The PDF behavior is documented in the ExifTool application documentation, and ExifTool's Matroska tag table marks the container's extracted tags as non-writable. TIFF and AVIF remain open because their reported behavior may still be addressable without introducing a separate file-format engine.
ExifCleaner has the same writer limitations as the underlying exiftool it depends on. Taken from the official website:
New translations and corrections are welcome. See Contributing for the small-string workflow. Current translation status:
Built with Electron, React 19, and TypeScript in strict mode. A hand-rolled ExifTool adapter uses the -stay_open protocol for fast batch processing. The engineering guide explains the architecture and traces a file end to end.
git clone https://github.com/szTheory/exifcleaner.git
cd exifcleaner
yarn install
Pull down the latest ExifTool binaries (requires Perl, macOS/Linux only):
yarn run update-exiftool
Launch the app with Hot Module Reload:
yarn dev
yarn test # Unit tests (Vitest, ~1.4s)
yarn test:e2e # E2E tests (Playwright, ~30s) — requires yarn compile first
yarn lint # Prettier formatting check
yarn typecheck # TypeScript strict mode check
Edit .resources/locales/<locale>.json, then run yarn i18n:write and
yarn i18n:check. See CONTRIBUTING.md for
placeholder, review, and testing guidance.
Releases are built by GitHub Actions. To publish:
yarn verify:release. If it reports known-gap release blockers, fix or remove the blocking marker before publishing; if it reports release-note drift, run yarn known-gaps:write and review the managed block.RELEASE_NOTES.md is current — it becomes the release body verbatimworkflow_dispatch in the GitHub Actions UIcodesign nor spctl can tell "shows a dialog you click through"
from "launches cleanly")Thanks to all the people who submitted bug reports, fixes, and translations. If I've missed you, let me know and I'll add you.
TypeScript
74.8%
JavaScript
21.0%
CSS
2.7%
Cross-platform desktop GUI app to clean image metadata
See the code
Desktop app to clean metadata from supported images, media files, and PDFs.
ExifCleaner v4.0 is a complete modernization — the first release since v3.6.0 (May 2021). Highlights:
See the CHANGELOG for the full list of changes.
macOS 12+, Windows 10+, and Linux are supported (64-bit).
arm64 build for Apple Silicon, the other for IntelExifCleaner.<version>.portable.exe (recommended) or ExifCleaner.Setup.<version>.exe (installer)For Linux, the AppImage needs to be made executable after download.
Your OS will warn you the first time you open it. ExifCleaner is not code-signed — see Opening unsigned builds for the one-time steps, and why.
Arch Linux users can install from the AUR:
paru -S exifcleaner-bin
ExifCleaner is not code-signed. On first launch your OS will warn you. This is expected, it is a one-time step, and it does not mean the download is unsafe — verify the checksum below if you want certainty.
macOS
Windows
Windows Defender SmartScreen shows "Windows protected your PC". Click More info → Run anyway.
Linux
No gatekeeping. The AppImage just needs chmod +x (above). .deb and .rpm install
normally.
Signing macOS builds requires an Apple Developer certificate at $99/year, and the certificate embeds the holder's legal name, which macOS then displays in the Gatekeeper dialog. Windows requires a separate EV certificate at $200–600/year tied to a verified legal identity. For a privacy tool maintained anonymously, that tradeoff isn't one this project is willing to make.
What you get instead:
Only download from the GitHub releases page. Builds shared through other channels are not ours and are not verified.
Each release includes a SHASUMS256.txt file. Download it from the release page and verify your download:
sha256sum -c SHASUMS256.txt 2>&1 | grep OK
ExifCleaner accepts only the formats below. This is the app's tested intake contract, not ExifTool's much broader reader/writer catalog.
.jpg, .jpeg, .png, .gif, .tiff, .tif, .webp, .heic, .heif, .bmp, .avif, .svg, .cr2, .cr3, .nef, .arw, .orf, .rw2, .raf, .dng, .pef, .srw.mp4, .mov, .avi, .m4a, .m4v, .3gp, .wmv.pdfExifCleaner relies on ExifTool's writer support. Some formats impose structural limits that prevent ExifCleaner from making an irreversible-removal guarantee:
| Format | What ExifCleaner can guarantee | Status |
|---|---|---|
| RAF | The operation is refused before writing because ExifCleaner cannot currently guarantee a safe cleaned RAF artifact. | Source is left unchanged |
| ExifTool writes a reversible PDF update; the original metadata remains recoverable, so ExifCleaner cannot securely erase PDF metadata. | Documented limitation — #216 | |
| MKV / Matroska | ExifTool exposes Matroska metadata for reading but does not provide writable tags, so ExifCleaner rejects MKV at intake. | Unsupported — #182 |
| TIFF | Removal may be partial because some metadata can remain in IFD0. | Open investigation — #199 |
| AVIF | A user-reported partial-removal case remains under investigation. | Open investigation — #215 |
The PDF behavior is documented in the ExifTool application documentation, and ExifTool's Matroska tag table marks the container's extracted tags as non-writable. TIFF and AVIF remain open because their reported behavior may still be addressable without introducing a separate file-format engine.
ExifCleaner has the same writer limitations as the underlying exiftool it depends on. Taken from the official website:
New translations and corrections are welcome. See Contributing for the small-string workflow. Current translation status:
Built with Electron, React 19, and TypeScript in strict mode. A hand-rolled ExifTool adapter uses the -stay_open protocol for fast batch processing. The engineering guide explains the architecture and traces a file end to end.
git clone https://github.com/szTheory/exifcleaner.git
cd exifcleaner
yarn install
Pull down the latest ExifTool binaries (requires Perl, macOS/Linux only):
yarn run update-exiftool
Launch the app with Hot Module Reload:
yarn dev
yarn test # Unit tests (Vitest, ~1.4s)
yarn test:e2e # E2E tests (Playwright, ~30s) — requires yarn compile first
yarn lint # Prettier formatting check
yarn typecheck # TypeScript strict mode check
Edit .resources/locales/<locale>.json, then run yarn i18n:write and
yarn i18n:check. See CONTRIBUTING.md for
placeholder, review, and testing guidance.
Releases are built by GitHub Actions. To publish:
yarn verify:release. If it reports known-gap release blockers, fix or remove the blocking marker before publishing; if it reports release-note drift, run yarn known-gaps:write and review the managed block.RELEASE_NOTES.md is current — it becomes the release body verbatimworkflow_dispatch in the GitHub Actions UIcodesign nor spctl can tell "shows a dialog you click through"
from "launches cleanly")Thanks to all the people who submitted bug reports, fixes, and translations. If I've missed you, let me know and I'll add you.
TypeScript
74.8%
JavaScript
21.0%
CSS
2.7%