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. +

Python License 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.