Skip to content

[PROPOSAL] - EXIF Data Stripper & Viewer #38

@github-actions

Description

@github-actions

Existing Coverage Check

Reviewed before proposing:

This is net-new. EXIF stripping is explicitly listed as a research focus in AGENTS.md under Media Utilities ("EXIF stripping") and has no existing spec, issue, or live tool in this repo. While a handful of third-party browser-based tools exist (MetaClean, exifremover.com), none are open-source alternatives on tools.treble.dev. The repo's privacy-first mission creates a natural home for this tool.


Specify Draft Summary

Proposed spec path: specs/005-exif-stripper/spec.md

Problem: Photos taken on smartphones and cameras embed hidden metadata — GPS coordinates, device model, serial number, lens settings, and timestamps — that can expose a user's location, device identity, and daily patterns when images are shared publicly. Journalists, activists, domestic abuse survivors, and everyday users sharing photos online face real privacy risks from EXIF data. Every popular server-based tool (exifpurge.com, verexif.com, online-metadata.com) requires uploading photos to a third party — the exact opposite of what a privacy tool should do.

Users: Privacy-conscious individuals sharing photos on social media or forums; journalists protecting source locations; anyone who wants to share an image without broadcasting their home address.

Scope (3 prioritised stories):

Priority Story Description
P1 Strip & Download Drop image(s) → view extracted metadata → strip all EXIF → download clean image
P2 Selective Strip Choose which metadata fields to keep (e.g., retain color profile, remove GPS only)
P3 Batch Strip Load multiple images → strip all → download as zip

Key requirements: zero server transmission, JPEG and PNG support, display full metadata before stripping (EXIF viewer), GPS highlight with human-readable coordinates, selective field removal, preserve image quality and dimensions, batch mode with zip download, clear/reset, preview before and after.

Acceptance criteria:

  • SC-001: Zero bytes of image data transmitted to any external server
  • SC-002: GPS coordinates removed and unrecoverable in output file
  • SC-003: Output image displays identically to input in any image viewer
  • SC-004: Batch of 10 images stripped and packaged in under 20 seconds
  • SC-005: EXIF viewer correctly reads standard tags from JPEG files produced by iOS, Android, and DSLR cameras
  • SC-006: Functions in latest 2 major versions of Chrome, Firefox, Safari

The Gap

Photos contain hidden GPS, device, and timestamp data that can expose users' locations and identities when shared. Every major free online EXIF tool requires server upload — undermining the privacy purpose of the tool entirely. Browser-based alternatives exist (MetaClean, exifremover.com) but are not open-source and are not embedded in a trusted open-source tool ecosystem like tools.treble.dev.

The EXIF parsing and stripping operation is pure browser JavaScript: read the JPEG binary with FileReader, locate the APP1 EXIF segment via DataView, remove it, and re-encode the remaining byte stream as a clean Blob for download. No server required, no image quality loss.

Competitor Evidence

Tool Problem
exifpurge.com Requires file upload to server; batch only on paid plan
verexif.com Server upload required; single-file only
online-metadata.com Free tier limited to 5 files; server upload
Shotkit EXIF remover Server-side; recommends desktop app for privacy
MetaClean (metaclean.app) Browser-based and free but not open-source; opaque privacy guarantees

Search phrases users type: remove EXIF data online free, strip GPS from photo online, remove metadata from image, EXIF remover no upload, remove location from photo before sharing, how to remove location from photo

The Tech

API / Capability Role
FileReader API Load image files from disk without upload
DataView Parse JPEG binary structure; locate and identify EXIF APP1 segment
Uint8Array manipulation Remove EXIF segment bytes from JPEG binary stream
Canvas API + toBlob() Re-encode PNG files (Canvas draw + export strips PNG metadata)
Blob + URL.createObjectURL Trigger local download of cleaned image
JSZip (vendored) Package batch output into zip archive

Ships as tools/exif-stripper.html + tools/exif-stripper/main.js + tools/exif-stripper/style.css. JPEG EXIF removal is a well-documented binary operation (~50 lines of DataView code). PNG metadata stripping via Canvas re-encode is even simpler.

Usability Controls

  • Metadata viewer: Before stripping, display a human-readable table of all detected EXIF tags — GPS shown as a map link, timestamps in local time
  • GPS highlight: Prominent warning banner if GPS coordinates are present, with one-click "Remove GPS only" shortcut
  • Selective removal: Toggle-able field groups (Location, Device Info, Timestamps, Camera Settings, All)
  • Strip & Preview: Side-by-side original vs. stripped metadata count before download
  • Batch mode: Load multiple images; per-file metadata summary; strip all at once
  • Zip download: Single-click download of all stripped images in a zip archive
  • Quality preservation: Output file quality matches input (lossless binary splice for JPEG, no re-encode quality loss)
  • Clear / Reset: Remove all loaded files and start over
  • Safe defaults: Strip all metadata (most protective default); user can opt to keep specific fields

Complexity: 3 / 10

JPEG EXIF removal is a binary splice operation — find the APP1 marker bytes (0xFFE1), measure the segment length, copy the byte array around it. No WASM or heavy libraries needed. The viewer (parsing the EXIF tag table for display) adds modest complexity. Batch mode + zip adds UI complexity. PNG metadata stripping via Canvas re-encode is a single ctx.drawImage + toBlob call. JSZip is a candidate for shared vendoring with the PDF Merger & Splitter.

Generated by Market Research Discovery ·

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions