Version 0.8.0 is available. Install the stable Python package from PyPI with the command below.

Open source · local first · evidence scoped

A text watermark remover that tells you what it can prove.

Find and clean hidden Unicode artifacts locally. For statistical LLM watermarks, run named detectors, quality-gated transformations, and reproducible inspect → plan → apply → verify workflows.

python -m pip install dewatermark

Private browser tool

See the characters hiding in your text.

Paste text to begin. Processing stays in this browser.

  • No suspicious Unicode found.

Scope: this playground handles literal Unicode artifacts only. It does not identify authorship or claim to remove private, retrieval-based, semantic, or undisclosed statistical marks.

Precise outcomes

“Changed” is not the same as “verified.”

Assurance model ↗
verified

Unicode sanitized

Covered literal artifacts were removed under a versioned, context-aware policy.

detector scoped

Mitigation verified

A compatible named detector was positive before, cleared after, and every required quality gate passed.

no proof

Mitigation unverified

The candidate changed and passed gates, but compatible independent verification was unavailable.

abstained

Unsupported scheme

The requested private or incompatible watermark cannot currently be tested. Source text is retained.

One engine, many workflows

Built for developers and AI agents.

Python

import dewatermark

result = dewatermark.remove(
    text, mode="sanitize"
)
print(result.receipt.claim_scope)

Two-phase agents

dewatermark inspect --input text.txt
dewatermark plan --input text.txt \
  --mode sanitize
dewatermark apply --input text.txt \
  --plan-digest SHA256 --consent

JavaScript

import { sanitizeText } from
  "./sanitizer.mjs";

const clean = sanitizeText(text);

Repository scanner

dewatermark check .
dewatermark check . --format sarif \
  --output dewatermark.sarif

# .dewatermark.toml supported

Research, not wishful thinking

Watermarks are different mechanisms with different detectors.

Invisible Unicode, green-list token bias, distortion-free sampling, tournament scoring, semantic marks, and provider-side retrieval are not interchangeable. dewatermark records the scheme, detector, threshold, effective length, quality policy, and evidence scope instead of collapsing them into one claim.

Read the research map

Claude: the SynthID-Text family is disclosed; the deployed detector contract and configuration are still pending.

SynthID Text: an operator-sealed public research adapter exists; it is not proof about any production surface.

Retrieval provenance: a provider-held copy cannot be removed from the submitted text.

Short text: many statistical tests must abstain when there are too few effective detector tokens.

Questions

What a trustworthy text watermark remover should say.

Can this remove every AI text watermark?

No. Unicode sanitation is deterministic for covered artifacts. Statistical support is detector-specific, and private or unknown schemes remain unsupported rather than being declared clean.

Does my pasted text leave the browser?

No. The playground imports a dependency-free JavaScript sanitizer and performs every operation in the current tab. It has no upload endpoint.

Does it remove an Anthropic Claude watermark?

It makes no such claim. Anthropic identifies the scheme family as SynthID-Text, but the deployed configuration, keys, calibrated thresholds, and detector contract are not public. dewatermark therefore returns an unsupported detection outcome and records capability metadata status unsupported_pending_spec.

Why use a detector after rewriting?

A rewrite may alter wording without changing a detector decision—or may damage meaning. Verification requires a compatible detector plus semantic, factual, structural, and protected-span quality gates.