
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 las marcas de procedencia de IA de imágenes y vídeos que hayas generado tú mismo:
El soporte de vídeo cubre la identificación de procedencia, la limpieza completa visible más metadatos, lotes de directorios, eliminación de marcas visibles de Sora, Veo, Seedance, Dola, Hailuo y Kling, y regeneración VAE certificada por oráculo para la eliminación de SynthID en vídeo.
Pruébalo en línea en raiw.cc si no quieres instalar Python ni ejecutar modelos de difusión localmente.
Este proyecto es para uso lícito en contenido que te pertenece. No está dirigido a las vistas previas de agencias de stock ni a otras marcas de agua que protegen contenido de pago de terceros. Consulta alcance, seguridad y notas legales.
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 y los requisitos de modelos.
Instala la CLI predeterminada centrada en metadatos:
uv tool install remove-ai-watermarks
Inspecciona una imagen:
remove-ai-watermarks identify image.png
Para eliminar marcas de agua visibles, instala las dependencias de píxeles:
uv tool install --force "remove-ai-watermarks[visible]"
Después elimina una marca visible conocida y los metadatos de IA:
remove-ai-watermarks visible image.png -o clean.png
Elimina metadatos sin ejecutar inpainting visible ni difusión:
remove-ai-watermarks metadata image.png --remove -o clean.png
Sin -o, este comando sobrescribe el archivo de origen en el mismo lugar.
Inspecciona o elimina metadatos de IA de un archivo 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
El comando video metadata no transcodifica las pistas de vídeo ni de audio. A diferencia del comando de imagen anterior, cuando se omite -o escribe <source>_clean y conserva el original. La inspección de MP4 y MOV incluye la etiqueta nativa TC260 AIGC en moov.udta.meta.keys/ilst, incluido un moov situado después de la carga útil de medios. 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 la eliminación.
Usa la ruta de vídeo orientada al producto para identificar o limpiar un archivo:
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 de IA verificados. Si no se encuentra ninguna de las dos señales, aun así escribe un passthrough del mismo contenedor, de modo que los llamadores de aplicaciones obtienen un contrato de salida predecible. La eliminación invisible propietaria de vídeo queda excluida de forma predeterminada. --invisible opta por el perfil SynthID de vídeo con pérdida certificado por oráculo.
Procesa un directorio con el mismo contrato:
remove-ai-watermarks video batch ./videos --mode all
Elimina una marca visible de vídeo compatible:
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 le permite llegar a su fin natural; la pista de vídeo se transcodifica porque sus píxeles cambian. De forma predeterminada, una pasada de flujo óptico con protección alinea el relleno aceptado anterior y lo combina solo cuando el contexto de origen cercano coincide; usa --no-temporal-consistency para desactivarlo. 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 raw-BGR de ffmpeg. Los intervalos de fotogramas variables se conservan mediante un puente NUT en memoria con marcas de tiempo en lugar de aplanarse a la velocidad de fotogramas media. 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 diamante actual de cuatro puntas como el texto Veo heredado. Seedance cubre la etiqueta fija AI en recuadro, Dola cubre el texto fijo Dola AI, Hailuo cubre la etiqueta compuesta MINIMAX | hailuo AI, y Kling 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 ninguna 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.
Elimina SynthID de vídeo:
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 en el 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 comprobación completa de oráculo público de ocho segundos de Veo. Google no publica un decodificador local, por lo que una nueva comprobación del proveedor sigue siendo útil para archivos inusualmente importantes o después de cambios del proveedor, pero no es un estado de resultado de producto.
Para eliminar marcas de agua invisibles, instala el extra qwen-zimage. Se requiere una GPU NVIDIA: ambos perfiles son solo CUDA y no hay alternativa de CPU ni MPS.
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:
remove-ai-watermarks invisible image.png -o clean.png --force
Consulta la guía de instalación para la configuración con Homebrew, uv, funciones opcionales y desarrollo.
| Antes | Después |
|---|---|
![]() | ![]() |
qwen-zimage es el perfil predeterminado: una pasada de Qwen-Image-2512 Lightning bajo Canny ControlNet, 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. Ambos son solo CUDA.
uv tool install --force "remove-ai-watermarks[qwen-zimage]"
remove-ai-watermarks invisible image.png -o clean.png --force
Estos archivos de salida exactos se comprobaron con los verificadores de los proveedores correspondientes. Ese resultado se aplica a estos archivos, no a cada semilla, imagen o versión futura de marca de agua.
remove-ai-watermarks visible image.png -o clean.png
El --mark auto predeterminado comprueba todas las marcas visibles registradas y elimina todas las coincidencias. Si la marca es visible para ti pero el detector no la detecta, selecciona su región explícitamente:
remove-ai-watermarks erase image.png \
--region 1640,1930,400,100 \
-o clean.png
--region usa x,y,width,height y se puede repetir.
El extra visible usa inpainting de OpenCV cuando no hay instalado un backend aprendido. Para fondos más difíciles, los extras de backend aprendido incluyen las mismas dependencias de píxeles automáticamente:
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
remove-ai-watermarks invisible image.png -o clean.png \
--cpu-offload --force
La descarga a CPU reduce la presión de la memoria CUDA al mover componentes del modelo entre la CPU y la GPU, a costa de la velocidad.
remove-ai-watermarks batch ./images --mode visible
remove-ai-watermarks batch ./images --mode all
El soporte de marcas visibles incluye:
La inspección de metadatos y procedencia cubre C2PA, EXIF, XMP, IPTC, parámetros comunes de generador, etiquetas chinas TC260 AIGC y varias señales específicas de proveedores. Los decodificadores opcionales añaden soporte para marcas de agua DWT-DCT abiertas 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.
La eliminación visible sigue tres pasos:
La eliminación de metadatos usa un borrado consciente del formato. La eliminación de metadatos JPEG conserva el escaneo de imagen codificado en lugar de recomprimirlo. Los valores nativos TC260 de MP4/MOV se anulan sin cambiar los tamaños de caja ni los desplazamientos de medios. Otros contenedores compatibles usan su ruta de metadatos correspondiente.
La eliminación invisible es diferente. Regenera la imagen mediante un pipeline 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 y limitaciones conocidas para conocer el límite técnico completo.
La API de eliminación visible requiere 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")
La API de alto nivel acepta una ruta de archivo o un arreglo NumPy BGR. Para entradas de ruta, también lee los metadatos de procedencia, conserva el canal alfa y puede eliminar metadatos de IA del resultado escrito.
Consulta la guía de API de Python para la eliminación visible, el pipeline completo remove_all y remove_batch, la inspección de procedencia, el borrado de metadatos y el uso de difusión.
El paquete independiente ComfyUI Remove AI Watermarks proporciona nodos para eliminación visible, detección, borrado de regiones y eliminación invisible.
Veo heredado, la etiqueta AI en recuadro de Seedance y las etiquetas fijas de Dola, Hailuo y Kling. 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 importe.identify siguen funcionando en cualquier lugar.El comando video invisible incluido usa el perfil certificado noise_std=0.15. El banco de pruebas complementario scripts/video_synthid_sweep.py construye un control de recodificación emparejado más candidatos regenerados por VAE y deja el veredicto del verificador en blanco:
uv run --extra video --extra diffusion python scripts/video_synthid_sweep.py input.mp4 -o sweep/
Para puntuar cuánto costó realmente una salida, usa scripts/video_fidelity_probe.py: el PSNR del propio motor se mide antes del redimensionamiento y de la codificación, de modo que solo la sonda ve la imagen entregada.
uv run --extra video python scripts/video_fidelity_probe.py input.mp4 input_clean.mp4
El control debe seguir siendo SynthID-positivo 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 emparejados fueron positivos en el verificador SynthID integrado de Gemini; el candidato más fuerte fue negativo en ambas portadoras, mientras que un candidato más débil fue negativo en una. Un seguimiento adversarial posterior que pidió a Gemini ordinario reinterpretar el resultado de píxeles devolvió UNAVAILABLE; ese seguimiento no fue una repetición del verificador y no invalida los veredictos integrados. Una comprobación de clip completo del 2026-07-31 sobre una muestra pública de Veo de ocho segundos encontró que 0.10 aún se detectaba y 0.15 no, por lo que 0.15 es ahora el predeterminado certificado. Los hashes reproducibles y los veredictos se encuentran en data/evaluations/video-synthid-oracle.csv.
Comienza con el índice de documentación.
Las notas de investigación y los experimentos históricos se enumeran por separado en el índice de documentación. Explican decisiones pasadas pero no definen la API pública actual.
Instala el entorno de desarrollo y ejecuta la compuerta del proyecto:
uv sync --frozen --extra dev
bash maintain.sh
Consulta detalles internos del módulo antes de cambiar un subsistema con invariantes documentados.
Apache 2.0. Copyright 2025-2026 wiltodelta.
| Objetivo | Comando | GPU |
|---|
| Encontrar señales de procedencia y marcas de agua | identify | No |
| Eliminar marcas visibles conocidas de IA | visible | No |
| Borrar una región que selecciones | erase | No |
| Eliminar metadatos de IA | metadata | No |
| Identificar la procedencia de vídeos compatibles | video identify | No |
| Eliminar marcas visibles y metadatos de IA de vídeo | video all | No |
| Eliminar metadatos de IA de vídeo | video metadata | No |
| Eliminar una marca visible registrada de IA de vídeo | video visible | No |
| Procesar un directorio de vídeos | video batch | Depende del modo |
| Eliminar SynthID de vídeo con el perfil VAE certificado | video invisible | Recomendada |
| Regenerar una imagen para alterar marcas de agua invisibles | invisible | Requerida (CUDA) |
| Ejecutar eliminación visible, invisible y de metadatos | all | Recomendada |
| Procesar un directorio | batch | Depende del modo |
| Necesidad | Instalación |
|---|
| Inspección y eliminación de metadatos | remove-ai-watermarks |
| Detección y eliminación visibles | remove-ai-watermarks[visible] |
| Procesamiento de vídeo visible | remove-ai-watermarks[video] |
| Eliminación de SynthID en vídeo | remove-ai-watermarks[video,diffusion] |
| Detección DWT-DCT sin Torch | remove-ai-watermarks[detect] |
| Eliminación invisible de imágenes (requiere CUDA) | remove-ai-watermarks[qwen-zimage] |
| Todas las funciones de producción | remove-ai-watermarks[all] |