
remove-ai-watermarks v0.37.1
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.
Rimuovi le filigrane AI
Rimuovi i segni di provenienza AI da immagini e video che hai generato tu stesso:
- etichette visibili note come la scintilla di Google Gemini e i segni di testo del fornitore;
- filigrane invisibili a livello di pixel tramite rigenerazione diffusiva;
- metadati AI C2PA, EXIF, XMP, IPTC e correlati.
Il supporto video copre l'identificazione della provenienza, la pulizia completa di visibile più metadati, batch di directory, rimozione dei segni visibili di Sora, Veo, Seedance, Doubao, Dola, Hailuo AI e Kling AI, e rigenerazione VAE certificata da oracolo per la rimozione di SynthID video.
raiw.cc esegue questa libreria come servizio ospitato, con GPU inclusa e nulla da installare. La rimozione di segni visibili e metadati all'output Standard fino a 12 MP è gratuita lì; la risoluzione originale oltre 12 MP e la rimozione di filigrane invisibili sono a pagamento.
Questo progetto è per un uso legittimo su contenuti di tua proprietà. Non prende di mira anteprime di agenzie stock o altre filigrane che proteggono contenuti a pagamento di terze parti. Vedi note su ambito, sicurezza e aspetti legali.
Scegli cosa vuoi fare
| Obiettivo | Comando | GPU |
|---|---|---|
| Trova segnali di provenienza e filigrane | identify | No |
| Classifica una fotografia dai pixel (opt-in, non provenienza) | classify | No |
| Verifica SynthID OpenAI supportato dai pixel con l'API remota ufficiale | verify-openai-synthid | No |
| Rimuovi segni visibili AI noti | visible | No |
| Cancella una regione che selezioni | erase | No |
| Rimuovi metadati AI | metadata | No |
| Identifica la provenienza video supportata | video identify | No |
| Rimuovi segni visibili e metadati AI dal video | video all | No |
| Rimuovi metadati AI dal video | video metadata | No |
| Rimuovi un segno visibile AI registrato dal video | video visible | No |
| Elabora una directory di video | video batch | Dipende dalla modalità |
| Rimuovi SynthID video con il profilo VAE certificato | video invisible | Consigliata |
| Rigenera un'immagine per disturbare le filigrane invisibili | invisible | Richiesta (CUDA) |
| Esegui rimozione visibile, invisibile e metadati | all | Consigliata |
| Elabora una directory | batch | Dipende dalla modalità |
Le dichiarazioni InvisMark di Microsoft Paint e Photos vengono instradate automaticamente alla
rigenerazione dei pixel. Il comando all rimuove sia la filigrana pixel nascosta sia il
manifesto C2PA collegato; la sola rimozione dei metadati rimuove solo il manifesto.
Modalità di installazione
| Necessità | Installazione |
|---|---|
| Ispezione e rimozione dei metadati | remove-ai-watermarks |
| Classificazione AI-vs-fotocamera delle fotografie | remove-ai-watermarks[classify] |
| Verifica remota ufficiale OpenAI SynthID | remove-ai-watermarks[verify] |
| Rilevamento e rimozione visibile | 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] |
| Rimozione immagine invisibile (richiede CUDA) | remove-ai-watermarks[qwen-zimage] |
| Ogni funzionalità di produzione disponibile sul Python attivo | remove-ai-watermarks[all] |
Extra di livello inferiore e specializzati includono pixels, heif, trustmark,
migan, lama e diffusion. La
guida all'installazione documenta la loro esatta
composizione delle dipendenze, la compatibilità Python e i requisiti dei modelli.
Avvio rapido
Installa la CLI predefinita incentrata sui metadati:```bash uv tool install remove-ai-watermarks
Ispettionare un'immagine:```bash
remove-ai-watermarks identify image.png
Per classificare una fotografia a partire dai pixel (AI versus fotocamera, provider opzionale),
installare l'extra e chiamare classify. identify non lo avvia mai:```bash
uv tool install --force "remove-ai-watermarks[classify]"
remove-ai-watermarks classify image.png
Guida: [classificazione dei pixel delle foto](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/photo-classify.md).
La provenienza firmata è il percorso supportato per SynthID e `identify` la legge.
Non esiste un rilevatore locale dei pixel SynthID nel pacchetto. La ricerca su un
esperto a 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 le immagini OpenAI supportate, il verificatore ufficiale opzionale fornisce un verdetto
sulla filigrana dei pixel:```bash
uv tool install --force "remove-ai-watermarks[verify]"
remove-ai-watermarks verify-openai-synthid image.png --acknowledge-upload
Il comando rimuove i metadati di provenienza AI da una copia temporanea, verifica che
i pixel decodificati siano invariati, carica solo quella copia su OpenAI e consuma
solo la risposta indipendente di SynthID. Non viene mai eseguito implicitamente da identify.
Sono richiesti una chiave API, l'accesso all'endpoint e un riconoscimento esplicito del caricamento.
Per la rimozione della filigrana visibile, installa le dipendenze dei pixel:```bash uv tool install --force "remove-ai-watermarks[visible]"
Poi rimuovi un segno visibile noto e i metadati AI:```bash
remove-ai-watermarks visible image.png -o clean.png
Strippa 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 esegue il transcodifica dei flussi video o audio. A differenza
del comando immagine 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 che l'esportazione iOS di Doubao scrive (una
scatola meta nuda come figlio diretto di moov, e un elenco di metadati hdlr=mdir senza chiavi).
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
copia del flusso 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 segno 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 unico contratto di output prevedibile.
La rimozione video invisibile proprietaria è esclusa per impostazione predefinita.
`--invisible` opta per il profilo video SynthID lossy e certificato da oracle.
Elabora una directory con lo stesso contratto:```bash
remove-ai-watermarks video batch ./videos --mode all
Rimuovi un segno 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 tra fotogrammi adiacenti, quindi riutilizza
gli stessi backend di riempimento OpenCV, MI-GAN o LaMa della rimozione delle immagini. L'audio viene copiato
senza essere ricodificato e può raggiungere la sua fine naturale; il flusso video
viene transcodificato perché i suoi pixel cambiano. Per impostazione predefinita, una passata protetta di optical flow
allinea in base al movimento il riempimento accettato precedente e lo fonde solo quando il
contesto sorgente vicino concorda; usa `--no-temporal-consistency` per disabilitarla.
L'encoder preserva il campionamento della crominanza
a 8 bit della sorgente supportato, i tag 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 tramite un bridge NUT in memoria con timestamp invece di essere appiattiti
alla frequenza fotogrammi media. 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 una singola passata di decodifica e seleziona la prima corrispondenza stabile nell'
ordine di specificità mostrato di seguito. Passa un marchio esplicito per limitare il rilevamento
a un solo provider.
Sora copre la mascotte animata Sora 2 e il wordmark. Veo copre sia l'attuale
diamante a quattro punte sia il testo legacy `Veo`. Seedance copre l'etichetta fissa
`AI` in un riquadro, Dola copre il testo fisso `Dola AI`, Hailuo AI copre l'etichetta composita
`MINIMAX | hailuo AI` e Kling AI copre l'etichetta `KLING AI`
in basso a destra con il suo suffisso di versione. Una codifica completata viene pubblicata in modo atomico. Nessuna
uscita viene scritta quando non viene trovato alcun marchio stabile.
Gli input HDR, PQ/HLG e con più di 8 bit vengono rifiutati prima della codifica piuttosto
che ridotti silenziosamente attraverso il confine BGR a 8 bit di OpenCV.
Rimuovi SynthID 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 singolo campo di rumore latente condiviso
nel tempo, copia l'audio completo, rimuove i metadati di origine e pubblica
l'encode completato 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 nuovo controllo del provider
rimane utile per file insolitamente importanti o dopo modifiche al provider, ma
non è uno stato di risultato del prodotto.
Per la rimozione della filigrana invisibile, installa l'extra qwen-zimage. È richiesta una GPU NVIDIA:
tutti i profili sono solo CUDA e non esiste alcun fallback CPU o MPS.```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 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 molto testo possono aderire al passaggio sperimentale di post-elaborazione del testo verificato.
Esso accetta stringhe e riquadri di riga revisionati manualmente oppure un manifest di sola geometria verificato dall’operatore; non tratta mai l’output OCR grezzo come verità assoluta 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
Vedi 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'oracolo.
Vedi la [guida all'installazione](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/installation.md) per Homebrew, uv, le funzionalità
opzionali e la configurazione di sviluppo.
## Esempi
### Marchio Gemini visibile
| Prima | Dopo |
| --- | --- |
|  |  |
Il raster `after` viene 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: una passata Qwen-Image-2512 Lightning sotto
Canny ControlNet, seguita dalla riparazione Z-Image mascherata con SAM di qualsiasi volto rilevato. L'alternativa,
sdxl-zimage, sostituisce la fase globale con SDXL e mantiene la stessa fase
per i volti. Un terzo profilo, chroma-zimage, utilizza la passata globale Chroma1 con licenza Apache-2.0
con i propri livelli minimi piatti del vendor; consulta docs/chroma1-engine-research.md per la
calibrazione. --pipeline auto seleziona chroma-zimage per la provenienza OpenAI e Microsoft
e qwen-zimage in caso contrario. Tutti richiedono esclusivamente 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 |
| --- | --- |
| [](data/synthid/originals/ChatGPT%20Image%20May%2030,%202026,%2010_31_08%20AM.png) | [](docs/images/qwen-zimage/ChatGPT/ChatGPT%20Image%20May%2030,%202026,%2010_31_08%20AM_full_clean.png) |
| Esempio Gemini prima | Esempio Gemini dopo |
| --- | --- |
| [](data/synthid/originals/Gemini_Generated_Image_633uuy633uuy633u.png) | [](docs/images/qwen-zimage/Gemini/Gemini_Generated_Image_633uuy633uuy633u_full_clean.png) |
Questi file di output esatti sono stati verificati con i verifier del provider corrispondente. Quel
risultato si applica a questi file, non a ogni seed, immagine o versione futura della
filigrana.
## Ricette comuni
### Rimuovi ogni segno visibile rilevato```bash
remove-ai-watermarks visible image.png -o clean.png
The default --mark auto checks all registered visible marks and removes every
match. If the mark is visible to you but the detector misses it, select its
region explicitly:```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 un backend appreso.
Per sfondi più difficili, gli extra del backend appreso includono automaticamente le stesse
dipendenze dei pixel:```bash
uv tool install --force "remove-ai-watermarks[migan]"
remove-ai-watermarks visible image.png -o clean.png --backend migan
I'm ready to translate the Kitploit tool content from English to Italian. Please provide chunk 41 of 55.```bash uv tool install --force "remove-ai-watermarks[lama]" remove-ai-watermarks visible image.png -o clean.png --backend lama
### Riduci l'uso della memoria CUDA```bash
remove-ai-watermarks invisible image.png -o clean.png \
--cpu-offload --force
CPU offload riduce la pressione sulla memoria CUDA spostando i componenti del modello tra CPU e GPU, a scapito della 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 segni visibili include:
- la filigrana visibile scintillante di Google Gemini e Nano Banana;
- Doubao, il wordmark Jimeng e la pillola `AI生成` in alto a sinistra, Qwen, Kling AI,
Yuanbao, Baidu, LiblibAI e le etichette RunningHub;
- una variante calibrata del badge AI bianco in alto a destra di Microsoft;
- una variante calibrata dell'etichetta Samsung Galaxy AI.
L'ispezione di metadati e provenienza copre C2PA, EXIF, XMP, IPTC, i parametri
comuni dei generatori, le etichette AIGC China TC260 e diversi segnali
specifici del fornitore. Decoder opzionali aggiungono supporto per le filigrane
open DWT-DCT e Adobe TrustMark.
La matrice di supporto esatta, inclusi i limiti importanti relativi a locale e rilevatori, è
disponibile 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 segno immagine e video registrato.
## Come funziona
La rimozione visibile segue tre passaggi:
1. Rileva un segno registrato nella sua area prevista.
2. Costruisci una maschera attorno al segno.
3. Riempi 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 TC260 nativi MP4/MOV
vengono azzerati senza modificare le dimensioni dei box o gli offset dei media. Gli altri
contenitori supportati utilizzano il rispettivo percorso dei metadati.
La rimozione invisibile è diversa. Rigenera l'immagine attraverso una pipeline
di diffusione per disturbare le filigrane nel dominio dei pixel e delle frequenze. Questo modifica
l'immagine e non può garantire che un verificatore proprietario rifiuti ogni
output.
Consulta [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)
openai_synthid = raiw.verify_openai_synthid("image.png", acknowledge_upload=True)
print(openai_synthid.status)
provenance = raiw.identify_video("input.mp4")
report = raiw.inspect_video_metadata("input.mp4")
complete = raiw.remove_video_all("input.mp4", "clean.mp4")
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")
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 file o un array NumPy BGR. Per input tramite percorso, legge anche i metadati di provenienza, preserva il canale alpha e può rimuovere i metadati AI dal risultato scritto.
Consulta la guida all'API Python per la rimozione visibile, la pipeline
completa remove_all e remove_batch, l'ispezione della provenienza, la rimozione dei
metadati e l'uso della diffusione.
ComfyUI
Il pacchetto separato 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. Le filigrane pixel proprietarie 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'etichettaAIin un riquadro di Seedance e le etichette fisse Doubao, Dola, Hailuo AI e Kling AI. Non riconosce il vecchio vortice d'angolo Sora Turbo o layout non registrati di questi fornitori. Il backend classico OpenCV può sbavare sfondi strutturati; usa MI-GAN o LaMa quando la qualità del recupero è importante. - La rigenerazione SynthID video modifica risoluzione, frame rate e dettaglio dell'immagine. Il profilo incluso è certificato dall'oracolo, ma nessun decoder locale pubblico può certificare un output arbitrario a runtime. Ricontrolla output insolitamente importanti dopo modifiche al fornitore.
- La rimozione delle filigrane invisibili richiede CUDA. Tutti i profili rifiutano qualsiasi
altro dispositivo in fase di costruzione piuttosto che ripiegare su uno che non può eseguirli.
La rimozione visibile, la rimozione dei metadati e
identifyfunzionano comunque ovunque. - I sistemi di filigrana dei fornitori possono cambiare. Valida output importanti con il verificatore del fornitore stesso quando disponibile.
Il comando video invisible incluso usa il profilo certificato noise_std=0.15.
L'harness di ricerca complementare scripts/video_synthid_sweep.py costruisce
un controllo con re-encode abbinato più candidati rigenerati con VAE e lascia
vuoto il verdetto del verificatore:```bash
uv run --extra video --extra diffusion python scripts/video_synthid_sweep.py input.mp4 -o sweep/
Per valutare il costo effettivo di un output, usa `scripts/video_fidelity_probe.py`:
il PSNR del motore viene misurato prima del resize e dell'encode, quindi solo la
sonda vede l'immagine consegnata.```bash
uv run --extra video python scripts/video_fidelity_probe.py input.mp4 input_clean.mp4
Il controllo deve comunque risultare positivo a SynthID prima che un candidato negativo possa
essere considerato prova di rimozione. Nella calibrazione a due clip del 2026-07-29, entrambi i
controlli corrispondenti 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. Un successivo follow-up avversario che chiedeva alla Gemini standard di
reinterpretare il risultato dei pixel ha restituito UNAVAILABLE; quel follow-up non era una
nuova esecuzione del verificatore e non invalida i verdetti integrati. Un controllo
completo del 2026-07-31 su un campione Veo pubblico di otto secondi ha rilevato 0.10 ancora
rilevato e 0.15 non rilevato, quindi 0.15 è ora il default certificato. Gli
hash riproducibili e i verdetti per quel controllo completo -- un carrier, due
righe -- si trovano in data/evaluations/video-synthid-oracle.csv. La precedente
calibrazione a due clip è solo descrittiva: 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 con l'indice della documentazione.
- Installazione
- Guida CLI
- API Python
- Segnali supportati
- Limitazioni note
- Note su ambito, sicurezza e aspetti legali
- Dettagli interni dei moduli
- Rilascio e distribuzione
Le note di ricerca e gli esperimenti storici sono elencati separatamente nell' indice della documentazione. Spiegano decisioni passate ma non definiscono l'attuale API pubblica.
Contribuire
Installa l'ambiente di sviluppo ed esegui il gate del progetto:```bash uv sync --frozen --extra dev bash maintain.sh
Vedi [internals dei moduli](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/module-internals.md) prima di modificare un sottosistema
con invarianti documentate.
## Licenza
[Apache 2.0](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/LICENSE). Copyright 2025-2026 wiltodelta.