diff --git a/README.md b/README.md index 398e5b7..47a15f3 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,8 @@ Visit us on [PitchHut](https://www.pitchhut.com/project/reverse-synthid-engineering) +> This fork adds a drag and drop desktop app for the V3 bypass, no command line needed after setup. See [gui/README.md](gui/README.md) for setup and usage. +
diff --git a/gui/README.md b/gui/README.md
index 998410c..e9022d3 100644
--- a/gui/README.md
+++ b/gui/README.md
@@ -1,23 +1,17 @@
# SynthID Cleaner (GUI)
-A small drag-and-drop desktop app around this repo's V3 spectral bypass
-(`src/extraction/synthid_bypass.py`). Useful for e.g. removing the SynthID
-watermark left behind after using generative AI to restore old photographs.
+A drag and drop desktop app built on this repo's V3 spectral bypass
+(`src/extraction/synthid_bypass.py`). Made for removing the SynthID
+watermark left over after using generative AI to restore old photographs,
+though it works on any Gemini generated image.
-- Drop images in, get cleaned copies out — no command line needed after setup.
-- Runs `RobustSynthIDExtractor` on each image first. The spectral bypass only
- runs if a watermark is actually detected; otherwise the image is passed
- through untouched. (Blindly subtracting the codebook's carrier pattern from
- an image that never had it would imprint a watermark-shaped artifact
- instead of removing one — this is why detection gates the bypass.)
-- Optionally strips all EXIF/XMP/IPTC metadata from the output (including any
- AI-generation provenance tags such as C2PA content credentials or IPTC
- `DigitalSourceType`), by rebuilding the file from raw pixel data.
-- Runs fully offline. No network calls, no telemetry.
-- Uses V3 (pure signal processing — numpy/scipy/opencv/PyWavelets/
- scikit-learn only, no PyTorch required, no GPU needed).
+## Setup (one time only)
-## Setup
+Double click `Launch SynthID Cleaner.command`. On first run it creates a
+virtual environment and installs everything it needs automatically. This
+takes a minute or two depending on your connection.
+
+If you would rather do it by hand from the terminal:
```bash
cd gui
@@ -26,22 +20,41 @@ source venv/bin/activate
pip install -r requirements-gui.txt
```
-## Run
+## Using it
-Double-click `Launch SynthID Cleaner.command`, or from the terminal:
+1. Double click `Launch SynthID Cleaner.command`. A small window opens.
+2. Drag your images into the box, or click the box to pick files from a
+ dialog instead.
+3. Pick a strength from the dropdown: gentle, moderate, aggressive, or
+ maximum. Aggressive is the default and works well for most photos.
+4. Leave "Strip EXIF/XMP/IPTC metadata" checked if you also want camera and
+ software tags, plus any AI provenance metadata, removed from the output
+ files.
+5. Set the output folder in the "Save to" field. It defaults to a
+ synthid-cleaned folder on your Desktop.
+6. Watch the status line at the bottom while it works. For each image it
+ reports whether a watermark was found and removed, or whether the image
+ was already clean and left untouched.
-```bash
-cd gui
-source venv/bin/activate
-python gui.py
-```
+Each output file keeps the original name with `_clean` added, so
+`photo.png` becomes `photo_clean.png` in the output folder.
-The first double-click sets up the venv automatically if it doesn't exist yet.
+## What it actually does
+
+Every image is checked first with this repo's `RobustSynthIDExtractor`.
+Only images where a watermark is actually detected go through the spectral
+bypass. Images with no detectable watermark are copied through unchanged
+instead, so the tool cannot accidentally stamp a watermark shaped pattern
+onto a photo that never had one.
+
+Everything runs locally: no network calls, no telemetry. It uses the V3
+pipeline only (numpy, scipy, opencv, PyWavelets, scikit-learn), so no
+PyTorch install or GPU is required.
## Notes
-- Reads the bypass codebook from `../artifacts/spectral_codebook_v3.npz` and
- the detector codebook from `../artifacts/codebook/robust_codebook.pkl`
- (both already in this repo) — no extra downloads.
-- Subject to this repo's [LICENSE](../LICENSE): non-commercial use, with
+- Codebooks are read straight from this repo: `../artifacts/spectral_codebook_v3.npz`
+ for the bypass, `../artifacts/codebook/robust_codebook.pkl` for detection.
+ Nothing extra to download.
+- Subject to this repo's [LICENSE](../LICENSE): non commercial use, with
required attribution to the original author.