Remove marcas d'água de IA visíveis e invisíveis e metadados de proveniência de imagens e vídeos. Biblioteca Python e CLI para SynthID, C2PA, EXIF, IPTC, XMP e marcas comuns de IA generativa.
Remova marcas de proveniência de IA de imagens e vídeos que você mesmo gerou:
O suporte a vídeo abrange identificação de proveniência, limpeza completa de visível mais metadados, lotes de diretórios, remoção de marcas visíveis de Sora, Veo, Seedance, Doubao, Dola, Hailuo AI e Kling AI, e regeneração VAE certificada por oráculo para remoção de SynthID em vídeo.
raiw.cc executa esta biblioteca como um serviço hospedado, com a GPU incluída e nada para instalar. A remoção de marcas visíveis e metadados na saída Standard de até 12 MP é gratuita lá; resolução original acima de 12 MP e remoção de marcas d'água invisíveis são pagas.
Este projeto é para uso legal em conteúdo que você possui. Ele não tem como alvo pré-visualizações de agências de banco de imagens ou outras marcas d'água que protegem conteúdo pago de terceiros. Consulte notas de escopo, segurança e legais.
| Objetivo | Comando | GPU |
|---|---|---|
| Encontrar sinais de proveniência e marcas d'água | identify | Não |
| Classificar uma fotografia a partir de pixels (opt-in, não proveniência) | classify | Não |
| Verificar SynthID suportado da OpenAI a partir de pixels com a API remota oficial | verify-openai-synthid | Não |
| Remover marcas visíveis conhecidas de IA | visible | Não |
| Apagar uma região que você selecionar | erase | Não |
| Remover metadados de IA | metadata | Não |
| Identificar proveniência de vídeo suportada | video identify | Não |
| Remover marcas visíveis e metadados de IA de vídeo | video all | Não |
| Remover metadados de IA de vídeo | video metadata | Não |
| Remover uma marca visível registrada de IA de vídeo | video visible | Não |
| Processar um diretório de vídeos | video batch | Depende do modo |
| Remover SynthID de vídeo com o perfil VAE certificado | video invisible | Recomendado |
| Regenerar uma imagem para interromper marcas d'água invisíveis | invisible | Necessário (CUDA) |
| Executar remoção visível, invisível e de metadados | all | Recomendado |
| Processar um diretório | batch | Depende do modo |
Declarações InvisMark do Microsoft Paint e Photos são roteadas automaticamente para
regeneração de pixels. O comando all remove tanto a marca d'água de pixels oculta quanto
seu manifesto C2PA vinculado; a remoção apenas de metadados remove somente o manifesto.
| Necessidade | Instalar |
|---|---|
| Inspeção e remoção de metadados | remove-ai-watermarks |
| Classificação de fotografia IA-versus-câmera | remove-ai-watermarks[classify] |
| Verificação remota oficial de SynthID da OpenAI | remove-ai-watermarks[verify] |
| Detecção e remoção visível | remove-ai-watermarks[visible] |
| Processamento de vídeo visível | remove-ai-watermarks[video] |
| Remoção de SynthID de vídeo | remove-ai-watermarks[video,diffusion] |
| Detecção DWT-DCT sem Torch | remove-ai-watermarks[detect] |
| Remoção de imagem invisível (requer CUDA) | remove-ai-watermarks[qwen-zimage] |
| Todos os recursos de produção disponíveis no Python ativo | remove-ai-watermarks[all] |
Extras de nível inferior e especializados incluem pixels, heif, trustmark,
migan, lama e diffusion. O
guia de instalação documenta sua composição exata
de dependências, compatibilidade com Python e requisitos de modelo.
Instale a CLI padrão focada em metadados:```bash uv tool install remove-ai-watermarks
Inspecione uma imagem:```bash
remove-ai-watermarks identify image.png
Para classificar uma fotografia a partir de pixels (IA versus câmera, provedor opcional),
instale o extra e chame classify. identify nunca o inicia:```bash
uv tool install --force "remove-ai-watermarks[classify]"
remove-ai-watermarks classify image.png
Guia: [classificação de pixels de fotos](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/photo-classify.md).
A proveniência assinada é o caminho suportado para o SynthID e o `identify` a lê.
Não há detector local de pixels SynthID no pacote. A pesquisa sobre um
especialista em rede periódica está em `scripts/synthid_runtime/` e
[synthid-detector-research.md](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/synthid-detector-research.md).
Para imagens OpenAI suportadas, o verificador oficial opcional fornece um
veredito de marca d'água de pixels:```bash
uv tool install --force "remove-ai-watermarks[verify]"
remove-ai-watermarks verify-openai-synthid image.png --acknowledge-upload
O comando remove os metadados de proveniência de IA de uma cópia temporária, verifica que
os pixels decodificados permanecem inalterados, envia apenas essa cópia para a OpenAI e consome
somente a resposta independente do SynthID. Ele nunca é executado implicitamente a partir do identify.
Uma chave de API, acesso ao endpoint e confirmação explícita de upload são necessários.
Para remoção de marca d'água visível, instale as dependências de pixels:```bash uv tool install --force "remove-ai-watermarks[visible]"
Então remova uma marca visível conhecida e os metadados de IA:```bash
remove-ai-watermarks visible image.png -o clean.png
Strip metadata without running visible inpainting or diffusion:```bash remove-ai-watermarks metadata image.png --remove -o clean.png
Sem `-o`, este comando sobrescreve a origem no lugar.
Inspecione ou remova metadados de IA de um arquivo MP4, MOV, M4V, WebM, MKV, AVI ou FLV:```bash
remove-ai-watermarks video metadata input.mp4 --check
remove-ai-watermarks video metadata input.mp4 --remove -o clean.mp4
O comando video metadata não faz transcodificação de fluxos de vídeo ou áudio. Diferente
do comando de imagem acima, quando -o é omitido, ele grava <source>_clean e
preserva o original. A inspeção de MP4 e MOV
inclui a tag nativa TC260 AIGC em
moov.udta.meta.keys/ilst, incluindo um moov colocado após a carga útil de mídia,
além das variantes meta no formato QuickTime que a exportação para iOS do Doubao grava (uma caixa
meta simples como filho direto de moov, e uma lista de metadados hdlr=mdir sem chave).
A inspeção de MKV e WebM lê o posicionamento normativo
Segment.Tags.Tag.SimpleTag. AVI usa LIST/INFO/AIGC, enquanto FLV
usa script.onMetaData.AIGC. Os formatos não-ISOBMFF são remuxados com cópia de
fluxo para remoção.
Use o caminho de vídeo orientado a produto para identificar ou limpar um arquivo:```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` remove uma marca visível registrada estável quando presente e sempre
remove metadados de IA verificados. Se nenhum dos dois sinais for encontrado, ele ainda grava uma
passagem no mesmo contêiner, para que os chamadores da aplicação obtenham um contrato de saída previsível.
A remoção proprietária de vídeo invisível é excluída por padrão.
`--invisible` opta pelo perfil SynthID de vídeo com perdas e certificado por oráculo.
Processe um diretório com o mesmo contrato:```bash
remove-ai-watermarks video batch ./videos --mode all
Remover uma marca de vídeo visível suportada:```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
Este caminho verifica a sequência completa antes de alterar os pixels. Ele aceita apenas uma
marca que se repete numa posição estável entre fotogramas adjacentes e, em seguida, reutiliza
os mesmos backends de preenchimento OpenCV, MI-GAN ou LaMa da remoção de imagens. O áudio é copiado
sem re-encoding e pode atingir o seu fim natural; o fluxo de vídeo
é transcodificado porque os seus pixels mudam. Por predefinição, uma passagem protegida de optical flow
alinha por movimento o preenchimento aceite anterior e mistura-o apenas quando o
contexto de origem próximo concorda; use `--no-temporal-consistency` para desativar isso.
O codificador preserva a amostragem de croma de origem suportada de
8 bits, as etiquetas de cor e a timescale das faixas MP4/MOV
em vez de depender dos padrões implícitos raw-BGR do ffmpeg. Os intervalos de fotogramas variáveis são
preservados através de uma ponte NUT em memória com timestamps, em vez de serem achatados
para a taxa de fotogramas média. Os timestamps de início de origem diferentes de zero são mantidos
juntamente com o offset de áudio copiado. O `--mark auto` predefinido
verifica todos os fornecedores numa única passagem de descodificação e seleciona a primeira correspondência estável na
ordem de especificidade mostrada abaixo. Passe uma marca explícita para restringir a deteção
a um fornecedor.
Sora cobre o mascote Sora 2 em movimento e a wordmark. Veo cobre tanto o atual
losango de quatro pontos como o texto legado `Veo`. Seedance cobre o rótulo fixo `AI` emoldurado,
Dola cobre o texto fixo `Dola AI`, Hailuo AI cobre o rótulo composto
`MINIMAX | hailuo AI`, e Kling AI cobre o rótulo `KLING AI` no canto inferior direito
com o seu sufixo de versão. Uma codificação concluída é publicada atomicamente. Nenhuma
saída é escrita quando nenhuma marca estável é encontrada.
Entradas HDR, PQ/HLG e com mais de 8 bits são rejeitadas antes da codificação, em vez de
serem silenciosamente reduzidas através do limite BGR de 8 bits do OpenCV.
Remover SynthID de vídeo:```bash
uv tool install --force "remove-ai-watermarks[video,diffusion]"
remove-ai-watermarks video invisible input.mp4 -o clean.mp4
Este caminho regenera a sequência completa com um único campo de ruído latente compartilhado
ao longo do tempo, copia o áudio completo, remove os metadados de origem e publica
a codificação concluída atomicamente. O perfil padrão noise_std=0.15 passou tanto
na calibração de duas portadoras quanto em uma verificação completa do oráculo público Veo de oito segundos.
O Google não publica um decodificador local, portanto uma nova verificação do provedor
continua útil para arquivos excepcionalmente importantes ou após alterações no provedor, mas
não é um estado de resultado do produto.
Para remoção de marca d'água invisível, instale o extra qwen-zimage. Uma GPU NVIDIA
é necessária: todos os perfis são exclusivos para CUDA, e não há fallback para CPU ou MPS.```bash
uv tool install --force "remove-ai-watermarks[qwen-zimage]"
remove-ai-watermarks invisible image.png -o clean.png
Se os detectores locais não conseguirem confirmar uma marca d'água invisível, mas você souber que a
imagem veio de um gerador de IA, adicione `--force`:```bash
remove-ai-watermarks invisible image.png -o clean.png --force
Imagens com muito texto podem optar pelo pós-processamento experimental de texto verificado.
Ele aceita strings revisadas manualmente e caixas de linha ou um manifesto somente de geometria verificado por operador; nunca trata a saída bruta de OCR como verdade absoluta nem é executado 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
Consulte o [guia de CLI](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/cli.md#restore-operator-verified-text) para o esquema
do manifesto, restrições de compatibilidade e ressalvas do oráculo.
Consulte o [guia de instalação](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/installation.md) para Homebrew, uv, recursos
opcionais e configuração de desenvolvimento.
## Exemplos
### Marca d'água Gemini visível
| Antes | Depois |
| --- | --- |
|  |  |
O raster `after` é gerado a partir do raster `before` rastreado pelo caminho público:```bash
uv run remove-ai-watermarks visible demo_banana_before.png \
--backend cv2 -o demo_banana_after.png
qwen-zimage é o perfil padrão: uma passagem Qwen-Image-2512 Lightning sob Canny
ControlNet, seguida de reparo Z-Image mascarado por SAM de qualquer rosto detectado. A
alternativa, sdxl-zimage, troca o estágio global por SDXL e mantém o mesmo estágio
de rosto. Um terceiro perfil, chroma-zimage, usa a passagem global Chroma1 sob Apache-2.0
com seus próprios pisos planos de fornecedor; consulte docs/chroma1-engine-research.md para a
calibração. --pipeline auto escolhe chroma-zimage para procedência OpenAI e Microsoft
e qwen-zimage caso contrário. Todos são apenas CUDA.```bash
uv tool install --force "remove-ai-watermarks[qwen-zimage]"
remove-ai-watermarks invisible image.png -o clean.png --force
| Exemplo OpenAI antes | Exemplo OpenAI depois |
| --- | --- |
| [](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) |
| Exemplo Gemini antes | Exemplo Gemini depois |
| --- | --- |
| [](data/synthid/originals/Gemini_Generated_Image_633uuy633uuy633u.png) | [](docs/images/qwen-zimage/Gemini/Gemini_Generated_Image_633uuy633uuy633u_full_clean.png) |
Esses arquivos de saída exatos foram verificados com os verificadores do provedor correspondente. Esse
resultado se aplica a esses arquivos, não a cada semente, imagem ou versão futura de
marca d'água.
## Receitas comuns
### Remover toda marca visível detectada```bash
remove-ai-watermarks visible image.png -o clean.png
O padrão --mark auto verifica todas as marcas visíveis registadas e remove cada
correspondência. Se a marca for visível para si, mas o detetor não a detetar, selecione a sua
região explicitamente:```bash
remove-ai-watermarks erase image.png
--region 1640,1930,400,100
-o clean.png
`--region` usa `x,y,width,height` e pode ser repetido.
### Usar um backend de preenchimento aprendido
O extra `visible` usa inpainting do OpenCV quando nenhum backend aprendido está instalado.
Para fundos mais difíceis, os extras do backend aprendido incluem as mesmas
dependências de pixel automaticamente:```bash
uv tool install --force "remove-ai-watermarks[migan]"
remove-ai-watermarks visible image.png -o clean.png --backend migan
Aqui está a tradução do conteúdo do Kitploit:
## Instalação
### Requisitos
- Python 3.8 ou superior
- pip (gerenciador de pacotes do Python)
- Acesso à internet para baixar dependências
### Passos de Instalação
1. Clone o repositório:
```bash
git clone https://github.com/example/tool.git
cd tool
Instale as dependências:
pip install -r requirements.txt
Execute a ferramenta:
python main.py --help
Para escanear um único alvo:
python main.py -t https://example.com
Para escanear múltiplos alvos a partir de um arquivo:
python main.py -l targets.txt
| Opção | Descrição |
|---|---|
-t, --target | Especifica o URL ou IP do alvo |
-l, --list | Arquivo contendo uma lista de alvos |
-o, --output | Arquivo de saída para salvar os resultados |
-v, --verbose | Ativa a saída detalhada |
-h, --help | Mostra a mensagem de ajuda |
[+] Iniciando varredura em https://example.com
[+] Porta 80 aberta
[+] Porta 443 aberta
[+] Servidor web detectado: nginx/1.18.0
[+] Diretório /admin encontrado
[+] Varredura concluída em 12.5 segundos
A ferramenta pode ser configurada através do arquivo config.yaml:
# Configurações de varredura
scan:
timeout: 10
threads: 50
user_agent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
# Configurações de relatório
report:
format: "html"
output_dir: "./reports"
Se você encontrar um erro de módulo ausente, certifique-se de que todas as dependências estão instaladas:
pip install -r requirements.txt
Em sistemas Linux/macOS, você pode precisar usar sudo ou ajustar as permissões:
chmod +x main.py
Aceitamos contribuições! Por favor, siga estas etapas:
git checkout -b feature/nova-funcionalidade)git commit -am 'Adiciona nova funcionalidade')git push origin feature/nova-funcionalidade)Este projeto está licenciado sob a Licença MIT - consulte o arquivo LICENSE para obter detalhes.
Esta ferramenta é destinada apenas para fins educacionais e testes de segurança autorizados. O uso não autorizado é estritamente proibido. Os desenvolvedores não são responsáveis por qualquer uso indevido.
uv tool install --force "remove-ai-watermarks[lama]"
remove-ai-watermarks visible image.png -o clean.png --backend lama
```
### Reduzir o uso de memória CUDA```bash
remove-ai-watermarks invisible image.png -o clean.png \
--cpu-offload --force
```
CPU offload reduz a pressão sobre a memória CUDA ao mover componentes do modelo entre CPU
e GPU, ao custo da velocidade.
### Processar um diretório```bash
remove-ai-watermarks batch ./images --mode visible
remove-ai-watermarks batch ./images --mode all
```
## O que a ferramenta consegue reconhecer
O suporte a marcas visíveis inclui:
- Marca-d'água visível de brilho do Google Gemini e Nano Banana;
- Doubao, o wordmark Jimeng e a pílula `AI生成` no canto superior esquerdo, Qwen, Kling AI,
Yuanbao, Baidu, LiblibAI e rótulos RunningHub;
- uma variante calibrada do selo branco de IA da Microsoft no canto superior direito;
- uma variante calibrada do rótulo Samsung Galaxy AI.
A inspeção de metadados e proveniência cobre C2PA, EXIF, XMP, IPTC, parâmetros
comuns de geradores, rótulos AIGC da China TC260 e vários sinais específicos de
fornecedores. Decodificadores opcionais adicionam suporte para marcas-d'água
abertas DWT-DCT e Adobe TrustMark.
A matriz de suporte exata, incluindo limites importantes de localidade e detector, está
em [sinais suportados](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/supported-signals.md). A
[galeria de exemplos sintéticos](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/data/fixtures/visible/README.md) traz uma amostra
canônica para cada marca de imagem e vídeo registrada.
## Como funciona
A remoção visível segue três etapas:
1. Detectar uma marca registrada na sua área esperada.
2. Construir uma máscara ao redor da marca.
3. Preencher apenas a região mascarada com OpenCV, MI-GAN ou LaMa.
A remoção de metadados usa remoção ciente do formato. A remoção de metadados JPEG preserva
a varredura de imagem codificada em vez de recompactá-la. Valores TC260 nativos de MP4/MOV
são apagados sem alterar tamanhos de caixa ou offsets de mídia. Outros contêineres
suportados usam o caminho de metadados correspondente.
A remoção invisível é diferente. Ela regenera a imagem por meio de um pipeline
de difusão para interromper marcas-d'água nos domínios de pixel e frequência. Isso altera a
imagem e não pode garantir que um verificador proprietário rejeitará cada
saída.
Consulte [sinais suportados](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/supported-signals.md) e
[limitações conhecidas](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/known-limitations.md) para o limite técnico completo.
## API Python
A API de remoção visível requer `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")
```
A API de alto nível aceita um caminho de arquivo ou um array NumPy BGR. Para entradas de caminho, ela
também lê metadados de proveniência, preserva o canal alfa e pode remover metadados de IA do
resultado gravado.
Consulte o [guia da API Python](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/python-api.md) para remoção visível, o pipeline completo
`remove_all` e `remove_batch`, inspeção de proveniência, remoção de metadados
e uso de difusão.
## ComfyUI
O pacote separado
[ComfyUI Remove AI Watermarks](https://github.com/wiltodelta/ComfyUI-remove-ai-watermarks)
fornece nós para remoção visível, detecção, apagamento de regiões e
remoção invisível.
## Limitações importantes
- Um sinal local ausente significa desconhecido, não limpo. Marcas d'água de pixels
proprietárias podem permanecer após a remoção dos metadados.
- A remoção visível reconstrói uma pequena região. Os resultados dependem do fundo
e do backend de preenchimento selecionado.
- A remoção invisível altera toda a imagem e pode modificar rostos, textos ou detalhes
finos.
- A remoção visível em vídeo reconhece a marca móvel Sora 2, o losango atual do Veo
mais o texto legado `Veo`, o rótulo `AI` em caixa do Seedance e os rótulos fixos
Doubao, Dola, Hailuo AI e Kling AI. Ela não reconhece o redemoinho de canto do Sora Turbo
mais antigo nem layouts não registrados desses provedores.
O backend clássico OpenCV pode borrar fundos estruturados; use MI-GAN ou
LaMa quando a qualidade da recuperação for importante.
- A regeneração do SynthID em vídeo altera a resolução, a taxa de quadros e o detalhe da imagem.
O perfil incluído é certificado pelo oráculo, mas nenhum decodificador local público pode
certificar uma saída arbitrária em tempo de execução. Revalide saídas excepcionalmente importantes
após mudanças no provedor.
- A remoção de marcas d'água invisíveis requer CUDA. Todos os perfis recusam qualquer outro
dispositivo na construção, em vez de recorrer a um que não possa executá-los.
A remoção visível, a remoção de metadados e o `identify` ainda funcionam em qualquer lugar.
- Os sistemas de marcas d'água dos provedores podem mudar. Valide saídas importantes com o
verificador do próprio provedor quando um estiver disponível.
O comando `video invisible` incluído usa o perfil certificado `noise_std=0.15`.
O harness de pesquisa complementar `scripts/video_synthid_sweep.py` constrói
um controle de re-encode correspondente mais candidatos regenerados por VAE e deixa o
veredito do verificador em branco:```bash
uv run --extra video --extra diffusion python scripts/video_synthid_sweep.py input.mp4 -o sweep/
```
Para pontuar o que uma saída realmente custou, use `scripts/video_fidelity_probe.py`:
o PSNR do próprio mecanismo é medido antes do redimensionamento e da codificação, então apenas a
sonda vê a imagem entregue.```bash
uv run --extra video python scripts/video_fidelity_probe.py input.mp4 input_clean.mp4
```
O controlo tem de continuar a ser positivo para SynthID antes de um candidato negativo poder
contar como evidência de remoção. Na calibração de dois clipes de 2026-07-29, ambos os
controlos correspondentes foram positivos no verificador SynthID integrado do Gemini; o candidato
mais forte foi negativo em ambos os suportes, enquanto um candidato mais fraco foi
negativo num deles. Um acompanhamento adversarial posterior que pediu ao Gemini normal para
reinterpretar o resultado do pixel devolveu `UNAVAILABLE`; esse acompanhamento não foi uma
nova execução do verificador e não invalida os veredictos integrados. Uma verificação
de clipe completo de 2026-07-31 numa amostra pública de oito segundos do Veo encontrou `0.10` ainda detetado
e `0.15` não detetado, pelo que `0.15` é agora o padrão certificado. Os
hashes reproduzíveis e veredictos para essa verificação de clipe completo — um suporte, duas
linhas — estão em `data/evaluations/video-synthid-oracle.csv`. A calibração
anterior de dois clipes é apenas narrativa: os seus veredictos não foram registados num
manifesto rastreado, pelo que trate o padrão certificado como assente nas linhas de 2026-07-31.
## Documentação
Comece pelo [índice de documentação](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/index.md).
- [Instalação](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/installation.md)
- [Guia da 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)
- [Sinais suportados](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/supported-signals.md)
- [Limitações conhecidas](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/known-limitations.md)
- [Âmbito, segurança e notas legais](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/legal-and-safety.md)
- [Internos dos módulos](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/module-internals.md)
- [Lançamento e distribuição](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/release-and-distribution.md)
As notas de investigação e experiências históricas estão listadas separadamente no
[índice de documentação](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/index.md). Explicam decisões passadas, mas não
definem a API pública atual.
## Contribuir
Instale o ambiente de desenvolvimento e execute o gate do projeto:```bash
uv sync --frozen --extra dev
bash maintain.sh
```
Consulte os [detalhes internos do módulo](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/module-internals.md) antes de alterar um subsistema
com invariantes documentados.
## Licença
[Apache 2.0](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/LICENSE). Copyright 2025-2026 wiltodelta.