Torna agli aggiornamenti
New releaseSep 4, 2026

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.

Condividi

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.

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

Scegli cosa vuoi fare

ObiettivoComandoGPU
Trova segnali di provenienza e filigraneidentifyNo
Classifica una fotografia dai pixel (opt-in, non provenienza)classifyNo
Verifica SynthID OpenAI supportato dai pixel con l'API remota ufficialeverify-openai-synthidNo
Rimuovi segni visibili AI notivisibleNo
Cancella una regione che selezionieraseNo
Rimuovi metadati AImetadataNo
Identifica la provenienza video supportatavideo identifyNo
Rimuovi segni visibili e metadati AI dal videovideo allNo
Rimuovi metadati AI dal videovideo metadataNo
Rimuovi un segno visibile AI registrato dal 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 metadatiallConsigliata
Elabora una directorybatchDipende 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 metadatiremove-ai-watermarks
Classificazione AI-vs-fotocamera delle fotografieremove-ai-watermarks[classify]
Verifica remota ufficiale OpenAI SynthIDremove-ai-watermarks[verify]
Rilevamento e rimozione visibileremove-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 immagine invisibile (richiede CUDA)remove-ai-watermarks[qwen-zimage]
Ogni funzionalità di produzione disponibile sul Python attivoremove-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 |
| --- | --- |
| ![Immagine con 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` 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 |
| --- | --- |
| [![Griglia di ritratti OpenAI prima di 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 di 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 |
| --- | --- |
| [![Segno Gemini prima di qwen-zimage](https://assets.kitploit.com/production/public/readmes/7369/4affd7f27767a445db6abf741355743ba8d95108ad922c9fff045feed8492236.png)](data/synthid/originals/Gemini_Generated_Image_633uuy633uuy633u.png) | [![Segno 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 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'etichetta AI in 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 identify funzionano 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.

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.

Categorie