Desktop app to clean metadata from images, videos, PDFs, and other files.
README
ExifCleaner
Desktop app to clean metadata from images, videos, PDFs, and other files.
!!!!! NOTE - UPGRADE TO 3.6.0+ ASAP !!!!!
If you are running a version of ExifCleaner before 3.6.0, upgrade immediately! A security vulnerability was found in exiftool, the command-line application that powers ExifCleaner under the hood, and this was updated in ExifCleaner 3.5.0. There was also an XSS and Electron remote shell vulnerability due to unsanitized HTML output that was fixed in ExifCleaner 3.6.0.
Benefits
Fast
Drag & Drop
Free and open source (MIT)
Windows, Mac, and Linux
Supports popular image formats such as PNG, JPG, GIF, and TIFF
Supports popular video formats such as M4A, MOV, and MP4
Below 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)
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.
Translations
New translations and corrections to existing translations are welcome! See the Adding a Translation section if there is a language you would like to add. Here is the current translations status:
Verifying checksum of downloads from the Github releases page
Download the latest.yml (Windows), latest-mac.yml (Mac), or latest-linux.yml (Linux) file from the release page that corresponds to your operating system. Then run the following command to generate a sha checksum. ExifCleaner 3.5.0 is used here as an example.
On Mac, Linux, and on Windows using the Linux Subsystem for Windows:
The output should match the sha512 value in the latest.yml file for the version you downloaded. As of now there is no checksum generated for the Linux RPM version (appears to be an electron-build issue, see Github issue here).
Development
Built with Electron. Uses node-exiftool as a wrapper for Exiftool binaries. To see the current list of NPM dependencies, run:
yarn list --production
Run the app in dev mode
Clone the repository and cd into the directory.
git clone https://github.com/szTheory/exifcleaner.git
cd exifcleaner
Next, install the NPM package dependencies.
yarn install
Pull down the latest ExifTool binaries (in Windows, run this within the Linux Subsystem for Windows):
yarn run update-exiftool
Finally, launch the application. This supports Hot Module Reload (HMR) so you will automatically see your changes every time you save a file.
yarn run dev
Contributing
This app is mostly feature complete. I want to keep it simple and not add a bunch of bloat to it. And I want to avoid release churn. That said, there are a couple small features that might be worth adding. And there are a few minor bugs or points of cleanup that would be worth polishing. If you'd like to help check out the Issue Tracker which contains an exhaustive list of known issues. Just pick one and submit a Pull Request or leave a comment and I can provide guidance or help if you need it. Make sure to test the app out to see if it still works though. There isn't much going on in this app so it should be easy enough to do. I might add some automated tests later on to help with this. For now it's just been me working on the app so manual testing has worked out fine.
TypeScript code is formatted using Prettier.
Adding a Translation
Adding a translation is easy. All you have to do is go to the translation list, click on "Edit this file", and add an entry for the new language underneath the other ones. So for example if you wanted to add a Spanish translation, where it says:
and repeat that pattern for each of the entries. That's probably the easiest way to contribute. If you want to be able to see all of your translations working in a live app before submitting, you can also do this:
Fork the project on Github
Follow the directions here to get ExifCleaner running in development mode on your computer
Then update the strings.json file as mentioned above, and quit the program and relaunch it to see your changes. When you're finished, commit your changes from the command line with for example git commit -am "Finished adding translations". Then run git push origin master, and go to the project URL your forked it to (for example https://github.com/myusernamehere/exifcleaner) and click the button to open a new Pull Request.
If you want to run the app with a specific locale without changing your system preferences, use one of the following commands with the correct language code. If you don't see your language listed below, just follow the pattern and plug in your own language code from this list.
yarn run dev --lang=en #English
yarn run dev --lang=fr #French
yarn run dev --lang=pl #Polish
yarn run dev --lang=ja #Japanese
yarn run dev --lang=es #Spanish
yarn run dev --lang=de #German
Let me know if you run into any issues, I can guide you through the process if you get stuck.
Linux AppImage Notes
To mount the AppImage and inspect it's contents:
./ExifCleaner-x.y.z.AppImage --appimage-mount
Where x.y.z is the release version number
Smoke test checklist for new releases
On all platforms:
Linux
Windows
Mac
Perform the following manual tests before a release:
Drag and drop hundreds of files
File -> Open dialog
Switch locale to each language and check translations
Switch between light and dark mode
Open "About" dialog
Publishing a new release
This section is really for my own reference when publishing a new release.
Bump the version with release (choose a "pre" release for point releases for testing):
yarn run release
Check the Github release page and confirm a new draft release was created. Then run the publish command:
yarn run publish
Once you're happy with the release and want to finalize it, remove the draft flag on the Github releases page.
Contributors
Thanks to all the people who submitted bug reports and fixes. I've tried to include everyone so if I've missed you it was by accident, just let me know and I'll add you.
@m1chu - Polish translation, fix for Mac dock bug on non-Mac platforms, help debugging Unicode filename bug
@LukasThyWalls - help debugging Unicode filename bug, feature suggestions
@AKKED - Japanese translation, help debugging Unicode filename bug