Rebuild on the RealBrain design system and retarget SEO to content credentials

Search Console (Jun 4 – Sep 3) shows the page ranking on the first results
page for "content credentials" queries while converting badly: "ai
credentials remover" at 113 impressions and 0.88% CTR from position 6.7,
"remove content credentials from image online" at 2.15% from position 5.0,
"remove ai content credentials from image" at 0% from position 7.8. The
title led with "EXIF metadata", a phrase that appears in none of the top
queries, so the snippet never matched the intent behind the impressions.

SEO
- Title, description and H1 rebuilt around "remove content credentials from
  an image"; EXIF kept as a secondary term.
- Added a how-to section and a nine-question FAQ answering the question
  queries that had no content behind them, including the LinkedIn AI label
  and the Instagram AI tag.
- Structured data as an @graph: WebSite (alternateName "Untrace AI" for the
  unserved brand query), Organization, WebApplication, HowTo, FAQPage.
- Fixed sitemap.xml, which pointed at /untrace/ — a URL that does not exist.
- Regenerated the Open Graph image to match the new design.

Design
- Vendored the design system at src/tokens.css and composed the app from it.
  The old styling broke most of its rules: gradients, font weights 800 and
  900, raw #2563eb, Inter, and emoji as the only status signal.
- Reworked the tool into a Scan / Review / Download flow that lists what it
  found before changing anything, with the primary action pinned within
  thumb reach on small screens.
- Dark by default with a light theme, applied before first paint so the page
  never flashes the wrong surface.
- Replaced the floating donation widget, which painted an off-token circle
  over the page and covered the mobile action bar, with a footer link.

Structure
- Moved detection into src/lib/metadata.js and removal into src/lib/clean.js;
  the canvas callbacks are now a promise chain.
- Dropped Tailwind and PostCSS. Both were configured twice, and no Tailwind
  utility was used. Stylesheet is 6.2 kB gzipped with the whole system in it.

Fixes
- The stepper never advanced: stepState(index) read `current` from the
  closure, which Svelte 4 cannot track as a template dependency.
- The cleaner's fallback returned the original, uncleaned file while the UI
  reported "All EXIF metadata removed". It now reports the failure instead.

Verified against a JPEG carrying EXIF, GPS, XMP and an APP11 JUMBF C2PA
manifest: the output retains only APP0 and the sRGB ICC profile, with every
provenance marker gone.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018pRSdR57Ze9M2meDfYZgYE
This commit is contained in:
SharifandClaude Opus 5 committed 2026-09-05 23:03:00 +06:00
1 parent 83a4d3f2c4
commit 00991c1608
40 files changed
+3577 -3697

No files matched your search

+56 -74
View File
@@ -1,98 +1,80 @@
# Untrace - Advanced EXIF Metadata & AI Content Credential Remover
# Untrace
**Remove all metadata from images. Keep your privacy.**
**Remove content credentials from an image.**
Clean your photos from location data, AI signatures, C2PA content credentials, and other tracking information. Works 100% in your browser - no uploads, no tracking.
Untrace strips C2PA content credentials, AI generation tags, GPS coordinates
and EXIF metadata from a photo. It runs entirely in the browser — the file is
read and rewritten in the tab, never uploaded.
## Features
<https://untrace.realbrain.cc/>
**[•] Complete Privacy Protection**
## What it removes
- Removes GPS location data
- Strips camera information
- Cleans AI generation tags (ChatGPT, DALL-E, Midjourney, Stable Diffusion)
- Eliminates C2PA content credentials and provenance data
- Removes JUMBF metadata containers
- Clears Adobe Firefly and Google Imagen signatures
- Eliminates timestamps and device info
| | |
|---|---|
| C2PA content credentials | Manifests, claims, assertions and signatures from the Content Authenticity Initiative |
| AI generation tags | ChatGPT, DALL·E, Midjourney, Stable Diffusion, Adobe Firefly, Google Imagen |
| JUMBF containers | The APP11 and APP2 boxes that carry provenance inside a JPEG |
| GPS location | Latitude, longitude, altitude, bearing and their timestamp |
| Camera and device | Make, model, lens, serial numbers, exposure and shooting settings |
| Timestamps | When the photo was taken, digitised and last modified |
| XMP and IPTC | Creator names, captions, keywords, copyright, editing history |
| Comments and thumbnails | User comments, maker notes, embedded previews |
| PNG text chunks | tEXt, iTXt and zTXt blocks, including generation prompts |
**[✓] Enhanced AI Content Credential Removal**
Supported input: JPEG, PNG, TIFF, HEIC, AVIF. Output is JPEG, or PNG when the
original was a small PNG.
- Advanced detection of AI generation markers
- C2PA (Content Authenticity Initiative) signature removal
- DALL-E and OpenAI watermark stripping
- Midjourney metadata cleaning
- Stable Diffusion tag removal
- Adobe Content Authenticity removal
- JUMBF (JPEG Universal Metadata Box Format) cleaning
## How it works
**[✓] Secure & Private**
Detection and removal are two separate passes.
- No server uploads - everything happens in your browser
- No tracking or data collection
- Supports JPEG, PNG, TIFF, HEIC, AVIF
**Detection** (`src/lib/metadata.js`) reads the file twice: once through
[exifr](https://github.com/MikeKovarik/exifr) for structured segments, and once
as raw bytes to find C2PA strings and JUMBF boxes that exifr does not surface.
The results are merged and bucketed into named sections, then turned into the
findings list the review step renders.
**[↕] Easy to Use**
**Removal** (`src/lib/clean.js`) decodes the image to pixels on a canvas and
re-encodes it. Nothing carries over, so every metadata container is dropped at
once rather than deleting known tags one by one and leaving the rest behind.
The output is then re-read to confirm it is clean; if anything survived, a
second pass forces JPEG on a white matte.
- Drag & drop interface
- Instant preview of what data will be removed
- One-click cleaning
- Mobile-friendly design
If the browser cannot decode or re-encode the file, the original bytes are
returned and the interface says so — it never reports a clean that did not
happen.
## Quick Start
## Design
1. **Upload** - Drag your image to the page
2. **Review** - See what metadata was found
3. **Clean** - Click "Remove Metadata"
4. **Download** - Save your privacy-safe image
The interface follows the
[RealBrain Design System](https://realbrain.cc/design-system/) v2.0. Tokens are
vendored at `src/tokens.css`; refresh with:
## For Developers
```bash
curl -o src/tokens.css https://realbrain.cc/design-system/tokens.css
```
`AGENTS.md` carries the rules, the self-check commands, and this repository's
open token proposals. Read it before touching any CSS.
## Development
```bash
npm install
npm run dev
npm run build
npm run dev # vite dev server
npm run build # production build to dist/
npm run preview # serve the build
```
**Built with:** Svelte + Vite + exifr
Stack: Svelte 4, Vite 5, exifr. No CSS framework — the design system is plain
CSS.
## Why Use Untrace?
## Who it is for
Modern images contain hidden data that can compromise your privacy:
- **Location data** reveals where photos were taken
- **AI signatures** show which tools generated images (DALL-E, Midjourney, ChatGPT, Stable Diffusion)
- **C2PA content credentials** track the entire creation and editing history
- **Device info** identifies your camera/phone
- **Timestamps** reveal when images were created
- **JUMBF containers** store complex metadata structures
- **Content Authenticity** markers link images to specific AI tools
- **Provenance data** creates a digital paper trail
Untrace removes all this data while keeping your images looking exactly the same.
## Supported AI Tools & Formats
**AI Generation Platforms:**
- OpenAI DALL-E & ChatGPT
- Midjourney
- Stable Diffusion
- Adobe Firefly
- Google Imagen
- Runway ML
- NightCafe
- Artbreeder
**Content Credential Standards:**
- C2PA (Content Provenance and Authenticity)
- Content Authenticity Initiative (CAI)
- JUMBF (JPEG Universal Metadata Box Format)
- Adobe Content Credentials
- Project Origin signatures
Journalists protecting sources, activists maintaining anonymity, photographers
selling stock, and anyone who would rather a photo not carry its own history.
## License
MIT License - Free for personal and commercial use.
MIT.