Elimina marcas de agua de IA visibles e invisibles y metadatos de procedencia de imágenes y vídeo. Biblioteca de Python y CLI para SynthID, C2PA, EXIF, IPTC, XMP y marcas comunes de IA generativa.
Elimina marcas de procedencia de IA de imágenes y videos que hayas generado tú mismo:
El soporte de video cubre la identificación de procedencia, la limpieza completa de marcas visibles más metadatos, lotes de directorios, eliminación de marcas visibles de Sora, Veo, Seedance, Doubao, Dola, Hailuo AI y Kling AI, y regeneración VAE certificada por oráculo para la eliminación de SynthID en video.
raiw.cc ejecuta esta biblioteca como un servicio alojado, con la GPU incluida y sin nada que instalar. La eliminación de marcas visibles y metadatos en salida Estándar de hasta 12 MP es gratuita allí; la resolución original superior a 12 MP y la eliminación de marcas de agua invisibles son de pago.
Este proyecto es para uso legal en contenido que posees. No está dirigido a vistas previas de agencias de stock ni a otras marcas de agua que protegen contenido de pago de terceros. Consulta las notas de alcance, seguridad y legales.
| Objetivo | Comando | GPU |
|---|---|---|
| Encontrar señales de procedencia y marcas de agua | identify | No |
| Clasificar una fotografía a partir de píxeles (opt-in, no procedencia) | classify | No |
| Verificar SynthID de OpenAI compatible desde píxeles con la API remota oficial | verify-openai-synthid | No |
| Eliminar marcas visibles de IA conocidas | visible | No |
| Borrar una región que selecciones | erase | No |
| Eliminar metadatos de IA | metadata | No |
| Identificar procedencia de video compatible | video identify | No |
| Eliminar marcas visibles y metadatos de IA de video | video all | No |
| Eliminar metadatos de IA de video | video metadata | No |
| Eliminar una marca visible de IA registrada de video | video visible | No |
| Procesar un directorio de videos | video batch | Depende del modo |
| Eliminar SynthID de video con el perfil VAE certificado | video invisible | Recomendado |
| Regenerar una imagen para alterar marcas de agua invisibles | invisible | Requerida (CUDA) |
| Ejecutar eliminación visible, invisible y de metadatos | all | Recomendado |
| Procesar un directorio | batch | Depende del modo |
Las declaraciones InvisMark de Microsoft Paint y Photos se enrutan automáticamente a
la regeneración de píxeles. El comando all elimina tanto la marca de agua de píxeles oculta como
su manifiesto C2PA vinculado; la eliminación de metadatos por sí sola elimina solo el manifiesto.
| Necesidad | Instalar |
|---|---|
| Inspección y eliminación de metadatos | remove-ai-watermarks |
| Clasificación de fotografía IA-versus-cámara | remove-ai-watermarks[classify] |
| Verificación remota oficial de SynthID de OpenAI | remove-ai-watermarks[verify] |
| Detección y eliminación visible | remove-ai-watermarks[visible] |
| Procesamiento de video visible | remove-ai-watermarks[video] |
| Eliminación de SynthID en video | remove-ai-watermarks[video,diffusion] |
| Detección DWT-DCT sin Torch | remove-ai-watermarks[detect] |
| Eliminación de imagen invisible (requiere CUDA) | remove-ai-watermarks[qwen-zimage] |
| Cada función de producción disponible en el Python activo | remove-ai-watermarks[all] |
Los extras de nivel inferior y especializados incluyen pixels, heif, trustmark,
migan, lama y diffusion. La
guía de instalación documenta su composición exacta
de dependencias, compatibilidad con Python y requisitos de modelos.
Instala la CLI predeterminada centrada en metadatos:```bash uv tool install remove-ai-watermarks
Inspecta una imagen:```bash
remove-ai-watermarks identify image.png
Para clasificar una fotografía a partir de píxeles (IA frente a cámara, proveedor opcional),
instala el extra y llama a classify. identify nunca lo inicia:```bash
uv tool install --force "remove-ai-watermarks[classify]"
remove-ai-watermarks classify image.png
Guía: [clasificación de píxeles de fotos](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/photo-classify.md).
La procedencia firmada es la ruta compatible para SynthID y `identify` la lee.
No hay un detector de píxeles SynthID local en el paquete. La investigación sobre un
experto en retícula periódica está en `scripts/synthid_runtime/` y
[synthid-detector-research.md](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/synthid-detector-research.md).
Para imágenes OpenAI compatibles, el verificador oficial opcional proporciona un
veredicto de marca de agua de píxeles:```bash
uv tool install --force "remove-ai-watermarks[verify]"
remove-ai-watermarks verify-openai-synthid image.png --acknowledge-upload
El comando elimina los metadatos de procedencia de IA de una copia temporal, verifica que los píxeles decodificados no hayan cambiado, sube solo esa copia a OpenAI y consume únicamente la respuesta independiente de SynthID. Nunca se ejecuta implícitamente desde identify. Se requieren una clave de API, acceso al endpoint y confirmación explícita de la subida.
Para la eliminación de marcas de agua visibles, instala las dependencias de píxeles:```bash uv tool install --force "remove-ai-watermarks[visible]"
Entonces elimina una marca visible conocida y los metadatos de IA:```bash
remove-ai-watermarks visible image.png -o clean.png
Strip metadatos sin ejecutar inpainting o difusión visibles:```bash remove-ai-watermarks metadata image.png --remove -o clean.png
Sin `-o`, este comando sobrescribe el archivo fuente en su lugar.
Inspecciona o elimina los metadatos de IA de un archivo 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
El comando video metadata no transcodifica flujos de video o audio. A diferencia
del comando de imagen anterior, cuando se omite -o, escribe <source>_clean y
preserva el original. La inspección de MP4 y MOV
incluye la etiqueta nativa TC260 AIGC en
moov.udta.meta.keys/ilst, incluido un moov colocado después de la carga útil del medio,
además de las variantes meta de formato QuickTime que la exportación iOS de Doubao escribe (una caja
meta desnuda como hijo directo de moov, y una lista de metadatos hdlr=mdir sin clave).
La inspección de MKV y WebM lee la ubicación normativa
Segment.Tags.Tag.SimpleTag. AVI usa LIST/INFO/AIGC, mientras que FLV
usa script.onMetaData.AIGC. Los formatos no ISOBMFF se remuxean con copia de
flujo para su eliminación.
Utilice la ruta de video orientada al producto para identificar o limpiar un archivo:```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` elimina una marca visible registrada estable cuando está presente y siempre
elimina los metadatos verificados de IA. Si no se encuentra ninguna de las dos señales, igualmente escribe un
passthrough en el mismo contenedor, de modo que los llamadores de la aplicación obtienen un contrato de salida predecible.
La eliminación de video invisible propietario está excluida por defecto.
`--invisible` opta por el perfil SynthID de video con pérdida y certificado por oracle.
Procesa un directorio con el mismo contrato:```bash
remove-ai-watermarks video batch ./videos --mode all
Elimina una marca de video visible compatible:```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
Esta ruta escanea la secuencia completa antes de cambiar los píxeles. Solo acepta una
marca que se repite en una posición estable entre fotogramas adyacentes, y luego reutiliza
los mismos backends de relleno OpenCV, MI-GAN o LaMa que la eliminación de imágenes. El audio se copia
sin recodificar y se permite que llegue a su fin natural; el flujo de video
se transcodifica porque sus píxeles cambian. De forma predeterminada, una pasada de flujo óptico
con protección alinea temporalmente el relleno aceptado anterior y lo combina solo cuando el
contexto de origen cercano coincide; usa `--no-temporal-consistency` para deshabilitarlo.
El codificador conserva el muestreo de croma
de origen de 8 bits compatible, las etiquetas de color y la escala de tiempo de las pistas MP4/MOV
en lugar de depender de los valores predeterminados implícitos de BGR sin procesar de ffmpeg. Los intervalos de fotogramas
variables se conservan a través de un puente NUT en memoria con marcas de tiempo en lugar de aplanarse
a la velocidad de fotogramas promedio. Las marcas de tiempo de inicio de origen distintas de cero se conservan
junto con el desplazamiento de audio copiado. El `--mark auto` predeterminado
escanea todos los proveedores en una sola pasada de decodificación y selecciona la primera coincidencia estable en
el orden de especificidad que se muestra a continuación. Pasa una marca explícita para restringir la detección
a un solo proveedor.
Sora cubre la mascota móvil Sora 2 y la marca denominativa. Veo cubre tanto el actual
diamante de cuatro puntas como el texto heredado `Veo`. Seedance cubre la etiqueta fija `AI`
en un recuadro, Dola cubre el texto fijo `Dola AI`, Hailuo AI cubre la etiqueta compuesta
`MINIMAX | hailuo AI`, y Kling AI cubre la etiqueta `KLING AI`
en la esquina inferior derecha con su sufijo de versión. Una codificación completada se publica de forma atómica. No
se escribe ninguna salida cuando no se encuentra una marca estable.
Las entradas HDR, PQ/HLG y de más de 8 bits se rechazan antes de la codificación en lugar de
reducirse silenciosamente a través del límite BGR de 8 bits de OpenCV.
Eliminar SynthID de video:```bash
uv tool install --force "remove-ai-watermarks[video,diffusion]"
remove-ai-watermarks video invisible input.mp4 -o clean.mp4
Esta ruta regenera la secuencia completa con un único campo de ruido latente compartido
a lo largo del tiempo, copia el audio completo, elimina los metadatos de origen y publica
la codificación completada de forma atómica. El perfil predeterminado noise_std=0.15 superó tanto
la calibración de dos portadoras como una verificación completa del oráculo público de Veo de ocho segundos.
Google no publica un decodificador local, por lo que una verificación nueva del proveedor
sigue siendo útil para archivos inusualmente importantes o después de cambios de proveedor, pero
no es un estado de resultado de producto.
Para la eliminación de marcas de agua invisibles, instala el extra qwen-zimage. Se requiere una GPU NVIDIA:
todos los perfiles son solo CUDA y no existe una alternativa para CPU o MPS.```bash
uv tool install --force "remove-ai-watermarks[qwen-zimage]"
remove-ai-watermarks invisible image.png -o clean.png
Si los detectores locales no pueden confirmar una marca de agua invisible pero sabes que la
imagen proviene de un generador de IA, añade `--force`:```bash
remove-ai-watermarks invisible image.png -o clean.png --force
Las imágenes con mucho texto pueden optar por el pase posterior experimental de texto verificado.
Acepta cadenas revisadas manualmente y cuadros de línea, o un manifiesto de solo geometría verificado por un operador; nunca trata la salida OCR sin procesar como verdad absoluta ni se ejecuta automáticamente:```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 [guía de CLI](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/cli.md#restore-operator-verified-text) para conocer el esquema del manifiesto, las restricciones de compatibilidad y las advertencias sobre el oráculo.
Consulta la [guía de instalación](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/installation.md) para Homebrew, uv, funciones opcionales y configuración de desarrollo.
## Ejemplos
### Marca de agua visible de Gemini
| Antes | Después |
| --- | --- |
|  |  |
El ráster `after` se genera a partir del ráster `before` rastreado mediante la ruta pública:```bash
uv run remove-ai-watermarks visible demo_banana_before.png \
--backend cv2 -o demo_banana_after.png
qwen-zimage es el perfil predeterminado: una pasada Qwen-Image-2512 Lightning bajo
ControlNet Canny, seguida de una reparación Z-Image enmascarada por SAM de cualquier rostro detectado. La
alternativa, sdxl-zimage, intercambia la etapa global por SDXL y mantiene la misma etapa
de rostro. Un tercer perfil, chroma-zimage, utiliza la pasada global Chroma1 con licencia Apache-2.0
con sus propios suelos planos de proveedor; consulta docs/chroma1-engine-research.md para la
calibración. --pipeline auto elige chroma-zimage para procedencia de OpenAI y Microsoft
y qwen-zimage en caso contrario. Todos son solo CUDA.```bash
uv tool install --force "remove-ai-watermarks[qwen-zimage]"
remove-ai-watermarks invisible image.png -o clean.png --force
| Ejemplo de OpenAI antes | Ejemplo de OpenAI después |
| --- | --- |
| [](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) |
| Ejemplo de Gemini antes | Ejemplo de Gemini después |
| --- | --- |
| [](data/synthid/originals/Gemini_Generated_Image_633uuy633uuy633u.png) | [](docs/images/qwen-zimage/Gemini/Gemini_Generated_Image_633uuy633uuy633u_full_clean.png) |
Estos archivos de salida exactos se verificaron con los verificadores del proveedor correspondiente. Ese
resultado se aplica a estos archivos, no a cada semilla, imagen o versión futura de la
marca de agua.
## Recetas comunes
### Eliminar toda marca visible detectada```bash
remove-ai-watermarks visible image.png -o clean.png
El --mark auto predeterminado revisa todas las marcas visibles registradas y elimina cada
coincidencia. Si la marca es visible para ti pero el detector no la detecta, selecciona su
región explícitamente:```bash
remove-ai-watermarks erase image.png
--region 1640,1930,400,100
-o clean.png
`--region` usa `x,y,width,height` y puede repetirse.
### Usar un backend de relleno aprendido
El extra `visible` usa el algoritmo de inpaint de OpenCV cuando no hay un backend aprendido instalado.
Para fondos más difíciles, los extras del backend aprendido incluyen las mismas
dependencias de píxeles automáticamente:```bash
uv tool install --force "remove-ai-watermarks[migan]"
remove-ai-watermarks visible image.png -o clean.png --backend migan
Aquí tienes la traducción al español del contenido:
## Instalación
### Requisitos previos
- Python 3.8 o superior
- pip (gestor de paquetes de Python)
- Acceso a Internet para descargar dependencias
### Instalación rápida
```bash
git clone https://github.com/example/repo.git
cd repo
pip install -r requirements.txt
pip install tool-name
git clone https://github.com/example/repo.git
cd repo
python setup.py install
tool-name [opciones] <objetivo>
Escaneo básico de un host:
tool-name https://example.com
Escaneo con opciones avanzadas:
tool-name -p 8080 -t 50 https://example.com
| Opción | Descripción |
|---|---|
-h, --help | Muestra el mensaje de ayuda y sale |
-p, --port | Especifica el puerto a escanear (por defecto: 80) |
-t, --threads | Número de hilos a utilizar (por defecto: 10) |
-o, --output | Guarda la salida en un archivo |
-v, --verbose | Modo verboso (muestra información detallada) |
El archivo de configuración se encuentra en config.yaml. Puedes modificar los siguientes parámetros:
# Configuración del escáner
scanner:
timeout: 30
retries: 3
user_agent: "Mozilla/5.0"
# Configuración de la base de datos
database:
host: localhost
port: 5432
name: tool_db
Para usar la API, necesitas una clave de API. Obtén una registrándote en nuestro sitio web.
GET /api/v1/scansDevuelve una lista de todos los escaneos realizados.
Parámetros de consulta:
| Parámetro | Tipo | Descripción |
|---|---|---|
limit | entero | Número máximo de resultados (por defecto: 20) |
offset | entero | Desplazamiento para la paginación |
status | cadena | Filtrar por estado (completado, en_progreso, fallido) |
Respuesta de ejemplo:
{
"data": [
{
"id": 1,
"target": "https://example.com",
"status": "completado",
"created_at": "2023-01-15T10:30:00Z"
}
],
"total": 1
}
POST /api/v1/scansCrea un nuevo escaneo.
Cuerpo de la solicitud:
{
"target": "https://example.com",
"options": {
"port": 8080,
"threads": 50
}
}
Códigos de respuesta:
| Código | Descripción |
|---|---|
201 | Escaneo creado correctamente |
400 | Solicitud no válida |
401 | No autorizado (clave de API no válida) |
429 | Demasiadas solicitudes |
Error: Connection refused
Esto suele ocurrir cuando el servicio de destino no está disponible o el puerto está cerrado. Verifica que el objetivo sea correcto y que el puerto esté abierto.
Error: Timeout
El objetivo tardó demasiado en responder. Intenta aumentar el valor de timeout en el archivo de configuración.
Error: Permission denied
Asegúrate de tener los permisos necesarios para ejecutar el escaneo. En algunos sistemas, los escaneos de puertos requieren privilegios de administrador.
Los registros se almacenan en logs/ por defecto. Puedes cambiar la ubicación en el archivo de configuración.
¿Es legal usar esta herramienta?
Esta herramienta está diseñada únicamente para fines educativos y de pruebas de penetración autorizadas. Asegúrate de tener permiso explícito antes de escanear cualquier sistema.
¿Puedo usar esta herramienta en producción?
Sí, pero se recomienda probarla primero en un entorno de pruebas para familiarizarte con sus funciones.
¿Cómo puedo contribuir al proyecto?
Consulta nuestra guía de contribución para obtener más información.
Este proyecto está licenciado bajo la Licencia MIT. Consulta el archivo LICENSE para obtener más detalles.
uv tool install --force "remove-ai-watermarks[lama]"
remove-ai-watermarks visible image.png -o clean.png --backend lama
```
### Reducir el uso de memoria CUDA```bash
remove-ai-watermarks invisible image.png -o clean.png \
--cpu-offload --force
```
CPU offload reduce la presión sobre la memoria CUDA al mover componentes del modelo entre la CPU
y la GPU, a costa de la velocidad.
### Procesar un directorio```bash
remove-ai-watermarks batch ./images --mode visible
remove-ai-watermarks batch ./images --mode all
```
## Lo que la herramienta puede reconocer
El soporte de marcas visibles incluye:
- Marca de agua visible de destellos de Google Gemini y Nano Banana;
- Doubao, la marca denominativa de Jimeng y la píldora `AI生成` en la esquina superior izquierda, Qwen, Kling AI,
Yuanbao, Baidu, LiblibAI y etiquetas de RunningHub;
- una variante calibrada de la insignia blanca de IA de Microsoft en la esquina superior derecha;
- una variante calibrada de la etiqueta Samsung Galaxy AI.
La inspección de metadatos y procedencia cubre C2PA, EXIF, XMP, IPTC, parámetros
comunes de generadores, etiquetas AIGC de China TC260 y varias señales específicas
de proveedores. Los decodificadores opcionales añaden soporte para marcas de agua
abiertas DWT-DCT y Adobe TrustMark.
La matriz de soporte exacta, incluidos los límites importantes de configuración regional y de
detectores, se encuentra en [señales compatibles](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/supported-signals.md). La
[galería de ejemplos sintéticos](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/data/fixtures/visible/README.md) incluye una muestra
canónica para cada marca de imagen y vídeo registrada.
## Cómo funciona
La eliminación visible sigue tres pasos:
1. Detectar una marca registrada en su área esperada.
2. Construir una máscara alrededor de la marca.
3. Rellenar solo la región enmascarada con OpenCV, MI-GAN o LaMa.
La eliminación de metadatos utiliza un despojo consciente del formato. La eliminación de metadatos JPEG
preserva el escaneo de imagen codificado en lugar de recomprimirlo. Los valores TC260 nativos de MP4/MOV
se vacían sin cambiar los tamaños de caja ni los desplazamientos de medios. Otros contenedores
compatibles utilizan su ruta de metadatos correspondiente.
La eliminación invisible es diferente. Regenera la imagen a través de un
proceso de difusión para alterar las marcas de agua en el dominio de píxeles y de frecuencia. Esto cambia la
imagen y no puede garantizar que un verificador propietario rechace cada
salida.
Consulta [señales compatibles](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/supported-signals.md) y
[limitaciones conocidas](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/known-limitations.md) para conocer el límite técnico completo.
## API de Python
La API de eliminación visible requiere `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")
```
La API de alto nivel acepta una ruta de archivo o un array NumPy en BGR. Para entradas de ruta, también
lee los metadatos de procedencia, conserva el canal alfa y puede eliminar los metadatos de IA del
resultado escrito.
Consulta la [guía de la API de Python](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/python-api.md) para la eliminación visible, el pipeline
completo de `remove_all` y `remove_batch`, la inspección de procedencia, el
despojo de metadatos y el uso de difusión.
## ComfyUI
El paquete independiente
[ComfyUI Remove AI Watermarks](https://github.com/wiltodelta/ComfyUI-remove-ai-watermarks)
proporciona nodos para la eliminación visible, la detección, el borrado de regiones y la
eliminación invisible.
## Limitaciones importantes
- Una señal local ausente significa desconocido, no limpio. Las marcas de agua de píxeles
propietarias pueden permanecer después de que se hayan eliminado los metadatos.
- La eliminación visible reconstruye una región pequeña. Los resultados dependen del fondo
y del backend de relleno seleccionado.
- La eliminación invisible cambia toda la imagen y puede alterar rostros, texto o detalles
finos.
- La eliminación visible en video reconoce la marca móvil Sora 2, el diamante actual de Veo
más el texto heredado `Veo`, la etiqueta `AI` enmarcada de Seedance y las etiquetas fijas
Doubao, Dola, Hailuo AI y Kling AI. No reconoce el remolino de esquina de Sora Turbo más antiguo
ni los diseños no registrados de esos proveedores.
El backend clásico de OpenCV puede manchar fondos estructurados; usa MI-GAN o
LaMa cuando la calidad de recuperación sea importante.
- La regeneración de SynthID en video cambia la resolución, la velocidad de fotogramas y el detalle de la imagen.
El perfil incluido está certificado por el oráculo, pero ningún decodificador local público puede
certificar una salida arbitraria en tiempo de ejecución. Vuelve a verificar salidas inusualmente importantes
después de cambios en el proveedor.
- La eliminación de marcas de agua invisibles requiere CUDA. Todos los perfiles rechazan cualquier otro
dispositivo en la construcción en lugar de recurrir a uno que no pueda ejecutarlos.
La eliminación visible, el despojo de metadatos y `identify` siguen funcionando en cualquier lugar.
- Los sistemas de marcas de agua de los proveedores pueden cambiar. Valida las salidas importantes con el
verificador propio del proveedor cuando esté disponible.
El comando incluido `video invisible` usa el perfil certificado `noise_std=0.15`.
El arnés de investigación complementario `scripts/video_synthid_sweep.py` construye
un control de re-codificación emparejado más candidatos regenerados por VAE y deja el
veredicto del verificador en blanco:```bash
uv run --extra video --extra diffusion python scripts/video_synthid_sweep.py input.mp4 -o sweep/
```
Para puntuar lo que realmente costó una salida, usa `scripts/video_fidelity_probe.py`:
el PSNR propio del motor se mide antes del redimensionado y del codificado, por lo que solo la
sonda ve la imagen entregada.```bash
uv run --extra video python scripts/video_fidelity_probe.py input.mp4 input_clean.mp4
```
El control debe seguir siendo positivo en SynthID antes de que un candidato negativo pueda
contar como evidencia de eliminación. En la calibración de dos clips del 2026-07-29, ambos
controles coincidentes fueron positivos en el verificador SynthID integrado de Gemini; el candidato
más fuerte fue negativo en ambos portadores, mientras que un candidato más débil fue
negativo en uno. Un seguimiento adversarial posterior que pidió a Gemini ordinario
reinterpretar el resultado de píxeles devolvió `UNAVAILABLE`; ese seguimiento no fue una
nueva ejecución del verificador y no invalida los veredictos integrados. Una verificación
de clip completo del 2026-07-31 en una muestra pública de Veo de ocho segundos encontró que `0.10` aún se detectaba
y `0.15` no se detectaba, por lo que `0.15` es ahora el valor predeterminado certificado. Los
hashes reproducibles y veredictos para esa verificación de clip completo — un portador, dos
filas — se encuentran en `data/evaluations/video-synthid-oracle.csv`. La calibración
anterior de dos clips es solo narrativa: sus veredictos no se registraron en un
manifiesto rastreado, por lo que trate el valor predeterminado certificado como basado en las filas
del 2026-07-31.
## Documentación
Comience con el [índice de documentación](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/index.md).
- [Instalación](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/installation.md)
- [Guía de CLI](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/cli.md)
- [API de Python](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/python-api.md)
- [Señales compatibles](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/supported-signals.md)
- [Limitaciones conocidas](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/known-limitations.md)
- [Notas de alcance, seguridad y legales](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/legal-and-safety.md)
- [Internos del módulo](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/module-internals.md)
- [Publicación y distribución](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/release-and-distribution.md)
Las notas de investigación y los experimentos históricos se enumeran por separado en el
[índice de documentación](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/index.md). Explican decisiones pasadas pero no
definen la API pública actual.
## Contribuciones
Instale el entorno de desarrollo y ejecute la compuerta del proyecto:```bash
uv sync --frozen --extra dev
bash maintain.sh
```
Consulta los [internos del módulo](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/module-internals.md) antes de modificar un subsistema
con invariantes documentadas.
## Licencia
[Apache 2.0](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/LICENSE). Copyright 2025-2026 wiltodelta.