mirror of
https://github.com/aloshdenny/reverse-SynthID.git
synced 2026-08-09 07:26:03 +02:00
Expand GUI usage docs, link to it from the main README
This commit is contained in:
+41
-28
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user