# guillaumemeyer/watermarks-remover architecture

> Architecture diagram of the GitHub repository guillaumemeyer/watermarks-remover, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-10-16). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/guillaumemeyer/watermarks-remover
- Repository: https://github.com/guillaumemeyer/watermarks-remover

## Overview

watermarks-remover is a Python service and agent-facing workflow for inspecting and cleaning provenance marks in text and files. The main path is an agent or caller sending content to the HTTP service, which dispatches by format to Unicode, metadata, or audio/video handling and returns findings or cleaned content. Separate capabilities include aggregate audits, file-write hooks, and optional statistical-watermark rewriting/detection. Edges reflect README statements and SOURCE INDEX references; unsampled endpoint details and skill implementation are not inferred.

Main entry points: [`service/scripts/server.py`](https://github.com/guillaumemeyer/watermarks-remover/blob/main/service/scripts/server.py) (HTTP service), [`service/scripts/format_dispatch.py`](https://github.com/guillaumemeyer/watermarks-remover/blob/main/service/scripts/format_dispatch.py) (Format dispatch), [`service/scripts/clean_file.py`](https://github.com/guillaumemeyer/watermarks-remover/blob/main/service/scripts/clean_file.py) (File cleaning), [`service/scripts/audit_lib.py`](https://github.com/guillaumemeyer/watermarks-remover/blob/main/service/scripts/audit_lib.py) (Audit analysis)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["Service and clients"]
  node_http["HTTP service<br/>[server.py]"]
end

subgraph group_files["File inspection and cleaning"]
  node_format["Format dispatch<br/>[format_dispatch.py]"]
  node_image["Image metadata<br/>[image_meta.py]"]
  node_container["Document metadata<br/>[container_meta.py]"]
  node_av["Audio/video metadata<br/>[av_meta.py]"]
  node_cleanfile["File cleaning<br/>[clean_file.py]"]
  node_cleanaudio["Audio cleaning<br/>[clean_audio.py]"]
  node_cleanvideo["Video cleaning<br/>[clean_video.py]"]
  node_inspect["File inspection<br/>[inspect_file.py]"]
end

subgraph group_text["Text watermark tools"]
  node_unicode["Unicode cleaning<br/>[text_unicode.py]"]
  node_textdetect["Watermark detectors<br/>[text_detectors.py]"]
  node_gumbel["Gumbel detector<br/>[detect_gumbel.py]"]
  node_markllm["MarkLLM harness"]
  node_rewrite["Text rewriting<br/>[rewrite_text.py]"]
  node_stylometry["Stylometry scoring"]
  node_synthid["SynthID scoring<br/>[score_synthid.py]"]
end

subgraph group_audit["Auditing and hooks"]
  node_auditlib["Audit analysis<br/>[audit_lib.py]"]
  node_auditdir["Directory audit<br/>[audit_dir.py]"]
  node_auditweb["Website audit<br/>[audit_website.py]"]
  node_hook["Written-file hook"]
end

subgraph group_research["Scoring utilities"]
  node_stealer["Watermark scorer<br/>[scorer.py]"]
  node_steal["Scorer workflow<br/>[steal.py]"]
end

node_agent(("Agent or caller"))

node_agent -->|"calls HTTP"| node_http
node_http -->|"dispatches files"| node_format
node_http -->|"uses cleaning"| node_unicode
node_http -->|"uses metadata"| node_image
node_http -->|"uses metadata"| node_container
node_http -->|"uses metadata"| node_av
node_http -->|"uses cleaning"| node_cleanaudio
node_http -->|"uses cleaning"| node_cleanvideo
node_http -->|"uses detectors"| node_textdetect
node_http -->|"uses scoring"| node_stylometry
node_http -->|"uses rewriting"| node_rewrite
node_format -->|"routes images"| node_image
node_format -->|"routes containers"| node_container
node_format -->|"routes media"| node_av
node_cleanfile -->|"classifies input"| node_format
node_cleanfile -->|"cleans text"| node_unicode
node_cleanfile -->|"cleans images"| node_image
node_cleanfile -->|"cleans documents"| node_container
node_cleanfile -->|"cleans media"| node_av
node_cleanaudio -->|"reuses helpers"| node_cleanvideo
node_cleanvideo -->|"reuses metadata"| node_image
node_inspect -->|"classifies input"| node_format
node_auditdir -->|"aggregates findings"| node_auditlib
node_auditweb -->|"aggregates findings"| node_auditlib
node_auditlib -->|"routes audit items"| node_format
node_hook -->|"scans file"| node_auditlib
node_hook -->|"shells out cleaning"| node_cleanfile
node_textdetect -->|"uses detector"| node_gumbel
node_rewrite -->|"evaluates text"| node_stylometry
node_steal -->|"uses scorer"| node_stealer

click node_http "https://github.com/guillaumemeyer/watermarks-remover/blob/main/service/scripts/server.py"
click node_format "https://github.com/guillaumemeyer/watermarks-remover/blob/main/service/scripts/format_dispatch.py"
click node_unicode "https://github.com/guillaumemeyer/watermarks-remover/blob/main/service/scripts/text_unicode.py"
click node_image "https://github.com/guillaumemeyer/watermarks-remover/blob/main/service/scripts/image_meta.py"
click node_container "https://github.com/guillaumemeyer/watermarks-remover/blob/main/service/scripts/container_meta.py"
click node_av "https://github.com/guillaumemeyer/watermarks-remover/blob/main/service/scripts/av_meta.py"
click node_cleanfile "https://github.com/guillaumemeyer/watermarks-remover/blob/main/service/scripts/clean_file.py"
click node_cleanaudio "https://github.com/guillaumemeyer/watermarks-remover/blob/main/service/scripts/clean_audio.py"
click node_cleanvideo "https://github.com/guillaumemeyer/watermarks-remover/blob/main/service/scripts/clean_video.py"
click node_inspect "https://github.com/guillaumemeyer/watermarks-remover/blob/main/service/scripts/inspect_file.py"
click node_auditlib "https://github.com/guillaumemeyer/watermarks-remover/blob/main/service/scripts/audit_lib.py"
click node_auditdir "https://github.com/guillaumemeyer/watermarks-remover/blob/main/service/scripts/audit_dir.py"
click node_auditweb "https://github.com/guillaumemeyer/watermarks-remover/blob/main/service/scripts/audit_website.py"
click node_hook "https://github.com/guillaumemeyer/watermarks-remover/blob/main/service/scripts/hook_written_file.py"
click node_textdetect "https://github.com/guillaumemeyer/watermarks-remover/blob/main/service/scripts/text_detectors.py"
click node_gumbel "https://github.com/guillaumemeyer/watermarks-remover/blob/main/service/scripts/detect_gumbel.py"
click node_markllm "https://github.com/guillaumemeyer/watermarks-remover/blob/main/service/scripts/detect_text_watermark.py"
click node_rewrite "https://github.com/guillaumemeyer/watermarks-remover/blob/main/service/scripts/rewrite_text.py"
click node_stylometry "https://github.com/guillaumemeyer/watermarks-remover/blob/main/service/scripts/score_stylometry.py"
click node_synthid "https://github.com/guillaumemeyer/watermarks-remover/blob/main/service/scripts/score_synthid.py"
click node_stealer "https://github.com/guillaumemeyer/watermarks-remover/blob/main/stealer/scorer.py"
click node_steal "https://github.com/guillaumemeyer/watermarks-remover/blob/main/stealer/steal.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_http toneBlue
class node_format,node_image,node_container,node_av,node_cleanfile,node_cleanaudio,node_cleanvideo,node_inspect toneAmber
class node_unicode,node_textdetect,node_gumbel,node_markllm,node_rewrite,node_stylometry,node_synthid toneMint
class node_auditlib,node_auditdir,node_auditweb,node_hook toneRose
class node_stealer,node_steal,node_agent toneIndigo
```

## Components

### Service and clients

- [HTTP service](https://github.com/guillaumemeyer/watermarks-remover/blob/main/service/scripts/server.py): `service/scripts/server.py`

### File inspection and cleaning

- [Format dispatch](https://github.com/guillaumemeyer/watermarks-remover/blob/main/service/scripts/format_dispatch.py): `service/scripts/format_dispatch.py`
- [Image metadata](https://github.com/guillaumemeyer/watermarks-remover/blob/main/service/scripts/image_meta.py): `service/scripts/image_meta.py`
- [Document metadata](https://github.com/guillaumemeyer/watermarks-remover/blob/main/service/scripts/container_meta.py): `service/scripts/container_meta.py`
- [Audio/video metadata](https://github.com/guillaumemeyer/watermarks-remover/blob/main/service/scripts/av_meta.py): `service/scripts/av_meta.py`
- [File cleaning](https://github.com/guillaumemeyer/watermarks-remover/blob/main/service/scripts/clean_file.py): `service/scripts/clean_file.py`
- [Audio cleaning](https://github.com/guillaumemeyer/watermarks-remover/blob/main/service/scripts/clean_audio.py): `service/scripts/clean_audio.py`
- [Video cleaning](https://github.com/guillaumemeyer/watermarks-remover/blob/main/service/scripts/clean_video.py): `service/scripts/clean_video.py`
- [File inspection](https://github.com/guillaumemeyer/watermarks-remover/blob/main/service/scripts/inspect_file.py): `service/scripts/inspect_file.py`

### Text watermark tools

- [Unicode cleaning](https://github.com/guillaumemeyer/watermarks-remover/blob/main/service/scripts/text_unicode.py): `service/scripts/text_unicode.py`
- [Watermark detectors](https://github.com/guillaumemeyer/watermarks-remover/blob/main/service/scripts/text_detectors.py): `service/scripts/text_detectors.py`
- [Gumbel detector](https://github.com/guillaumemeyer/watermarks-remover/blob/main/service/scripts/detect_gumbel.py): `service/scripts/detect_gumbel.py`
- [MarkLLM harness](https://github.com/guillaumemeyer/watermarks-remover/blob/main/service/scripts/detect_text_watermark.py): `service/scripts/detect_text_watermark.py`
- [Text rewriting](https://github.com/guillaumemeyer/watermarks-remover/blob/main/service/scripts/rewrite_text.py): `service/scripts/rewrite_text.py`
- [Stylometry scoring](https://github.com/guillaumemeyer/watermarks-remover/blob/main/service/scripts/score_stylometry.py): `service/scripts/score_stylometry.py`
- [SynthID scoring](https://github.com/guillaumemeyer/watermarks-remover/blob/main/service/scripts/score_synthid.py): `service/scripts/score_synthid.py`

### Auditing and hooks

- [Audit analysis](https://github.com/guillaumemeyer/watermarks-remover/blob/main/service/scripts/audit_lib.py): `service/scripts/audit_lib.py`
- [Directory audit](https://github.com/guillaumemeyer/watermarks-remover/blob/main/service/scripts/audit_dir.py): `service/scripts/audit_dir.py`
- [Website audit](https://github.com/guillaumemeyer/watermarks-remover/blob/main/service/scripts/audit_website.py): `service/scripts/audit_website.py`
- [Written-file hook](https://github.com/guillaumemeyer/watermarks-remover/blob/main/service/scripts/hook_written_file.py): `service/scripts/hook_written_file.py`

### Scoring utilities

- [Watermark scorer](https://github.com/guillaumemeyer/watermarks-remover/blob/main/stealer/scorer.py): `stealer/scorer.py`
- [Scorer workflow](https://github.com/guillaumemeyer/watermarks-remover/blob/main/stealer/steal.py): `stealer/steal.py`

### Other components

- **Agent or caller**

## Connections

- Agent or caller → HTTP service: calls HTTP (evidence: `README.md`)
- HTTP service → Format dispatch: dispatches files (evidence: `service/scripts/server.py`)
- HTTP service → Unicode cleaning: uses cleaning (evidence: `service/scripts/server.py`)
- HTTP service → Image metadata: uses metadata (evidence: `service/scripts/server.py`)
- HTTP service → Document metadata: uses metadata (evidence: `service/scripts/server.py`)
- HTTP service → Audio/video metadata: uses metadata (evidence: `service/scripts/server.py`)
- HTTP service → Audio cleaning: uses cleaning (evidence: `service/scripts/server.py`)
- HTTP service → Video cleaning: uses cleaning (evidence: `service/scripts/server.py`)
- HTTP service → Watermark detectors: uses detectors (evidence: `service/scripts/server.py`)
- HTTP service → Stylometry scoring: uses scoring (evidence: `service/scripts/server.py`)
- HTTP service → Text rewriting: uses rewriting (evidence: `service/scripts/server.py`)
- Format dispatch → Image metadata: routes images (evidence: `service/scripts/format_dispatch.py`)
- Format dispatch → Document metadata: routes containers (evidence: `service/scripts/format_dispatch.py`)
- Format dispatch → Audio/video metadata: routes media (evidence: `service/scripts/format_dispatch.py`)
- File cleaning → Format dispatch: classifies input (evidence: `service/scripts/clean_file.py`)
- File cleaning → Unicode cleaning: cleans text (evidence: `service/scripts/clean_file.py`)
- File cleaning → Image metadata: cleans images (evidence: `service/scripts/clean_file.py`)
- File cleaning → Document metadata: cleans documents (evidence: `service/scripts/clean_file.py`)
- File cleaning → Audio/video metadata: cleans media (evidence: `service/scripts/clean_file.py`)
- Audio cleaning → Video cleaning: reuses helpers (evidence: `service/scripts/clean_audio.py`)
- Video cleaning → Image metadata: reuses metadata (evidence: `service/scripts/clean_video.py`)
- File inspection → Format dispatch: classifies input
- Directory audit → Audit analysis: aggregates findings (evidence: `service/scripts/audit_lib.py`)
- Website audit → Audit analysis: aggregates findings (evidence: `service/scripts/audit_website.py`)
- Audit analysis → Format dispatch: routes audit items (evidence: `service/scripts/audit_lib.py`)
- Written-file hook → Audit analysis: scans file (evidence: `service/scripts/hook_written_file.py`)
- Written-file hook → File cleaning: shells out cleaning (evidence: `README.md`)
- Watermark detectors → Gumbel detector: uses detector (evidence: `service/scripts/text_detectors.py`)
- Text rewriting → Stylometry scoring: evaluates text (evidence: `service/scripts/rewrite_text.py`)
- Scorer workflow → Watermark scorer: uses scorer (evidence: `stealer/steal.py`)
