Desktop app to clean metadata from images, videos, PDFs, and other files.
- Fast batch processing via ExifTool's stay-open protocol
- Drag and drop files or folders
- Free and open source (MIT)
- Cross-platform: macOS, Windows, and Linux
- Supports 90+ image, video, and document formats (full list below)
- Privacy controls: preserve orientation, save as copy, remove macOS extended attributes, preserve timestamps
- Folder recursion — drop a folder to process all files inside
- Metadata inspection — expand any file to see before/after diff
- Dark mode (follows OS preference)
- 25 languages with in-app language switching
- No automatic updates or network traffic — zero telemetry, zero phone-home
- Signed and notarized on macOS
ExifCleaner v4.0 is a complete modernization — the first release since v3.6.0 (May 2021). Highlights:
- 5 new privacy features: preserve orientation, save as copy, xattr removal, preserve timestamps, folder recursion
- Metadata inspection: expand any processed file to see exactly what was removed
- Language switching: change language from settings without restarting (25 locales)
- Security hardened: CSP, Electron Fuses, IPC validation, navigation hardening, permission gates
- macOS universal binary: native Apple Silicon support
- 265 unit tests + 42 E2E tests: comprehensive quality gates
See the CHANGELOG for the full list of changes.
macOS 10.15+, Windows 10+, and Linux are supported (64-bit).
- macOS: Download the .dmg file (universal binary — Intel + Apple Silicon)
- Windows: Download the .exe installer or portable version
- Linux: Download the .AppImage, .deb, or .rpm file
For Linux, the AppImage needs to be made executable after download.
Arch Linux users can install from the AUR:
paru -S exifcleaner-binEach release includes a SHASUMS256.txt file. Download it from the release page and verify your download:
sha256sum -c SHASUMS256.txt 2>&1 | grep OKBelow is a full list of supported file types that ExifCleaner will remove metadata for. It's based on which file types ExifTool supports write operations for.
- 3G2, 3GP2 – 3rd Gen. Partnership Project 2 a/v (QuickTime-based)
- 3GP, 3GPP – 3rd Gen. Partnership Project a/v (QuickTime-based)
- AAX – Audible Enhanced Audiobook (QuickTime-based)
- AI, AIT – Adobe Illustrator [Template] (PS or PDF)
- ARQ – Sony Alpha Pixel-Shift RAW (TIFF-based)
- ARW – Sony Alpha RAW (TIFF-based)
- AVIF – AV1 Image File Format (QuickTime-based)
- CR2 – Canon RAW 2 (TIFF-based) (CR2 spec)
- CR3 – Canon RAW 3 (QuickTime-based) (CR3 spec)
- CRM – Canon RAW Movie (QuickTime-based)
- CRW, CIFF – Canon RAW Camera Image File Format (CRW spec)
- CS1 – Sinar CaptureShop 1-shot RAW (PSD-based)
- DCP DNG – Camera Profile (DNG-like)
- DNG – Digital Negative (TIFF-based)
- DR4 – Canon DPP version 4 Recipe
- DVB – Digital Video Broadcasting (QuickTime-based)
- EPS, EPSF, PS – [Encapsulated] PostScript Format
- ERF – Epson RAW Format (TIFF-based)
- EXIF – Exchangeable Image File Format metadata (TIFF-based)
- EXV – Exiv2 metadata file (JPEG-based)
- F4A, F4B, F4P, F4V – Adobe Flash Player 9+ Audio/Video (QuickTime-based)
- FFF – Hasselblad Flexible File Format (TIFF-based)
- FLIF – Free Lossless Image Format
- GIF – Compuserve Graphics Interchange Format
- GPR – GoPro RAW (DNG-based)
- HDP, WDP, JXR – Windows HD Photo / Media Photo / JPEG XR (TIFF-based)
- HEIC, HEIF – High Efficiency Image Format (QuickTime-based)
- ICC, ICM – International Color Consortium color profile
- IIQ – Phase One Intelligent Image Quality RAW (TIFF-based)
- IND, INDD, INDT – Adobe InDesign Document/Template
- INSP – Insta360 Picture (JPEG-based)
- JP2, JPF, JPM, JPX – JPEG 2000 image [Compound/Extended]
- JPEG, JPG, JPE – Joint Photographic Experts Group image
- LRV – Low-Resolution Video (QuickTime-based)
- M4A, M4B, M4P, M4V – MPEG-4 Audio/Video (QuickTime-based)
- MEF – Mamiya (RAW) Electronic Format (TIFF-based)
- MIE – Meta Information Encapsulation (MIE specification)
- MOS – Creo Leaf Mosaic (TIFF-based)
- MOV, QT – Apple QuickTime Movie
- MP4 – Motion Picture Experts Group version 4 (QuickTime-based)
- MPO – Extended Multi-Picture format (JPEG with MPF extensions)
- MQV – Sony Mobile QuickTime Video
- NEF – Nikon (RAW) Electronic Format (TIFF-based)
- NRW – Nikon RAW (2) (TIFF-based)
- ORF – Olympus RAW Format (TIFF-based)
- PDF – Adobe Portable Document Format
- PEF – Pentax (RAW) Electronic Format (TIFF-based)
- PNG, JNG, MNG – Portable/JPEG/Multiple-image Network Graphics
- PPM, PBM, PGM – Portable Pixel/Bit/Gray Map
- PSD, PSB, PSDT – PhotoShop Document / Large Document / Template
- QTIF, QTI, QIF – QuickTime Image File
- RAF – FujiFilm RAW Format
- RAW – Panasonic RAW (TIFF-based)
- RW2 – Panasonic RAW 2 (TIFF-based)
- RWL – Leica RAW (TIFF-based)
- SR2 – Sony RAW 2 (TIFF-based)
- SRW – Samsung RAW format (TIFF-based)
- THM – Thumbnail image (JPEG)
- TIFF, TIF – Tagged Image File Format
- VRD – Canon DPP Recipe Data
- WEBP – WebP image format
- X3F – Sigma/Foveon RAW
- XMP – Extensible Metadata Platform sidecar file
ExifCleaner has the same writer limitations as the underlying exiftool it depends on. Taken from the official website:
- ExifTool will not rewrite a file if it detects a significant problem with the file format.
- ExifTool has been tested with a wide range of different images, but since it is not possible to test it with every known image type, there is the possibility that it will corrupt some files. Be sure to keep backups of your files.
- Even though ExifTool does some validation of the information written, it is still possible to write illegal values which may cause problems when reading the images with other software. So take care to validate the information you are writing.
- ExifTool is not guaranteed to remove metadata completely from a file when attempting to delete all metadata. For JPEG images, all APP segments (except Adobe APP14, which is not removed by default) and trailers are removed which effectively removes all metadata, but for other formats the results are less complete:
- JPEG - APP segments (except Adobe APP14) and trailers are removed.
- TIFF - XMP, IPTC, ICC_Profile and the ExifIFD are removed, but some EXIF may remain in IFD0. (The CommonIFD0 Shortcut tag is provided to simplify removal of common metadata tags from IFD0.)
- PNG - Only XMP, EXIF, ICC_Profile and native PNG textual data chunks are removed.
- PDF - The original metadata is never actually removed.
- PS - Only XMP and some native PostScript tags may be deleted.
- MOV/MP4 - Most top-level metadata is removed.
- RAW formats - It is not recommended to remove all metadata from RAW images because this will likely remove some proprietary information that is necessary for proper rendering of the image.
New translations and corrections to existing translations are welcome! See the Adding a Translation section below. Current translation status:
- Arabic by @ZER0-X
- Catalan by @marcarmengou
- Chinese (Mandarin) by MarcusPierce
- Croatian by @milotype
- Czech by @t0mzSK
- Danish by @zlatco
- Dutch by @rvl-code
- French by @NathanBnm
- German by @tayfuuun, @philippsandhaus
- Hungarian by @icetee
- Italian by @PolpOnline
- Japanese by @AKKED
- Malayalam by @theunknownKiran
- Persian by @RamtinA
- Polish by @m1chu
- Portuguese (Brazil) by @iraamaro, @dadodollabela
- Russian by @likhner
- Slovak by @LiJu09
- Spanish by @ff-ss
- Swedish by @sastofficial
- Turkish by @bsonmez
- Ukrainian by @hugonote
- Vietnamese by @tensingnightco
Built with Electron 35, React 19, and TypeScript 5.7 (strict mode). Uses a hand-rolled ExifTool wrapper implementing the -stay_open protocol for fast batch processing.
git clone https://github.com/szTheory/exifcleaner.git
cd exifcleaner
yarn installPull down the latest ExifTool binaries (requires Perl, macOS/Linux only):
yarn run update-exiftoolLaunch the app with Hot Module Reload:
yarn devyarn 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 checkAll translations live in .resources/strings.json. Add an entry for the new language code (list of codes) under each string:
"empty.title": {
"en": "No files selected",
"fr": "Aucun fichier selectionne",
"es": "Your translation here"
},To test with a specific locale:
yarn dev --lang=esReleases are built by GitHub Actions. To publish:
- Trigger the Release workflow via
workflow_dispatchin the GitHub Actions UI - CI builds all platforms (macOS signed + notarized, Windows, Linux)
- A draft GitHub release is created with all artifacts and SHASUMS256.txt
- Review the draft and publish when ready
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.
- @m1chu - Polish translation, Mac dock bug fix, Unicode filename debugging
- @LukasThyWalls - Unicode filename debugging, feature suggestions
- @AKKED - Japanese translation, Unicode filename debugging
- @TomasGutierrez0 - ExifTool dependency audit
- @5a384507-18ce-417c-bb55-d4dfcc8883fe - Linux version debugging
- @totoroot - Linux AppImage debugging, usability feedback, feature suggestions
- @Scopuli - Linux AppImage debugging
- @Tox86 - Settings menu bug report
- @ff-ss - Spanish translation
- @tayfuuun - German translation
- @philippsandhaus - German translation fixes
- @airvue - Ubuntu .deb debugging
- @Goblin80 - Ubuntu .deb debugging
- @zahroc - Bulk directory error diagnosis
- @iraamaro - Portuguese (Brazil) translation, Debian/Slackware build fix
- @LiJu09 - Slovak translation
- @likhner - Russian translation
- @hugonote - Ukrainian translation
- @dadodollabela - Portuguese (Brazil) translation fixes
- @zlatco - Danish translation
- @ZER0-X - Arabic translation
- @rvl-code - Dutch translation
- @PolpOnline - Italian translation, Arch Linux distribution
- @NathanBnm - French translation
- @Dyrimon - Linux AppImage exit fix
- @MarcusPierce - Chinese (Mandarin) translation
- @brandonlou - CVE-2021-22204 notification
- @v4k0nd - Checksum verification instructions
- @papb - Windows portable build
- @Bellisario - Windows portable build
- @overjt - XSS and Electron reverse shell vulnerability PoC
- @bsonmez - Turkish translation
- @milotype - Croatian translation
- @icetee - Hungarian translation
- @sastofficial - Swedish translation
- @theunknownKiran - Malayalam translation
- @t0mzSK - Czech translation
- @tensingnightco - Vietnamese translation
- @marcarmengou - Catalan translation
- @RamtinA - Persian translation
