Torna agli aggiornamenti
New releaseJul 30, 2026

remove-ai-watermarks v0.21.2

Rimuovi filigrane AI. Libreria CLI e Python per rimuovere filigrane AI visibili e invisibili (Gemini / Nano Banana sparkle, SynthID) e metadati di provenienza (C2PA, EXIF, IPTC) dalle immagini.

Condividi

Rimuovi le filigrane AI

Rimuovi i marchi di provenienza AI da immagini e video che hai generato tu stesso:

  • etichette visibili note come lo scintillio Gemini e i marchi testuali del fornitore;
  • filigrane pixel invisibili tramite rigenerazione diffusion;
  • C2PA, EXIF, XMP, IPTC e metadati AI correlati.

Il supporto video copre l'identificazione della provenienza, la pulizia completa visibile-più-metadati, batch di directory, rimozione dei marchi visibili Sora, Veo, Seedance, Dola, Hailuo e Kling, e rigenerazione VAE certificata oracle per la rimozione di SynthID nei video.

Provalo online su raiw.cc se non vuoi installare Python o eseguire modelli di diffusione in locale.

PyPI Python Downloads License Tests Sponsor

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 terzi. Vedi note su ambito, sicurezza e aspetti legali.

Scegli cosa vuoi fare

GoalCommandGPU
Trova segnali di provenienza e filigraneidentifyNo
Rimuovi marchi AI visibili notivisibleNo
Cancella una regione selezionataeraseNo
Rimuovi metadati AImetadataNo
Identifica la provenienza video supportatavideo identifyNo
Rimuovi marchi visibili e metadati AI dai videovideo allNo
Rimuovi metadati AI dai videovideo metadataNo
Rimuovi un marchio AI visibile registrato da un videovideo visibleNo
Elabora una directory di videovideo batchDipende dalla modalità
Rimuovi SynthID video con il profilo VAE certificatovideo invisibleConsigliata
Rigenera un'immagine per disturbare le filigrane invisibiliinvisibleRichiesta (CUDA)
Esegui rimozione visibile, invisibile e dei metadatiallConsigliata
Elabora una directorybatchDipende dalla modalità

Modalità di installazione

NeedInstall
Ispezione e rimozione dei metadatiremove-ai-watermarks
Rilevamento e rimozione visibiliremove-ai-watermarks[visible]
Elaborazione video visibileremove-ai-watermarks[video]
Rimozione SynthID videoremove-ai-watermarks[video,diffusion]
Rilevamento DWT-DCT senza Torchremove-ai-watermarks[detect]
Rimozione invisibile delle immagini (richiede CUDA)remove-ai-watermarks[qwen-zimage]
Tutte le funzionalità di produzioneremove-ai-watermarks[all]

Gli extra di livello inferiore e specializzati includono pixels, heif, trustmark, migan, lama e diffusion. La guida all'installazione ne documenta la composizione esatta delle dipendenze e i requisiti dei modelli.

Avvio rapido

Installa la CLI predefinita incentrata sui metadati:

uv tool install remove-ai-watermarks

Ispeziona un'immagine:

remove-ai-watermarks identify image.png

Per la rimozione delle filigrane visibili, installa le dipendenze pixel:

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

Quindi rimuovi un marchio visibile noto e i metadati AI:

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

Rimuovi i metadati senza eseguire inpainting visibile o diffusion:

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:

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 i flussi video o audio. A differenza del comando per le immagini 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. 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:

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 e stabile quando presente e rimuove sempre i metadati AI verificati. Se non viene trovato nessuno dei due segnali, scrive comunque un passthrough nello stesso contenitore, così i chiamanti applicativi ottengono un contratto di output prevedibile. La rimozione proprietaria dell'invisibile nei video è esclusa per impostazione predefinita. --invisible aderisce al profilo video SynthID lossy e certificato oracle.

Elabora una directory con lo stesso contratto:

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

Rimuovi un marchio video visibile supportato:

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 fill OpenCV, MI-GAN o LaMa della rimozione sulle immagini. L'audio viene copiato senza re-encoding e può raggiungere la sua fine naturale; il flusso video viene transcodificato perché i suoi pixel cambiano. Per impostazione predefinita, un passaggio di optical flow protetto allinea temporalmente il fill accettato precedente e lo fonde solo quando il contesto sorgente vicino è concordante; usa --no-temporal-consistency per disabilitarlo. L'encoder preserva il campionamento cromatico supportato della sorgente a 8 bit, i tag colore e la timescale delle tracce MP4/MOV invece di affidarsi ai default impliciti raw-BGR di ffmpeg. Gli intervalli di frame variabili vengono preservati tramite un ponte NUT in memoria con timestamp, invece di essere appiattiti al frame rate medio. I timestamp di inizio sorgente non nulli vengono mantenuti insieme all'offset audio copiato. Il --mark auto predefinito analizza tutti i provider in un'unica passata di decodifica e seleziona la prima corrispondenza stabile nell'ordine di specificità mostrato sotto. Passa un marchio esplicito per limitare il rilevamento a un solo provider. Sora copre la mascotte mobile 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 copre l'etichetta composita MINIMAX | hailuo AI e Kling copre l'etichetta KLING AI in basso a destra con il suo suffisso di versione. Una codifica completata viene pubblicata atomicamente. Non viene scritto alcun output quando non viene trovato un marchio stabile. Gli input HDR, PQ/HLG e maggiori di 8 bit vengono rifiutati prima della codifica, invece di essere ridotti silenziosamente attraverso il confine BGR a 8 bit di OpenCV.

Rimuovi SynthID video:

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

Questo percorso rigenera l'intera sequenza con un unico campo di rumore latente condiviso nel tempo, copia l'audio completo, rimuove i metadati di origine e pubblica atomicamente la codifica completata. Il profilo predefinito noise_std=0.15 ha superato sia la calibrazione a due portanti sia un controllo oracle pubblico completo su otto secondi di Veo. Google non pubblica un decoder locale, quindi un nuovo controllo del provider rimane utile per file particolarmente importanti o dopo modifiche al provider, ma non è uno stato di risultato del prodotto.

Per la rimozione delle filigrane invisibili, installa l'extra qwen-zimage. È richiesta una GPU NVIDIA: entrambi i profili sono solo CUDA e non esiste un fallback CPU o MPS.

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

Se i rilevatori locali non possono confermare una filigrana invisibile ma sai che l'immagine proviene da un generatore AI, aggiungi --force:

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

Consulta la guida all'installazione per Homebrew, uv, funzionalità opzionali e configurazione di sviluppo.

Esempi

Marchio Gemini visibile

BeforeAfter
Immagine con una filigrana Gemini visibileImmagine dopo la rimozione della filigrana visibile

Rimozione invisibile di alta qualità

qwen-zimage è il profilo predefinito: una passata Qwen-Image-2512 Lightning sotto Canny ControlNet, seguita dalla riparazione Z-Image con maschera SAM di qualsiasi volto rilevato. L'alternativa, sdxl-zimage, sostituisce la fase globale con SDXL e mantiene la stessa fase per i volti. Entrambi sono solo CUDA.

uv tool install --force "remove-ai-watermarks[qwen-zimage]"
remove-ai-watermarks invisible image.png -o clean.png --force
Esempio OpenAI primaEsempio OpenAI dopo
Griglia di ritratti OpenAI prima di qwen-zimageGriglia di ritratti OpenAI dopo qwen-zimage
Esempio Gemini primaEsempio Gemini dopo
Insegna Gemini prima di qwen-zimageInsegna Gemini dopo qwen-zimage

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

Ricette comuni

Rimuovi ogni marchio visibile rilevato

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

Il --mark auto predefinito controlla tutti i marchi visibili registrati e rimuove ogni corrispondenza. Se il marchio è visibile per te ma il rilevatore non lo rileva, seleziona esplicitamente la sua regione:

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

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

Usa un backend di fill appreso

L'extra visible usa l'inpainting OpenCV quando non è installato un backend appreso. Per sfondi più difficili, gli extra con backend appreso includono automaticamente le stesse dipendenze pixel:

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

Riduci l'uso di memoria CUDA

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

Il CPU offload riduce la pressione sulla memoria CUDA spostando i componenti del modello tra CPU e GPU, a scapito della velocità.

Elabora una directory

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

Cosa lo strumento può riconoscere

Il supporto per i marchi visibili include:

  • lo scintillio di Google Gemini e Nano Banana;
  • le etichette Doubao, Jimeng, Qwen, Kling, Yuanbao, Baidu, LibLibAI e RunningHub;
  • una variante calibrata dell'etichetta Samsung Galaxy AI.

L'ispezione di metadati e provenienza copre C2PA, EXIF, XMP, IPTC, parametri comuni dei generatori, etichette AIGC cinesi TC260 e diversi segnali specifici dei fornitori. Decoder opzionali aggiungono il supporto per le filigrane DWT-DCT aperte e Adobe TrustMark.

La matrice di supporto esatta, inclusi importanti limiti di locale e di rilevamento, si trova in segnali supportati.

Come funziona

La rimozione visibile segue tre passaggi:

  1. Rileva un marchio registrato nella sua area prevista.
  2. Costruisci una maschera attorno al marchio.
  3. Riempi solo la regione mascherata con OpenCV, MI-GAN o LaMa.

La rimozione dei metadati usa una eliminazione consapevole del formato. La rimozione dei metadati JPEG preserva la scansione dell'immagine codificata invece di ricomprimerla. I valori nativi TC260 di MP4/MOV vengono azzerati senza modificare le dimensioni dei box o gli offset multimediali. Gli altri contenitori supportati usano il loro percorso di metadati corrispondente.

La rimozione invisibile è diversa. Rigenera l'immagine tramite 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.

Vedi segnali supportati e limitazioni note per il confine tecnico completo.

API Python

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

import remove_ai_watermarks as raiw

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

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 di file o un array NumPy BGR. Per gli input basati su 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 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 rimozione visibile, rilevamento, cancellazione di regioni e rimozione invisibile.

Limitazioni importanti

  • Un segnale locale assente 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 fill selezionato.
  • La rimozione invisibile modifica l'intera immagine e può alterare volti, testo o dettagli fini.
  • La rimozione visibile video riconosce il wordmark mobile Sora 2, l'attuale diamante Veo più il testo legacy Veo, l'etichetta AI in un riquadro di Seedance e le etichette fisse Dola, Hailuo e Kling. Non riconosce il vecchio vortice d'angolo di Sora Turbo o layout non registrati di questi provider. Il backend OpenCV classico 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 oracle, ma nessun decoder locale pubblico può certificare un output arbitrario in fase di esecuzione. Ricontrolla gli output particolarmente importanti dopo modifiche al provider.
  • La rimozione delle filigrane invisibili richiede CUDA. Entrambi 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 identify funzionano comunque ovunque.
  • I sistemi di filigrana dei provider possono cambiare. Valida gli output importanti con il verificatore del provider stesso, quando disponibile.

Il comando video invisible incluso usa il profilo certificato noise_std=0.15. L'harness di ricerca companion scripts/video_synthid_sweep.py costruisce un controllo re-encodato corrispondente più candidati rigenerati con VAE e lascia vuoto il verdetto del verificatore:

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

Per valutare quanto è costato realmente 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.

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

Il controllo deve essere ancora 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 appaiati erano positivi nel verificatore SynthID integrato di Gemini; il candidato più forte era negativo su entrambe le portanti, mentre un candidato più debole era negativo su una. Un successivo follow-up adversarial che chiedeva al Gemini ordinario di reinterpretare il risultato 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 pubblico di otto secondi di Veo ha rilevato che 0.10 veniva ancora rilevato e 0.15 no, quindi 0.15 è ora il default certificato. Gli hash riproducibili e i verdetti si trovano in data/evaluations/video-synthid-oracle.csv.

Documentazione

Inizia con l'indice della documentazione.

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:

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

Consulta interni dei moduli prima di modificare un sottosistema con invarianti documentate.

Licenza

Apache 2.0. Copyright 2025-2026 wiltodelta.

Categorie