Skip to content

what256/MetaStrip

Repository files navigation

MetaStrip

A polished, open-source Windows desktop app that wraps ExifTool with a modern GUI. View, edit, and strip EXIF / IPTC / XMP / GPS metadata from photos — no telemetry, no analytics, no calls home. Ships as a single MSI with ExifTool bundled, so end users need zero external dependencies.

Status: v0.1.0 release candidate. All nine feature phases are implemented and machine-verified (29/29 integration tests). End-to-end UI click-through QA is pending before the first GitHub Release.

Features

  • Drag & drop a single photo, a folder, or a mix of files — the app routes singles to the Inspect view and everything else to Batch (up to 500 photos at a time).
  • Inspect — collapsible groups (EXIF / IPTC / XMP / GPS / File Info / Maker Notes / Other), live field filter, in-app preview for JPG / PNG / WebP / GIF / AVIF / BMP.
  • Strip — per-field checkboxes, "Strip GPS" and "Strip all" one-click actions, single-click Undo via a toast. Originals are never modified; each strip writes a sibling copy. ICC profile and orientation are preserved.
  • Editor — curated set of 15 editable fields (Artist, Copyright, Make, Model, dates, GPS, IPTC by-line / caption / copyright, etc.) with an inline diff and save-as-copy semantics.
  • Batch — multi-file table, bulk strip with per-file progress, Undo that removes every stripped copy.
  • Map — GPS pins on Leaflet + CARTO dark/light tiles, reverse geocoding via OpenStreetMap's Nominatim (rate-limited, cached), a "Strip GPS" action in the corner.
  • Export — JSON / CSV / XML via ExifTool's native output modes. Field-selection tree, live preview (capped at 64 KB), full export through the system Save dialog.
  • Open from URL — paste a URL, the app downloads to a temp file (streaming, 500 MiB cap, image/* content-type required) and opens it the same way as a dropped file.
  • Dark + light theme, command palette (Ctrl+K), keyboard shortcuts (Ctrl+? for the full list).

Privacy

MetaStrip is a privacy tool. Everything happens locally. The only outbound network calls the app ever makes are:

  1. Open from URL — when you paste a URL and click Open.
  2. Reverse geocoding on the Map tab — sends GPS coordinates (not photos, not filenames) to OpenStreetMap's Nominatim service to look up a human-readable address.

No telemetry, no analytics, no crash reports, no update ping, no font CDN — Inter and JetBrains Mono are self-hosted.

Install

Grab the MSI from the Releases page and run it. Windows SmartScreen will warn on first run because the installer is currently unsigned — that's expected for a new OSS project. See docs/DEVELOPMENT.md for the code-signing roadmap.

Build from source

Prerequisites:

  • Node 22+ and pnpm 10+
  • Rust stable with the MSVC toolchain (Windows)
  • PowerShell (ships with Windows; used by the fixture scripts)
git clone https://github.com/what256/MetaStrip.git
cd MetaStrip
pnpm install

# One-time: fetch ExifTool and test fixtures (SHA256-pinned)
./scripts/fetch-exiftool.ps1
./scripts/fetch-samples.ps1

# Development — hot-reloading Tauri dev server
pnpm tauri dev

# Production build — produces an MSI under src-tauri/target/release/bundle/msi/
pnpm tauri build

To regenerate the app icon from src/components/BrandMark.tsx:

node scripts/generate-icon.mjs

Run the tests

# Rust integration tests — 29 tests covering ExifTool / strip / batch / export
cd src-tauri && cargo test

# Frontend static checks
pnpm tsc --noEmit && pnpm lint && pnpm build

CI (.github/workflows/ci.yml) runs the same checks on every push and pull request, on a Windows runner.

Architecture

  • Tauri 2.x Rust backend, React 18 + TypeScript + Vite frontend.
  • All ExifTool calls funnel through a single Rust module (src-tauri/src/exiftool.rs). The frontend never shells out.
  • Data model is typed end-to-end — Rust structs → ts-rs generated TypeScript types — with no hand-written wire types.
  • Originals are never modified. Every write operation produces a sibling copy; delete_file is gated to a whitelist of extensions.
  • ExifTool is bundled as a Tauri resource (not a sidecar — ExifTool 13.x needs a companion exiftool_files/ directory that bundle.resources ships natively but externalBin can't).

See docs/DEVELOPMENT.md for the full phase plan and per-phase implementation notes.

License

MetaStrip is MIT licensed. ExifTool is bundled under its own Artistic / GPL dual license. See LICENSE and THIRD_PARTY_LICENSES.md for the full terms and credits to Phil Harvey and the projects MetaStrip depends on.

About

No description, website, or topics provided.

Resources

License

Stars

0 stars

Watchers

1 watching

Forks

Packages

 
 
 

Contributors