Giter Site home page Giter Site logo

sztheory / exifcleaner Goto Github PK

View Code? Open in Web Editor NEW
1.7K 18.0 112.0 11.66 MB

Cross-platform desktop GUI app to clean image metadata

Home Page: https://exifcleaner.com

License: MIT License

HTML 2.33% Perl 17.75% TypeScript 70.08% CSS 9.84%
exif exiftool electron javascript nodejs desktop-app macos windows linux parallel

exifcleaner's Introduction

ExifCleaner

Version Total Downloads

Desktop app to clean metadata from images, videos, PDFs, and other files.

ExifCleaner demo

!!!!! 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
  • Supports PDF documents* (partial, see discussion)
  • Batch-processing
  • Multi-core support
  • Dark mode (automatic)
  • No automatic updates or network traffic
  • Multi-language support
  • Relatively few NPM dependencies (no JS frameworks)

Drawbacks

  • Executable size ~200MB (Electron app)
  • Memory usage ~120MB (Electron app)
  • PDF metadata removal is only partial (see discussion)
  • Does not remove extended filesystem attributes (see discussion)

Download and Install

Linux, macOS 10.10+, and Windows 7+ are supported (64-bit only).

For Linux, The AppImage needs to be made executable after download.

Arch Linux users can install the app from the AUR using an AUR helper (such as yay or paru):

paru -S exifcleaner-bin

Links

Supported File Types

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)
  • 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
  • X3F – Sigma/Foveon RAW
  • XMP – Extensible Metadata Platform sidecar file

File writer limitations

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:

sha512sum ExifCleaner-Setup-3.5.0.exe | cut -f1 -d\ | xxd -r -p | base64

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:

"empty.title": {
  "en": "No files selected",
  "fr": "Aucun fichier sélectionné"
},

You just add a line for "es" (list of language codes here) underneath the other ones:

"empty.title": {
  "en": "No files selected",
  "fr": "Aucun fichier sélectionné",
  "es": "Spanish translation here"
},

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:

  1. Fork the project on Github
  2. Follow the directions here to get ExifCleaner running in development mode on your computer
  3. 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
  • @TomasGutierrez0 - help auditing ExifTool dependency
  • @5a384507-18ce-417c-bb55-d4dfcc8883fe - help debugging initial Linux version
  • @totoroot - help debugging Linux AppImage installer, usability feedback, feature suggestions
  • @Scopuli - help debugging Linux AppImage installer
  • @Tox86 - found broken Settings menu item bug
  • @ff-ss (Francisco) - Spanish translation
  • @tayfuuun - German translation
  • @philippsandhaus - German translation fixes
  • @airvue - Help debugging Ubuntu .deb package error
  • @Goblin80 - Help debugging Ubuntu .deb package error
  • @zahroc - Help diagnosing error when adding bulk directories
  • @iraamaro - Portuguese (Brazil) translation. Fix for update_exiftool.pl when building from source on Debian and Slackware
  • @LiJu09 - Slovak translation
  • @likhner (Arthur Likhner) - Russian translation
  • @hugonote (Alexander Berger) - Ukranian translation
  • @dadodollabela - Portuguese (Brazil) translation fixes
  • @zlatco - Danish translation
  • @ZER0-X - Arabic translation
  • @rvl-code - Dutch translation
  • @PolpOnline - Italian translation, Arch Linux distribution maintainer
  • @NathanBnm (Nathan Bonnemains) - French translation
  • @Dyrimon - Linux AppImage error notification fix
  • @MarcusPierce - Chinese (Mandarin) translation
  • @brandonlou - Heads up on updating exiftool to 12.24+ to mitigate CVE-2021-22204 arbitrary code execution
  • @v4k0nd (Szabó Krisztián) - Help building instructions on verifying release checksums
  • @papb - Help setting up Windows portable build
  • @Bellisario - Help setting up Windows portable build
  • @overjt (Jonathan Toledo) - Proof of concept for XSS and Electron remote shell vulnerability
  • @bsonmez (Burak Sonmez) - Turkish translation
  • @milotype - Croatian translation
  • @icetee - Hungarian translation
  • @sastofficial - Swedish translation
  • @theunknownKiran - Malayalam translation
  • @t0mzSK - Czech translation
  • @tensingnightco - Vietnamese translation

exifcleaner's People

Contributors

bsonmez avatar dependabot[bot] avatar ff-ss avatar hugonote avatar icetee avatar iraamaro avatar liju09 avatar likhner avatar m1chu avatar marcuspierce avatar milotype avatar nathanbnm avatar polponline avatar rvl-code avatar sastofficial avatar sztheory avatar tayfuuun avatar tensingnightco avatar theunknownkiran avatar tomz00 avatar zlatco avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

exifcleaner's Issues

Error when trying to delete metadata from images (Linux .deb install and AppImage)

This is the error:

Unhandled Promise Rejection
Error: Exiftool process is not open
at ExiftoolProcess.close (/opt/ExifCleaner/resources/app.asar/node_modules/node-exiftool/src/index.js:33:35)
at file:///opt/ExifCleaner/resources/app.asar/webpack:/src/common/add_files.js:23:6
at file:///opt/ExifCleaner/resources/app.asar/webpack:/src/common/add_files.js:22:8

Add instructions to verify checksum of exiftool bins included with the app

Obviously I can trust myself since I'm the one who pulled the exiftool binaries and put them in the app. But for other users especially advanced ones they might want to confirm that the binaries haven't been tampered with for security reasons. It should be sufficient to provide instructions in the README for how to generate checksum of the binary (there are two, one for linux/mac and one for Windows) and compare it against what is listed on the official ExifTool website.

If someone wants to do the legwork on this feel free. Otherwise I hope to get around to it soon.

Setup Mac code signing for auto-update

Auto-update shows an Electron JS error alert on Mac because I haven't set up code signing for Mac releases yet. Workaround for now just hit OK and it should be fine. Not sure if the popup will happen periodically or on every new release. Will fix it when it annoys me enough.

Support drag to dock icon

This will provide an even faster workflow.

  • Support all platforms, Windows, Mac, and Linux.
  • Drag to dock when app is open
  • Drag to dock when app is not open

Show which exif data entries were removed after clean

Right now when you hover over the "# Exif After" column it shows you which metadata was not removed (because they are essential and could not be stripped). It would be nice if in this case, it showed a diff of the items that were removed. The removed ones could be indicated with a red color or with a strikethrough, for example.

Automatic update errors on launch

Unhandled Promise Rejection

Error: Redirect was cancelled
    at SimpleURLLoaderWrapper.<anonymous> (electron/js2c/browser_init.js:2558:23)

It's probably a configuration issue with electron-build for automatic updates.

Control exiftool version

I noticed in your package.json you use

"dist-exiftool": "^10.53.0",
"node-exiftool": "^2.3.0"

Both dependencies were last updated in 2017 and it appears it uses exiftool 10.53 (Released May 17, 2017) but exiftool's latest version is 11.89 (Released Feb 25, 2020)

I think it's important to be able to keep exiftool up to date, newer versions contain fixes, improvements and updates Exif version. Maybe you should look into other ways to include exiftool so you don't depend on someone else to keep it upto date.

Convert project to TypeScript

For now it's just been me working on the app so manual testing has worked out fine. There isn't much going on in the app so I can just run through it quickly and make sure it still works by dragging some images in and testing dark mode by toggling the OS setting. I'd like to add some automated tests but there is so much churn in the JS ecosystem that I don't even know which of the myriad options to pick. I'd like to start by just setting up a test framework and adding a single test for one of the files in src/common.

Once the framework is set up I won't have any issue adding more test cases. And I'll add it to Travis CI for automated builds.

Spanish translation

Hello!

I am an English Studies major from Spain. Would you be interested in a Spanish translation of Exif Cleaner? If so, please leave a contact email.

Recursively process sub-folders

Hi

Now, when you add a folder, and there is some files and some folder, exifcleaner only process the files. To process every sub-folder you need to add all of them one by one manually, and if there are sub-sub-folders add them manually, etc.

I think it should be useful if you add a folder, exifcleaner process all the files, and then automatically add all the sub-folders and try to process them. Also making an option to opt-in/opt-out this feature, and maybe should be some kind of measure to avoid loops (or a way to make stop the file process).

Thanks in advance.

Preferences: Add option to use system-install ExifTool instead of app bundled version

This will give the user greater ability to keep their exiftool up to date, and they might prefer to use a binary they have full control over for security reasons. The downside is that there could be some support issues related to exiftool versions that have a different CLI interface than what ExifCleaner expects. However, I think exiftool is pretty stable by now so it probably won't be much of an issue.

  • Add preference option (checkbox) to use local installed exiftool
  • Add instructions to install it and add to PATH
  • Auto detect if binary is properly set up in PATH and output its version
  • Add disclaimer that if they are having problems with ExifCleaner to try using the app-bundled version (?)
  • Add separate tab to Preferences window for this section

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.