Every photo you take is carrying a passenger.
GPS coordinates. The exact timestamp. Your phone's model and serial number. Camera settings. Software you used to edit it. Sometimes a tiny embedded copy of the photo itself.
It's all sitting in the file, invisible, and it goes wherever the photo goes.
Most people find out about EXIF metadata right after they share something they didn't intend to share — a home address inferred from a photo's GPS tag, a device linked across accounts, a timestamp that contradicts a story.
And every online EXIF tool that offers to "fix" this? It receives your photo on a server first.
StripLocal doesn't. Drop your photos in. Get clean copies out. Nothing leaves the tab.
- 📍 GPS coordinates (location where photo was taken)
- 📅 Date & time taken
- 📱 Device model & serial number
- 📷 Camera settings (ISO, aperture, shutter speed, focal length)
- 👤 Author / copyright / artist fields
- 🔍 Software & editing history
- 🏷️ IPTC keywords & captions
- 📝 XMP / Adobe metadata
- 🌐 Embedded thumbnail preview
No libraries. No WASM. No server.
The browser's native Canvas API is the entire engine. When you draw an image onto a canvas and re-export it as a blob, the canvas only captures pixel data — metadata has nowhere to go. It's discarded automatically.
One edge case handled: JPEG files often store rotation in EXIF rather than rotating the actual pixels. StripLocal reads the orientation tag before stripping, bakes the rotation into the canvas draw, then strips — so your photos come out upright.
File → FileReader → detect EXIF orientation → Canvas draw (with rotation baked in)
→ canvas.toBlob() → clean file (pixels only, no metadata) → download
Open index.html directly in any modern browser, or serve it:
python3 -m http.serverNo build step. No npm. No install. One file.
Coloured with chernobyl-01 · АТОМГРАД ATOMGRAD — pre-1986 Pripyat science campus, sterile Soviet utopian planning. Sky-blue command rules, signal-yellow brand mark, lime-green OK confirmations — the visual language of decontamination.
Palette pulled from Rangrez, the global colour-palette library that backs all NakliTechie projects.
| Tool | What it does |
|---|---|
| BabelLocal | Offline translation — 200 languages, NLLB model |
| StripLocal | EXIF metadata stripper — nothing leaves the browser |
| GambitLocal | Chess vs Stockfish — correspondence mode via URL |
| VoiceVault | Audio transcription — Whisper, offline-first |
| KingMe | English draughts — custom minimax AI, zero deps |
| SnipLocal | Background remover — RMBG-1.4, passport mode |
| Clacker | Split-flap display — browser-native, offline |
| Strait Command | Mine-clearing game in strategic waterways |
| Chokepoint | Maritime tower defense — hold the strait |
| PredictionMarket | Prediction market simulator — Parimutuel & LMSR |
| PDFLOcal | PDF editor — merge, split, rotate, annotate |
| RangeLocal | Missile range simulator — interactive globe & map |
| 3D Tic-Tac-Toe | 3D tic-tac-toe — 3×3×3 to 5×5×5, minimax AI |
Built by Chirag Patnaik
JPEG · PNG · WebP — anything the browser's native image decoder can handle.
Checklist to run through before and after the first push:
- Set git author —
git config user.name "Chirag Patnaik"before committing - README live link — add
**[Try it live →](https://naklitechie.github.io/<RepoName>/)**right after the h1 - Footer attribution —
index.htmlfooter should read "NakliTechie" and link tohttps://github.com/NakliTechie/<RepoName> - Enable GitHub Pages — after pushing, run:
gh api repos/NakliTechie/<RepoName>/pages -X POST --field 'source[branch]=main' --field 'source[path]=/'
MIT