Skip to content

Latest commit

Β 

History

88 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Watermark

Docs GitHub Launch Dev

React 19 TypeScript 5 C2PA 0.15.1 Vite 8


Watermark

A local-first provenance and forensic workbench for C2PA Content Credentials, media, documents, and text.

Watermark lets you inspect what a file claims about its origin and history, verify what can actually be cryptographically verified, examine metadata and content bindings, compare provenance across versions, and investigate AI-generation and watermark signals β€” entirely in your browser.

Your files stay on your machine.

A claim is not the same thing as a verification.

Watermark is designed around that distinction. A C2PA manifest can contain assertions about an asset's origin, creation, modification, or processing history. Watermark helps you examine those assertions, validate the cryptographic relationships that can be validated, and see where the evidence ends.

Why Watermark?

Digital provenance systems are becoming an increasingly important part of how digital content is identified, attributed, and trusted. But provenance is not a binary question of "authentic" or "fake."

A useful inspection tool needs to let people see:

  • what a file contains;
  • what a C2PA manifest claims;
  • which signatures and content bindings validate;
  • whether an issuer is trusted;
  • what metadata exists outside the manifest;
  • what provenance relationships exist between assets;
  • what survives common transformations;
  • and what cannot be established from the available evidence.

Watermark puts those questions into a single local-first workspace.

Verification Boundaries

Watermark deliberately distinguishes claims, cryptographic verification, and truth.

A successful C2PA verification can establish that relevant cryptographic relationships are intact and, depending on the trust result, that the signer chains to a trusted issuer.

It does not independently establish that every factual statement in the manifest is true.

Likewise:

  • A valid signature does not make every assertion truthful.
  • A trusted issuer does not make every assertion universally correct.
  • A missing C2PA manifest does not prove that content is human-made.
  • The presence of an AI-related provenance assertion does not by itself establish every detail of how content was created.
  • The absence of a detected watermark does not prove that no watermark exists.

Watermark is therefore an evidence and inspection tool, not a truth oracle.

Screenshots

Inspector with Binary Analysis

Provenance Diff View

Provenance Lineage View

Batch Report View

What Would Break? Simulator

What Watermark Can Do

πŸ” Verify Provenance

  • Discover C2PA Content Credentials
  • Validate manifest signatures and content bindings
  • Display issuer and certificate information
  • Distinguish Trusted, Valid, Invalid, and Unknown
  • Calculate SHA-256 file digests
  • Inspect hard and soft content bindings
  • Examine complete manifest JSON

πŸ”Ž Investigate Provenance

  • Explore manifests, assertions, and ingredients
  • Examine manifest lineage
  • Compare two provenance states with Provenance Diff
  • Generate structured Evidence Packs
  • Review file metadata alongside C2PA provenance
  • Inspect binary structure and entropy
  • Examine what survives common transformations

πŸ’§ Investigate Watermarks & AI Signals

  • Surface watermark-related C2PA assertions
  • Surface SynthID-related claims when present
  • Inspect C2PA soft-binding information
  • Identify C2PA AI-generation source-type assertions
  • Compare watermark/provenance survival across transformations

πŸ§ͺ Test & Simulate

  • Re-encode media
  • Crop images
  • Convert formats
  • Test whether provenance survives transformations
  • Explore common scenarios such as screenshots, email, and social-media processing
  • Experiment with trust policies

πŸ› οΈ Work With Your Files

  • Edit selected metadata
  • Sanitize metadata
  • Compare hashes before and after changes
  • Perform provenance-aware image editing
  • Extract text from supported documents
  • Analyze and transform text
  • Produce self-contained trust reports

πŸ”’ Local-First Privacy

Files are processed in the browser rather than uploaded to a remote analysis service.

Original files are not overwritten. Processing occurs in memory, with local persistence used for application state and audit information.

What Watermark Does Not Do

Watermark does not attempt to produce a single universal authenticity score.

It does not claim that:

  • a file without C2PA provenance is necessarily inauthentic;
  • a file with C2PA provenance is necessarily truthful;
  • a valid signature proves the factual accuracy of every assertion;
  • an AI detector can reliably determine authorship from text alone;
  • the absence of a detected watermark proves that no watermark exists;
  • metadata alone establishes provenance.

Instead, Watermark exposes the available evidence and shows which relationships can actually be verified.

This distinction is fundamental to the project.

What Watermark Does Not Do

Watermark does not attempt to produce a single universal authenticity score.

It does not claim that:

  • a file without C2PA provenance is necessarily inauthentic;
  • a file with C2PA provenance is necessarily truthful;
  • a valid signature proves the factual accuracy of every assertion;
  • an AI detector can reliably determine authorship from text alone;
  • the absence of a detected watermark proves that no watermark exists;
  • metadata alone establishes provenance.

Instead, Watermark exposes the available evidence and shows which relationships can actually be verified.

This distinction is fundamental to the project.

Run locally

npm install
npm run dev

Vite serves the app at http://localhost:42069.

Commands

npm run build
npm run typecheck
npm test

Architecture

src/
β”œβ”€β”€ App.tsx              ~1900 lines β€” Main app, routing, header/footer
β”œβ”€β”€ main.tsx             React entry + ErrorBoundary
β”œβ”€β”€ styles.css           CSS variables, dark/light theme
β”œβ”€β”€ lib/
β”‚   β”œβ”€β”€ c2pa.ts          C2PA SDK wrapper (v0.15.1 Reader.fromBlob API)
β”‚   β”œβ”€β”€ verification.ts  Manifest summarization, AI detection, soft binding
β”‚   β”œβ”€β”€ evidence.ts      EvidenceStatus, Finding, Perspective domain model
β”‚   β”œβ”€β”€ metadata.ts      EXIF extraction, binary analysis, entropy heatmap, sanitizer
β”‚   β”œβ”€β”€ harper.ts        Grammar checker (WASM, lazy-loaded)
β”‚   β”œβ”€β”€ winkNlp.ts       NLP analysis (sentiment, POS, entities)
β”‚   β”œβ”€β”€ transform.ts     Text stripping, PII redaction, unsloping, homoglyphs
β”‚   β”œβ”€β”€ extract.ts       Text extraction (PDF, PPTX, DOCX, jschardet)
β”‚   β”œβ”€β”€ file.ts          Hashing (SHA-256, SHA-1, MD5), format detection
β”‚   β”œβ”€β”€ persist.ts       localStorage + IndexedDB persistence
β”‚   β”œβ”€β”€ audit.ts         Session audit trail
β”‚   └── types.ts         Shared TypeScript types
└── features/
    β”œβ”€β”€ inspector/       BinaryInspector, HashCalculator, MetadataTab, ManifestCard
    β”œβ”€β”€ provenance/      DiffView, LineageView, ProvenanceGraph, EvidencePanel
    β”œβ”€β”€ simulator/       SimulatorView (What Would Break? + Survival Matrix)
    β”œβ”€β”€ playground/      PlaygroundView (Trust Policy rules)
    β”œβ”€β”€ text/            TextView, TextDetailPanel, NlpDetailPanel, TextTransformPanel
    └── batch/           BatchView (multi-file verification)

Important notes

This software is under active development. While we strive for accuracy, results may not always be as expected.

Text processing limitations

  • PDFs with letter-spacing may produce garbled output in grammar features
  • Scientific notation, chemical formulas, and technical content may be incorrectly flagged
  • Text extraction may lose formatting, embedded images, or complex layouts
  • The unsloper is designed for prose and may not work on code or technical docs

Video and media limitations

  • Video files show a poster frame extracted at 10% duration
  • Large video files may take longer to process
  • Some media formats may not be fully supported by the C2PA SDK

Your files are safe

Original documents and media are never overwritten. All processing happens in memory. Your source files remain completely untouched on disk.

Verification boundaries

A trusted C2PA result means the SDK validated the manifest signature, content binding, and issuer trust policy. It does not prove that every statement in the manifest is true. A missing manifest does not establish that content is human-made or AI-generated.

References

License

MIT. See LICENSE.