Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
remove-ai-watermarks — Rimuovi i watermark AI visibili e invisibili e i metadati di provenienza da immagini e video. Libreria Python e CLI per SynthID, C2PA, EXIF, IPTC, XMP e i comuni marchi dell'IA generativa. | Kitploit
Strumenti/GitHubGitHub/wiltodelta/remove-ai-watermarks
Utilità GenericheOSINT (Open Source Intelligence)Informatica ForenseSteganografiaRecupero DatiDigital ForensicsCrittografiaPrivacyApprendimento e Formazione
GitHubwiltodelta/remove-ai-watermarks

remove-ai-watermarks

Rimuovi i watermark AI visibili e invisibili e i metadati di provenienza da immagini e video. Libreria Python e CLI per SynthID, C2PA, EXIF, IPTC, XMP e i comuni marchi dell'IA generativa.

Vedi RepositorySito web
4.5k4241841 giorno faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
# Rimuovere i watermark AI

Rimuovi i contrassegni di provenienza AI dalle immagini e dai video che hai generato tu stesso:

- etichette visibili note come il watermark a scintilla di Google Gemini e i contrassegni testuali dei fornitori;
- watermark invisibili a livello di pixel tramite interruzione diretta del formato locale o rigenerazione con diffusione;
- C2PA, EXIF, XMP, IPTC e metadati AI correlati.

Il supporto video copre l'identificazione della provenienza, la pulizia completa di elementi visibili più metadati, le elaborazioni in batch di directory, la rimozione dei contrassegni visibili di Sora, Veo, Seedance, Doubao, Dola, Hailuo AI e Kling AI, e la rigenerazione VAE certificata da oracle per la rimozione di SynthID nei video.

> [raiw.cc](https://raiw.cc) esegue questa libreria come servizio ospitato, con la GPU
> inclusa e nulla da installare. La rimozione dei contrassegni visibili e dei metadati con output
> Standard fino a 12 MP è gratuita; la risoluzione originale superiore a 12 MP e la rimozione
> dei watermark invisibili sono a pagamento.

[![PyPI](https://img.shields.io/pypi/v/remove-ai-watermarks?logo=pypi&logoColor=white)](https://pypi.org/project/remove-ai-watermarks/)
[![Python](https://img.shields.io/pypi/pyversions/remove-ai-watermarks?logo=python&logoColor=white)](https://pypi.org/project/remove-ai-watermarks/)
[![Downloads](https://static.pepy.tech/badge/remove-ai-watermarks/month)](https://pepy.tech/project/remove-ai-watermarks)
[![License](https://img.shields.io/pypi/l/remove-ai-watermarks?color=blue)](LICENSE)
[![Tests](https://github.com/wiltodelta/remove-ai-watermarks/actions/workflows/test.yml/badge.svg)](https://github.com/wiltodelta/remove-ai-watermarks/actions/workflows/test.yml)
[![Sponsor](https://img.shields.io/badge/Sponsor-GitHub-db61a2?logo=githubsponsors&logoColor=white)](https://github.com/sponsors/wiltodelta)
[![skills.sh](https://skills.sh/b/wiltodelta/remove-ai-watermarks)](https://skills.sh/wiltodelta/remove-ai-watermarks)

> Questo è un progetto di ricerca sui segnali di provenienza AI, per uso lecito su contenuti
> di tua proprietà. È fornito così com'è, senza garanzia o responsabilità, e ogni utente è
> responsabile di come lo utilizza. Non è rivolto alle anteprime delle agenzie di stock o
> ad altri watermark che proteggono contenuti a pagamento di terzi. Alcune giurisdizioni,
> inclusa la Cina, limitano la rimozione delle etichette AI o la fornitura di strumenti che lo facciano. Vedi
> [note su ambito, sicurezza e aspetti legali](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/legal-and-safety.md).

## Scegli cosa vuoi fare

| Obiettivo | Comando | GPU |
| --- | --- | --- |
| Trovare segnali di provenienza e watermark | `identify` | No |
| Classificare una fotografia dai pixel (opt-in, non provenienza) | `classify` | No |
| Rimuovere contrassegni AI visibili noti | `visible` | No |
| Cancellare una regione selezionata | `erase` | No |
| Rimuovere i metadati AI | `metadata` | No |
| Identificare la provenienza video supportata | `video identify` | No |
| Rimuovere contrassegni visibili e metadati AI dal video | `video all` | No |
| Rimuovere i metadati AI dal video | `video metadata` | No |
| Rimuovere un contrassegno AI visibile registrato dal video | `video visible` | No |
| Elaborare una directory di video | `video batch` | Dipende dalla modalità |
| Applicare il profilo calibrato di rimozione SynthID sui pixel video | `video invisible` | Consigliata |
| Rigenerare un'immagine per interrompere i watermark invisibili | `invisible` | Richiesta (CUDA) |
| Eseguire la rimozione di elementi visibili, invisibili e metadati | `all` | Consigliata |
| Elaborare una directory | `batch` | Dipende dalla modalità |

Le dichiarazioni InvisMark di Microsoft Paint e Photos vengono indirizzate automaticamente
alla rigenerazione dei pixel. Il comando `all` rimuove sia il watermark nascosto nei pixel sia
il suo manifest C2PA collegato; la sola rimozione dei metadati elimina solo il manifest. Un'API Python
specializzata può ispezionare e interrompere il payload locale validato
`Watermarker.dll` senza diffusione.

## Modalità di installazione

| Esigenza | Installazione |
| --- | --- |
| Ispezione e rimozione dei metadati | `remove-ai-watermarks` |
| Classificazione fotografica AI-versus-fotocamera | `remove-ai-watermarks[classify]` |
| Classificazione di esportazioni da OpenAI/Google/fonte sconosciuta | `remove-ai-watermarks[source-classify]` |
| Rilevamento e rimozione di elementi visibili | `remove-ai-watermarks[visible]` |
| Elaborazione video visibile | `remove-ai-watermarks[video]` |
| Rimozione SynthID video | `remove-ai-watermarks[video,diffusion]` |
| Rilevamento DWT-DCT senza Torch | `remove-ai-watermarks[detect]` |
| Interruzione diretta di Paint InvisMark locale | `remove-ai-watermarks[pixels]` |
| Rimozione invisibile su immagini (richiede CUDA) | `remove-ai-watermarks[qwen-zimage]` |
| Tutte le funzionalità di produzione disponibili sul Python attivo | `remove-ai-watermarks[all]` |

Gli extra di livello inferiore e specializzati includono `pixels`, `heif`, `trustmark`,
`migan`, `lama`, `diffusion`, `classify-onnx` e `source-classify`. La
[guida all'installazione](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/installation.md#feature-extras) documenta la loro esatta
composizione delle dipendenze, la compatibilità con Python e i requisiti dei modelli.

## Avvio rapido

Installa la CLI predefinita incentrata sui metadati:

```bash
uv tool install remove-ai-watermarks
```

Ispeziona un'immagine:

```bash
remove-ai-watermarks identify image.png
```

Per classificare una fotografia dai pixel (AI versus fotocamera, provider opzionale),
installa l'extra e chiama `classify`. `identify` non lo avvia mai:

```bash
uv tool install --force "remove-ai-watermarks[classify]"
remove-ai-watermarks classify image.png
```

Guida: [photo pixel classification](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/photo-classify.md).

Per un segnale leggero e con astensione relativo a esportazioni da fonti OpenAI/Google/sconosciute dopo
la rimozione dei metadati, utilizzare la API Python separata. Non è un rilevatore SynthID:

```python
import remove_ai_watermarks as raiw

result = raiw.classify_source("image.png")
print(result.label, result.reason)
```

Installa `remove-ai-watermarks[source-classify]`. Guida:
[source-pipeline classification](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/source-classify.md).

La provenienza firmata è la via supportata per SynthID e `identify` la legge.
Non esiste un rilevatore locale di pixel SynthID nel pacchetto. La ricerca su un
esperto di reticolo periodico è in `scripts/synthid_runtime/` e
[synthid-detector-research.md](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/synthid-detector-research.md).

Per la rimozione di watermark visibili, installa le dipendenze pixel:

```bash
uv tool install --force "remove-ai-watermarks[visible]"
```

Poi rimuovi un watermark visibile noto e i metadati AI:

```bash
remove-ai-watermarks visible image.png -o clean.png
```

Rimuovi i metadati senza eseguire inpainting o diffusione visibili:

```bash
remove-ai-watermarks metadata image.png --remove -o clean.png
```

Senza `-o` questo comando sovrascrive il file sorgente sul posto.

Ispeziona o rimuovi i metadati AI da un file MP4, MOV, M4V, WebM, MKV, AVI o FLV:

```bash
remove-ai-watermarks video metadata input.mp4 --check
remove-ai-watermarks video metadata input.mp4 --remove -o clean.mp4
```

Il comando `video metadata` non transcodifica flussi video o audio. A differenza
del comando image sopra, quando `-o` viene omesso scrive `<source>_clean` e
preserva l'originale. L'ispezione di MP4 e MOV
include il tag nativo TC260 `AIGC` in
`moov.udta.meta.keys/ilst`, incluso un `moov` posizionato dopo il payload multimediale,
oltre alle varianti `meta` in formato QuickTime scritte dall'export iOS di Doubao (un box
`meta` nudo come figlio diretto di `moov`, e una lista di metadati `hdlr=mdir` senza chiave).
Anche le voci con chiave `workflow` e `prompt` nella stessa struttura di metadata-list
vengono rilevate e rimosse, inclusi gli export di ComfyUI.
L'ispezione di MKV e WebM legge il posizionamento normativo
`Segment.Tags.Tag.SimpleTag`. AVI usa `LIST/INFO/AIGC`, mentre FLV
usa `script.onMetaData.AIGC`. I formati non-ISOBMFF vengono rimuxati con stream
copy per la rimozione.

Usa il percorso video orientato al prodotto per identificare o pulire un file:

```bash
uv tool install --force "remove-ai-watermarks[video]"
remove-ai-watermarks video identify input.mp4
remove-ai-watermarks video all input.mp4 -o clean.mp4
```

`video all` rimuove un marchio visibile registrato stabile quando presente e rimuove sempre i metadati AI verificati. Se nessuno dei due segnali viene trovato, scrive comunque un passthrough nello stesso contenitore, così i chiamanti dell'applicazione ottengono un contratto di output prevedibile. La rimozione proprietaria dei video invisibili è esclusa per impostazione predefinita.
`--invisible` attiva il profilo SynthID video con perdita, certificato dall'oracolo.

Elabora una directory con lo stesso contratto:

```bash
remove-ai-watermarks video batch ./videos --mode all
```

Rimuovi un watermark video visibile supportato:

```bash
remove-ai-watermarks video visible input.mp4 -o clean.mp4
remove-ai-watermarks video visible veo.mp4 --mark veo -o veo_clean.mp4
remove-ai-watermarks video visible seedance.mp4 --mark seedance -o seedance_clean.mp4
remove-ai-watermarks video visible dola.mp4 --mark dola -o dola_clean.mp4
remove-ai-watermarks video visible hailuo.mp4 --mark hailuo -o hailuo_clean.mp4
remove-ai-watermarks video visible kling.mp4 --mark kling -o kling_clean.mp4
```

Questo percorso analizza l'intera sequenza prima di modificare i pixel. Accetta solo un
marchio che si ripete in una posizione stabile attraverso fotogrammi adiacenti, poi riutilizza
gli stessi backend di riempimento OpenCV, MI-GAN o LaMa come per la rimozione di immagini. L'audio viene copiato
senza ricodifica ed è lasciato raggiungere la sua fine naturale; il flusso video
viene transcodificato perché i suoi pixel cambiano. Per impostazione predefinita, un passaggio di flusso ottico controllato allinea al movimento
il riempimento accettato precedente e lo fonde solo quando il contesto sorgente vicino è d'accordo; usa `--no-temporal-consistency` per disabilitarlo.
L'encoder preserva il campionamento cromatico sorgente a 8 bit supportato, i tag di colore e la scala temporale delle tracce MP4/MOV invece
di affidarsi ai valori predefiniti impliciti raw-BGR di ffmpeg. Gli intervalli di fotogrammi variabili vengono
preservati attraverso un bridge NUT in memoria con timestamp invece di essere appiattiti
alla frequenza media dei fotogrammi. I timestamp di inizio sorgente diversi da zero vengono mantenuti
insieme all'offset audio copiato. Il valore predefinito `--mark auto`
analizza tutti i provider in un'unica passata di decodifica e seleziona la prima corrispondenza stabile nell'
ordine di specificità mostrato di seguito. Una valida provenienza Google AI-video interrompe una
corrispondenza incrociata Sora/Veo a favore di Veo quando il diamante è annidato nella regione Sora
o Veo persiste attraverso l'intera clip mentre Sora no.
Passa un marchio esplicito per limitare il rilevamento a un solo provider.
Sora copre la mascotte mobile Sora 2, con o senza il wordmark; le corrispondenze solo mascotte
richiedono anche la forma completa a due occhi. Veo copre sia il diamante a quattro punti attuale
sia il testo legacy `Veo`. Seedance copre l'etichetta fissa incorniciata
`AI`, Dola copre il testo fisso `Dola AI`, Hailuo AI copre l'etichetta composita
`MINIMAX | hailuo AI`, e Kling AI copre l'etichetta in basso a destra `KLING AI` o
`KlingAI` con il suo suffisso di versione. Una codifica completata viene pubblicata
atomicamente. Nessun output viene scritto quando non viene trovato alcun marchio stabile.
Input HDR, PQ/HLG e superiori a 8 bit vengono rifiutati prima della codifica invece
di essere ridotti silenziosamente attraverso il confine BGR a 8 bit di OpenCV.

Applica il profilo calibrato di rimozione SynthID per pixel video:

```bash
uv tool install --force "remove-ai-watermarks[video,diffusion]"
remove-ai-watermarks video invisible input.mp4 -o clean.mp4
```

Questo percorso rigenera la sequenza completa con un unico campo di rumore latente condiviso
nel tempo, copia l'audio completo, rimuove i metadati di origine e pubblica
la codifica completata in modo atomico. Il profilo predefinito `noise_std=0.15` ha superato sia
la calibrazione a due portanti sia un controllo completo dell'oracolo Veo pubblico di otto secondi. Google non pubblica un decoder locale, quindi un controllo fresco del provider
rimane utile per file insolitamente importanti o dopo modifiche al provider, ma non
è uno stato di risultato del prodotto. La CLI quindi descrive la rigenerazione dei pixel video invece di rivendicare un verdetto SynthID per file, e segnala la
filigrana audio copiata come `UNVERIFIED`.

Per la rimozione della filigrana invisibile tramite la CLI o l'API di alto livello, installare
l'extra `qwen-zimage`. **È richiesta una GPU NVIDIA**: tutti i profili di diffusione sono
solo CUDA, e non esiste un fallback CPU o MPS. L'API Paint locale specializzata
utilizza l'extra `pixels` senza CUDA.

```bash
uv tool install --force "remove-ai-watermarks[qwen-zimage]"
remove-ai-watermarks invisible image.png -o clean.png
```

Se i rilevatori locali non riescono a confermare la presenza di una filigrana invisibile ma sai che l'immagine proviene da un generatore AI, aggiungi `--force`:

```bash
remove-ai-watermarks invisible image.png -o clean.png --force
```

Le immagini con molta tipografia possono optare per il post-pass sperimentale di testo verificato.
Accetta stringhe riviste manualmente e riquadri di riga oppure un manifest
geometrico verificato dall'operatore; non considera mai l'output OCR grezzo come ground truth né viene eseguito
automaticamente:

```bash
uv tool install --force "remove-ai-watermarks[text-restoration]"
remove-ai-watermarks invisible image.png -o clean.png \
  --text-manifest verified-lines.json --force
```

Consulta la [guida CLI](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/cli.md#restore-operator-verified-text) per lo schema del manifest, le restrizioni di compatibilità e le avvertenze sull'oracle.

Consulta la [guida all'installazione](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/installation.md) per Homebrew, uv, funzionalità opzionali e configurazione di sviluppo.

## Esempi

### Marchio Gemini visibile

| Prima | Dopo |
| --- | --- |
| ![Immagine con una filigrana Gemini visibile](https://assets.kitploit.com/production/public/readmes/7369/4f6643f46057e4a4ec503f5bf0daf7243768915090f2d7fc5ac183c2d928c5ca.png) | ![Immagine dopo la rimozione della filigrana visibile](https://assets.kitploit.com/production/public/readmes/7369/45193ef965a27342b183a1834b01ef812f653da2ec356a81fce1aed79f1ef814.png) |

Il raster `after` è generato dal raster `before` tracciato tramite il percorso pubblico:

```bash
uv run remove-ai-watermarks visible demo_banana_before.png \
  --backend cv2 -o demo_banana_after.png
```

### Rimozione invisibile di alta qualità

`qwen-zimage` è il profilo predefinito: un passaggio Qwen-Image-2512 Lightning sotto Canny
ControlNet, seguito dalla riparazione Z-Image con maschera SAM di qualsiasi volto rilevato. L'alternativa, `sdxl-zimage`, sostituisce lo stadio globale con SDXL e mantiene lo stesso stadio
per il volto. Un terzo profilo, `chroma-zimage`, utilizza il passaggio globale Chroma1 con licenza Apache-2.0
con i propri limiti minimi flat del fornitore; consultare `docs/chroma1-engine-research.md` per la
calibrazione. `--pipeline auto` seleziona sdxl-zimage per Google, chroma-zimage per
Microsoft e qwen-zimage in tutti gli altri casi. Tutti sono solo CUDA.

```bash
uv tool install --force "remove-ai-watermarks[qwen-zimage]"
remove-ai-watermarks invisible image.png -o clean.png --force
```

| Esempio OpenAI prima | Esempio OpenAI dopo |
| --- | --- |
| [![Griglia ritratti OpenAI prima qwen-zimage](https://assets.kitploit.com/production/public/readmes/7369/28ff8732b037f98a4ef5bc277bbcdaa32e5eb9ccbd00b6c8c616e46ef68ae8a0.png)](data/synthid/originals/ChatGPT%20Image%20May%2030,%202026,%2010_31_08%20AM.png) | [![Griglia ritratti OpenAI dopo qwen-zimage](https://assets.kitploit.com/production/public/readmes/7369/8066deab6162ef4fba352ffb475a119bfe94f097a4f5531e0fe141cbb8e089b5.png)](docs/images/qwen-zimage/ChatGPT/ChatGPT%20Image%20May%2030,%202026,%2010_31_08%20AM_full_clean.png) |

| Esempio Gemini prima | Esempio Gemini dopo |
| --- | --- |
| [![Cartello Gemini prima qwen-zimage](https://assets.kitploit.com/production/public/readmes/7369/4affd7f27767a445db6abf741355743ba8d95108ad922c9fff045feed8492236.png)](data/synthid/originals/Gemini_Generated_Image_633uuy633uuy633u.png) | [![Cartello Gemini dopo qwen-zimage](https://assets.kitploit.com/production/public/readmes/7369/42858417874f6cd8bc7c9bdb39f6bde8aa32310a3e219e7ee2dff23a4742c7b1.png)](docs/images/qwen-zimage/Gemini/Gemini_Generated_Image_633uuy633uuy633u_full_clean.png) |

Questi esatti file di output sono stati verificati con i verificatori del provider corrispondente. Il
risultato si applica a questi file, non a ogni seed, immagine o futura versione
di watermark.

## Ricette comuni

### Rimuovere ogni marchio visibile rilevato

```bash
remove-ai-watermarks visible image.png -o clean.png
```

Il valore predefinito `--mark auto` controlla tutti i mark visibili registrati e rimuove ogni corrispondenza. Se il mark è visibile a te ma il rilevatore non lo individua, seleziona esplicitamente la sua regione:

```bash
remove-ai-watermarks erase image.png \
  --region 1640,1930,400,100 \
  -o clean.png
```

`--region` usa `x,y,width,height` e può essere ripetuto.

### Usare un backend di riempimento appreso

L'extra `visible` usa l'inpainting di OpenCV quando non è installato alcun backend appreso.
Per sfondi più difficili, gli extra del backend appreso includono automaticamente
le stesse dipendenze a livello di pixel:

```bash
uv tool install --force "remove-ai-watermarks[migan]"
remove-ai-watermarks visible image.png -o clean.png --backend migan
```

```bash
uv tool install --force "remove-ai-watermarks[lama]"
remove-ai-watermarks visible image.png -o clean.png --backend lama
```

### Ridurre l'uso della memoria CUDA

```bash
remove-ai-watermarks invisible image.png -o clean.png \
  --cpu-offload --force
```

L'offload sulla CPU riduce la pressione sulla memoria CUDA spostando i componenti del modello tra CPU e GPU, a costo di una perdita di velocità.

### Elaborare una directory

```bash
remove-ai-watermarks batch ./images --mode visible
remove-ai-watermarks batch ./images --mode all
```

## Cosa può riconoscere lo strumento

Il supporto per i watermark visibili include:

- watermark a scintilla visibile di Google Gemini e Nano Banana;
- Doubao, il wordmark Jimeng e i layout `AI生成` in alto a sinistra, Qwen, Kling AI,
  Yuanbao, Dola, WorkBuddy, Baidu, il wordmark in basso al centro di LiblibAI e la
  pillola compatta in alto a sinistra, ed etichette RunningHub;
- layout calibrati del badge AI bianco e beige in alto a destra di Microsoft;
- informative calibrate Samsung Galaxy AI per italiano e coreano;
- un fallback generico senza brand `AI生成` in basso a destra per timbri di
  AI-edit a livello di OS/galleria che non portano un wordmark di un fornitore
  proprio (vivo e Xiaomi Gallery confermati); calibrazione solo sintetica,
  evidenza più debole rispetto ai rilevatori ottimizzati per fornitore sopra;
- il wordmark OpenArt, posizionato al centro del fotogramma anziché in un angolo;
  non calibrato (un caso reale confermato, nessun corpus acquisito).

L'ispezione dei metadati e della provenienza copre C2PA, EXIF, XMP, IPTC, parametri
comuni dei generatori nei contenitori di immagini e video, etichette AIGC TC260
cinesi e diversi segnali specifici dei fornitori. Decoder opzionali aggiungono
supporto per watermark aperti DWT-DCT e Adobe TrustMark.

La matrice di supporto esatta, incluse importanti limitazioni di locale e
rilevatore, si trova in [supported signals](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/supported-signals.md). La
[galleria di esempi sintetici](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/data/fixtures/visible/README.md) contiene un campione
canonico per ogni mark registrato di immagini e video.

## Come funziona

La rimozione visibile segue tre passaggi:

1. Rilevare un mark registrato nella sua area prevista.
2. Costruire una maschera attorno al mark.
3. Riempire solo la regione mascherata con OpenCV, MI-GAN o LaMa.

La rimozione dei metadati utilizza uno stripping consapevole del formato. La
rimozione dei metadati JPEG preserva la scansione dell'immagine codificata invece
di ricomprimerla. I valori nativi MP4/MOV TC260 e i parametri di generazione
con chiave vengono azzerati senza modificare le dimensioni dei box o gli offset
dei media. Gli altri contenitori supportati utilizzano il corrispondente percorso
dei metadati.

La rimozione invisibile tramite la CLI e l'API di alto livello rigenera l'immagine
attraverso una pipeline di diffusione. I chiamanti specializzati possono invece
decodificare e disturbare il formato locale Microsoft Paint identificato
positivamente con modifiche ai pixel molto più piccole. Nessuno dei due percorsi
può garantire che ogni verificatore proprietario rifiuti ogni output.

Vedi [supported signals](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/supported-signals.md) e
[known limitations](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/known-limitations.md) per il confine tecnico completo.

## API Python

L'API di rimozione visibile richiede `remove-ai-watermarks[visible]`.

```python
import remove_ai_watermarks as raiw

result, removed = raiw.remove_visible("watermarked.png", "clean.png")
print(removed)

report = raiw.remove_visible_detailed("watermarked.png", "clean.png")
print(report.status)  # cleaned | partial | unvalidated | no_watermark

complete = raiw.remove_all("watermarked.png", "clean.png")
print(complete.visible_status, complete.visible_marks)

images = raiw.remove_batch("images", "images_clean", mode="visible")
for item in images.items:
    print(item.source, item.visible_status, item.visible_marks)

provenance = raiw.identify_video("input.mp4")
report = raiw.inspect_video_metadata("input.mp4")
complete = raiw.remove_video_all("input.mp4", "clean.mp4")
print(complete.visual_invisible_action, complete.audio.watermark_status)
batch = raiw.remove_video_batch("videos", "videos_clean")
cleaned = raiw.remove_video_metadata("input.mp4")
synthid_cleaned = raiw.remove_video_invisible("input.mp4", "synthid_clean.mp4")
print(synthid_cleaned.visual_invisible_action, synthid_cleaned.audio.watermark_status)
visible = raiw.remove_video_visible("input.mp4", "clean.mp4")
print(visible.mark)
veo = raiw.remove_video_visible("veo.mp4", "veo_clean.mp4", mark="veo")
seedance = raiw.remove_video_visible(
    "seedance.mp4",
    "seedance_clean.mp4",
    mark="seedance",
)
dola = raiw.remove_video_visible("dola.mp4", "dola_clean.mp4", mark="dola")
```

L'API di alto livello accetta un percorso di file o un array NumPy BGR. Per gli input con percorso
legge anche i metadati di provenienza, preserva l'alpha e può rimuovere i metadati AI
dal risultato scritto.

Consulta la [guida all'API Python](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/python-api.md) per la rimozione visibile, la pipeline completa
`remove_all` e `remove_batch`, l'ispezione della provenienza, la rimozione dei metadati
e l'utilizzo con la diffusione.

## Agent skill

Gli agenti di coding possono installare la skill pubblicata e pilotare questa CLI:

```bash
npx skills add wiltodelta/remove-ai-watermarks
```

Claude Code può aggiungere questo repository come marketplace di plugin:

```text
/plugin marketplace add wiltodelta/remove-ai-watermarks
/plugin install remove-ai-watermarks@remove-ai-watermarks
```

La skill rifiuta i marchi di agenzie di stock e altri asset a pagamento di terze parti. Vedi
[la guida alla skill dell'agente](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/agent-skill.md).

## ComfyUI

Il pacchetto separato
[ComfyUI Remove AI Watermarks](https://github.com/wiltodelta/ComfyUI-remove-ai-watermarks)
fornisce nodi per la rimozione visibile, il rilevamento, la cancellazione di regioni e
la rimozione invisibile.

## Limitazioni importanti

- Un segnale locale mancante significa sconosciuto, non pulito. I watermark
  proprietari a livello di pixel possono rimanere dopo che i metadati sono stati rimossi.
- La rimozione visibile ricostruisce una piccola regione. I risultati dipendono dallo sfondo
  e dal backend di riempimento selezionato.
- La rimozione invisibile modifica l'intera immagine e può alterare volti, testo o dettagli
  fini.
- La rimozione visibile nei video riconosce il wordmark mobile Sora 2, il diamante Veo
  attuale più il testo legacy `Veo`, l'etichetta `AI` incorniciata di Seedance e le etichette
  fisse Doubao, Dola, Hailuo AI, Vidu e Kling AI. Non riconosce il vecchio
  swirl nell'angolo di Sora Turbo o layout non registrati di quei provider.
  Il backend classico OpenCV può sbavare sfondi strutturati; usa MI-GAN o
  LaMa quando la qualità del recupero è importante.
- La rigenerazione di Video SynthID cambia risoluzione, frame rate e dettaglio dell'immagine.
  Il profilo fornito è certificato dall'oracle, ma nessun decoder locale pubblico può
  certificare un output arbitrario a runtime. Ricontrolla gli output insolitamente importanti
  dopo modifiche del provider.
- La rimozione invisibile dei watermark tramite CLI e API di alto livello richiede CUDA.
  Tutti i profili di diffusione rifiutano qualsiasi altro dispositivo in fase di costruzione
  anziché ripiegare su uno che non può eseguirli. L'API locale specializzata Paint,
  la rimozione visibile, la rimozione dei metadati e `identify` funzionano senza CUDA.
- I sistemi di watermark dei provider possono cambiare. Convalida gli output importanti con
  il verificatore del provider stesso quando disponibile.

Il comando fornito `video invisible` usa il profilo certificato `noise_std=0.15`.
Il harness di ricerca complementare `scripts/video_synthid_sweep.py` costruisce
un controllo di ricodifica abbinato più candidati rigenerati via VAE e lascia il verdetto
del verificatore vuoto:

```bash
uv run --extra video --extra diffusion python scripts/video_synthid_sweep.py input.mp4 -o sweep/
```

Per valutare quanto sia effettivamente costato un output, usa `scripts/video_fidelity_probe.py`:
il PSNR del motore stesso viene misurato dopo il ridimensionamento dell'input e prima della codifica
finale, quindi solo la sonda vede l'immagine effettivamente consegnata.

```bash
uv run --extra video python scripts/video_fidelity_probe.py input.mp4 input_clean.mp4
```

Il controllo deve comunque risultare SynthID-positivo prima che un candidato negativo possa contare come prova di rimozione. Nella calibrazione a due clip del 2026-07-29, entrambi i controlli abbinati erano positivi nel verificatore SynthID integrato di Gemini; il candidato più forte era negativo su entrambi i carrier, mentre un candidato più debole era negativo su uno solo. Un successivo follow-up avversariale che ha chiesto a Gemini ordinario di reinterpretare il risultato a livello di pixel ha restituito `UNAVAILABLE`; quel follow-up non era una ri-esecuzione del verificatore e non invalida i verdetti integrati. Un controllo full-clip del 2026-07-31 su un campione Veo pubblico di otto secondi ha rilevato che `0.10` era ancora rilevato e `0.15` non rilevato, quindi `0.15` è ora il default certificato. Gli hash riproducibili e i verdetti per quel controllo full-clip -- un carrier, due righe -- si trovano in `data/evaluations/video-synthid-oracle.csv`. La precedente calibrazione a due clip è solo narrativa: i suoi verdetti non sono stati registrati in un manifest tracciato, quindi considera il default certificato come basato sulle righe del 2026-07-31.

## Documentazione

Inizia dall'[indice della documentazione](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/index.md).

- [Installazione](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/installation.md)
- [Guida CLI](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/cli.md)
- [API Python](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/python-api.md)
- [Segnali supportati](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/supported-signals.md)
- [Limitazioni note](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/known-limitations.md)
- [Note su ambito, sicurezza e aspetti legali](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/legal-and-safety.md)
- [Interni dei moduli](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/module-internals.md)
- [Release e distribuzione](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/release-and-distribution.md)
- [Agent skill](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/agent-skill.md)

Le note di ricerca e gli esperimenti storici sono elencati separatamente nell'[indice della documentazione](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/index.md). Spiegano decisioni passate ma non definiscono l'API pubblica attuale.

## Contribuire

Installa l'ambiente di sviluppo ed esegui il gate del progetto:

```bash
uv sync --frozen --extra dev
bash maintain.sh
```

Consulta [module internals](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/module-internals.md) prima di modificare un sottosistema
con invarianti documentate. Segnala le vulnerabilità come descritto in
[SECURITY.md](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/SECURITY.md).

## Licenza

[Apache 2.0](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/LICENSE). Copyright 2025-2026 wiltodelta.
Scarica lo strumento