
gittech. site
for different kinds of informations and explorations.
Exiftool-web, an interface for the CLI tool (running Perl in WASM)
exiftool-web
Demo available at http://exiftool.lucasgelfond.online.
Acknowledgements
This would not have been possible without Andrew Sampson's phenomenal package zeroperl and corresponding writeup. This also would not have been possible without browser_wasi_shim, a package that provides WASI support in web browsers, necessary for execution here.
There's lots of prior art about emulating Perl in the browser that I looked through but didn't end up using, like perlwasm and webperl. Also helpful was documentation about WASI support in the browser, including "Building a minimal WASI polyfill for browsers", wasm-cross, wasmer-js, WASI-Virt, and others.
Background
Open source intelligence (OSINT) is a technique used by researchers to glean insights from publicly available data sources. For example, Bellingcat used metadata on videos released by Russian separtists to prove that a video was released several days before its stated date. Researchers widely agree that exiftool is the best resource, but it is only available by command-line, and GUIs are Windows-only and many years old. Command-line tools present a large barrier to entry for non-programmer OSINT researchers, because they are non-intuitive to install and use.
Rather than building another GUI that requires installation, this one runs totally client-side! Using OPFS, we download the WASM executable from CDN (thanks zeroperl!), connect it to WASI browser shim to emulate the capabilities we need, and then do all of the bridge work with the regular browser file API in order to process multiple files.
Future Work
It would not be very difficult to add to this tool in a way that would allow you to edit (or totally remove) EXIF data from images and download them, which would be a nice anonymization/privacy ue case. You can think of this somewhat in those terms as well—you can see what you are putting out there! I'm also pretty eager to make this offline-friendly (i.e. with service workers / a browser manifest), and to bundle this as a desktop app: there's a few commits in here of starting to setup Tauri, but I got sidetracked / that will be a project for a different day!
We're open for patches and issues! Let me know how you find this.