+250 skills, dinamita para tu productividad 🧨Explorar →

Cómo quitar el watermark o marca de agua de Claude

(actualizado )

Sin paños calientes:

No puedes borrar la marca de agua con las herramientas que dicen que la borran.

Y no porque sean malas herramientas. Es que limpian otra cosa. Limpian caracteres Unicode invisibles, espacios raros, metadatos de ficheros. Todo eso existe, todo eso conviene quitarlo por otros motivos, pero nada de eso es la marca que Claude mete en el texto.

La marca de agua de Claude no son caracteres añadidos. Se genera con el texto, no se le pega después.

Eso último lo dice Anthropic. Lo que no ha publicado es el algoritmo concreto, así que verás señalado en todo el artículo qué está documentado y qué es inferencia.

(Watermark y marca de agua son lo mismo. Uso los dos términos porque en la documentación técnica conviven.)

Ahí está el malentendido que va a llenar GitHub de repos estos meses. Vamos a desmontarlo y, de paso, a montar la parte que sí vale la pena.

La respuesta corta sobre la marca de agua de Claude

Anthropic usa dos mecanismos distintos para marcar lo que sale de Claude, y confundirlos es el origen de casi todo el ruido.

Mecanismo Dónde vive ¿Se puede quitar?
Marca de agua en texto Tejida en el texto, aplicada a nivel de modelo No con post-proceso determinista
Metadatos C2PA firmados En la cabecera del fichero (.svg, .png, .jpg) Sí, y es trivial

El segundo se cae solo. La propia Anthropic reconoce que los metadatos de un fichero se pierden con conversiones de formato, al volver a guardarlo, con una captura de pantalla o por otros medios. Súbelo a WhatsApp y el pipeline de recompresión te lo borra sin que hagas nada.

El primero es otra historia. Anthropic lo describe como una marca imperceptible tejida directamente en el texto, que viaja con él cuando lo copias y pegas y que puede sobrevivir a cierta edición.

Fíjate en el verbo. Tejida, no pegada.

Hay una segunda pista, y es la más reveladora de toda la documentación. Anthropic advierte que un pasaje muy corto deja demasiado poco texto para una señal fiable. Piensa en lo que implica: una marca hecha de caracteres invisibles no se comporta así. Un espacio de ancho cero es un espacio de ancho cero, esté en tres palabras o en tres mil. Solo una señal estadística, repartida y acumulativa, necesita longitud para ser fiable.

Y hay algo mejor que una pista: alguien fue y lo comprobó. Daniel Miessler pasó la salida del propio Claude por un escáner de codepoints y le salió cero. Ni un carácter invisible, espaciado uniforme. Es una prueba informal, no un estudio, pero apunta donde apunta todo lo demás. Y la puedes repetir tú: al final del artículo montamos ese escáner en 80 líneas de Python.

Su argumento de fondo es más limpio que el mío. En ASCII de 7 bits con espaciado simple no hay dónde esconder un bit: dos personas que escriben la misma frase producen ficheros idénticos byte a byte. Si la marca existe y sobrevive al copiar y pegar, no puede estar en los caracteres. Tiene que estar en qué caracteres se eligieron.

Eso no prueba qué algoritmo usa Claude, pero descarta la familia de los caracteres invisibles. Que es justo lo que limpian las herramientas.

🔑 Si una herramienta te promete quitar “la marca de agua de Claude” y lo único que hace es eliminar caracteres invisibles, te está limpiando algo que Claude nunca puso ahí.

Y ojo con una confusión que viene de serie: una cosa es la marca de agua técnica y otra que tu texto suene a IA. Son problemas distintos con soluciones distintas. Del segundo hablé en el análisis de Impeccable, donde la herramienta me encontró trece anti-patrones en mi propio diseño.

Curso gratis · paso a paso

Dale método al agente y no tendrás nada que lavar después

Si el problema de fondo es que el texto o el código salen de la IA tal cual, la solución no está al final del proceso sino al principio. En este curso gratis recorres el ciclo completo de Spec Driven Development con OpenSpec sobre un proyecto real: propuesta, spec, diseño, tareas y archivado, decidiendo tú en cada paso.

Entra en el curso gratis →

Qué dice Anthropic y qué no dice

Los modelos de Claude lanzados el 2 de agosto de 2026 o después soportan el marcado desde el día uno, y Anthropic está trabajando para añadirlo a los modelos anteriores. La cobertura abarca Claude Platform (API), Claude, Claude Code, Claude Cowork y Claude Tag, y también cuando accedes a los modelos a través de AWS, Google Cloud o Microsoft Foundry.

El detalle que más ha escocido: el marcado se aplica dondequiera que Claude esté disponible, en todo el mundo. No es solo Europa, aunque el disparador sea europeo. Anthropic ha firmado el Código de Prácticas del Artículo 50(2) del Reglamento Europeo de IA sobre transparencia en contenidos generados por IA.

Y ahora lo que no dice: cómo funciona por dentro. No hay especificación ni algoritmo publicado, solo la promesa de documentación técnica futura sobre los mecanismos de detección. John Gruber lo resumió en Daring Fireball con la mala leche justa: un artículo titulado “cómo Claude marca el contenido generado por IA” que no explica cómo Claude marca el contenido generado por IA.

Así que lo que viene ahora es inferencia informada, no documentación oficial. Te lo señalo porque la mitad de artículos que vas a leer presentan la inferencia como hecho.

Y un dato que envejece solo, así que compruébalo tú: ese artículo de soporte no se ha tocado desde el 10 de agosto de 2026. Tres semanas después de anunciar el marcado, la documentación técnica de detección sigue sin existir.

El verificador de OpenAI, o el espejo invertido

Mientras Anthropic pone marca y promete detector, OpenAI hizo justo lo contrario. Compararlos explica el estado real del asunto mejor que cualquier discusión sobre sed.

OpenAI tiene un verificador público funcionando en openai.com/verify. Subes un fichero y te dice si lleva señales de procedencia de sus herramientas: metadatos C2PA o marca SynthID. Se estrenó el 19 de mayo de 2026, cuando OpenAI se hizo conforme a C2PA y adoptó SynthID en imágenes, y el 31 de julio de 2026 amplió la cobertura al audio. Hay API para integrarlo en tu propio flujo.

Ahora la letra pequeña, que es donde está la noticia:

Formatos admitidos: PNG, JPG, WEBP, MP3, WAV, AAC, FLAC, OGG, OPUS, PCM

Imágenes y audio. Texto no. Ni de OpenAI ni de nadie. Si pegas ahí un párrafo de ChatGPT, la herramienta no tiene nada que mirar.

Y no es un olvido. OpenAI construyó una marca de agua para texto y decidió no desplegarla. Según los documentos internos que publicó el Wall Street Journal en agosto de 2024, era eficaz en un 99,9% y llevaba cerca de un año lista. La propia OpenAI explicó en su blog por qué se quedó en el cajón, y la razón técnica es exactamente el tema de este artículo: es muy precisa frente a manipulación localizada, incluida la paráfrasis, pero menos robusta frente a manipulación globalizada — pasarlo por un traductor, reescribirlo con otro modelo generativo, o pedirle al modelo que meta un carácter especial entre cada palabra y luego borrarlo.

A eso se sumaron dos motivos que no son técnicos. Una encuesta interna de abril de 2023 encontró que el 69% de los usuarios creía que un detector acabaría en acusaciones falsas, y que casi el 30% usaría menos ChatGPT si OpenAI ponía marca y un rival no. Y la propia empresa reconoció el riesgo de perjudicar de forma desproporcionada a quien no escribe en inglés nativo.

Pon a los dos uno al lado del otro:

Proveedor ¿Marca el texto? ¿Detector público?
Anthropic (Claude) Sí, desde el 2 de agosto de 2026 No, solo prometido
OpenAI (ChatGPT) No, la tiene hecha y no la despliega Sí, pero solo imagen y audio

Nadie tiene las dos mitades a la vez. Por eso hoy no existe ninguna comprobación oficial de texto que puedas pasar ni fallar, ni tuya ni de nadie.

Dos detalles más del verificador de OpenAI, porque anticipan todo lo que viene después. El primero: dice que una señal detectada es fiable y con pocos falsos positivos, pero avisa de que “no confirma cómo se ha usado o modificado el contenido después de su creación”. Es el mismo matiz que pone Anthropic, y volveremos a él al final.

El segundo es casi un chivatazo. Entre las buenas prácticas recomienda subir clips de audio de entre 10 y 60 segundos y, en imágenes, no recortar ni convertir de formato. Traducción: hasta en un detector que sí existe y sí funciona, el resultado depende de cuánta señal le des y de cuánto hayas transformado el original. Guarda esa idea.

Cómo puede funcionar una marca de agua generativa

The Verge, al repasar el anuncio, señaló que Anthropic no identifica qué sistema emplea para texto. Lo que sí tenemos son esquemas de watermarking generativo documentados y desplegados en producción que encajan con las propiedades descritas. El de referencia lo publicaron Kirchenbauer y su equipo en Maryland en 2023.

La idea es preciosa por lo simple.

Cuando un modelo genera texto, en cada paso calcula una probabilidad para cada token del vocabulario y elige uno. La marca de agua se cuela justo ahí, en ese paso.

Antes de elegir, el vocabulario se parte en dos listas usando una función pseudoaleatoria con semilla derivada del contexto anterior. Una “verde” y una “roja”. Después se le suma un pequeño sesgo a los tokens verdes.

# Reparto pseudoaleatorio del vocabulario en cada paso de generación
# La semilla depende del contexto previo: sin la clave, no lo reproduces
def green_list(previous_tokens, vocab_size, gamma=0.25, key=None):
    rng = seeded_rng(hash(previous_tokens), key)
    permutation = rng.permutation(vocab_size)
    cut = int(gamma * vocab_size)
    return set(permutation[:cut])  # el 25% "verde" de este paso

# Sesgo suave sobre los logits: empuja sin romper la frase
def biased_logits(logits, greens, delta=2.0):
    for token_id in greens:
        logits[token_id] += delta
    return logits

El sesgo es suave. No fuerza una palabra, inclina la balanza. Si el modelo iba a escribir “el compilador rechazó el parche” y “rechazó” está en rojo pero “no aceptó” está en verde, quizás salga la segunda. El significado no cambia y tú no notas nada. Repite eso mil veces y tienes una acumulación estadística que no ocurre por azar.

Cómo se detecta

El detector no busca una firma. Cuenta.

# El detector rehace las listas verdes y cuenta aciertos
# Un texto humano rondará gamma (25%). Uno marcado, bastante más.
z = (green_count - gamma * total) / sqrt(total * gamma * (1 - gamma))
# z alto = improbable por azar = texto marcado

Es un contraste de hipótesis de manual. Y tiene tres consecuencias que definen todo lo demás:

  1. Necesitas la clave del proveedor y el texto tokenizado. En SynthID-Text la puntuación no requiere acceso al modelo, pero sí la clave. Ojo: eso vale para los esquemas publicados, no sabemos qué pedirá el detector de Anthropic.
  2. Es un continuo, no un interruptor. No hay “tiene marca / no tiene marca”. Hay un valor de confianza que sube con la longitud del texto.
  3. Los textos cortos no sirven. Es la pista con la que abríamos, y encaja: sin longitud no hay evidencia acumulada que medir. Más abajo verás cuánto de corto es demasiado corto, con números.

Un aviso para que no te quedes con la copla equivocada: no todos los watermarks generativos usan listas verdes. El de arriba es el clásico de Kirchenbauer, el más fácil de visualizar. SynthID-Text también altera la selección de tokens, pero con otro algoritmo, Tournament sampling: puntúa los candidatos con varias funciones pseudoaleatorias y los empareja en un torneo por eliminatorias hasta que queda uno. Mismo principio, mecánica distinta.

💡 La marca de agua no está en ningún carácter concreto. Está repartida en la estadística de todas tus palabras. Por eso ningún sed del mundo la toca.

Entender el mecanismo por dentro es lo que te libra de comprar la primera explicación que pase por tu timeline. Cada domingo seleccionamos 12 recursos sobre IA y desarrollo para más de 7.200 developers. Gratis, desde 2018.

Apúntate gratis →

Las cinco clases de marca de agua

Esta taxonomía es lo mejor que se lleva uno del repo watermarks-remover, y conviene atribuirla bien: el paper de SynthID-Text distingue tres familias para texto (generativa, edit-based y data-driven). Las otras dos las añade el repo para cubrir ficheros y otros medios. La ampliación es útil, pero no es de SynthID.

Edit-based (Unicode y reglas). Caracteres invisibles insertados en el texto: espacios de ancho cero, joiners, controles bidireccionales, tag characters. Detectable y eliminable con total certeza. Nada apunta a que Claude use esta familia en texto.

Generativa o estadística (token sampling). La que acabamos de ver, y la que mejor encaja con lo que Anthropic describe. Solo detectable con la clave del proveedor.

Data-driven o backdoor. El modelo se entrena para que ciertos disparadores produzcan comportamiento identificable. Ninguna herramienta de post-proceso llega ahí, por definición.

Metadatos de contenedor. C2PA, EXIF, XMP, propiedades de OOXML. Manifiestos firmados y embebidos en el fichero. Se quitan sin esfuerzo.

Soft binding y marcas de señal. Marca imperceptible en el contenido (píxeles, forma de onda) que permite reenlazar con un manifiesto remoto después de que le quites los metadatos. Sobrevive al borrado por diseño.

Las clases dos y cinco son las que aguantan. Las herramientas atacan la uno y la cuatro. Ahí tienes el resumen en dos líneas.

Qué hacen de verdad los quitadores de watermark

El repo del que todo el mundo habla es guillaumemeyer/watermarks-remover, licencia MIT. Cualquier análisis línea a línea nace caducado: apareció el 11 de agosto de 2026 y en dos semanas y media pasó de la v0.1.0 a la v0.6.0, de agent skill suelta a servicio con plugin y hook para Claude Code, y de tratar solo a Claude a cubrir varios proveedores. Va por las 19.000 estrellas. Cuando leas esto habrá cambiado otra vez.

Da igual, porque el argumento no depende de la versión. Declara tres capas y el reparto de valor entre ellas es siempre el mismo:

  • Capa A, higiene Unicode. Elimina invisibles, homóglifos de espacio y controles bidi, y clasifica cada hallazgo por tipo en lugar de escupir una lista plana. Funciona, se verifica contando codepoints antes y después, y es lo mejor del proyecto. También es lo que casi con seguridad no toca la marca de Claude.
  • Capa de ficheros, metadatos. Limpia C2PA, EXIF, XMP y propiedades de documento en imágenes, PDF, ofimática y HTML. Aquí sí borra una marca de agua de verdad: la de los ficheros.
  • Capa B, reescritura. No es código determinista, es un hook que le pide a otro modelo que reescriba tu texto. Es la única capa que apunta a la marca real y la única que no puedes verificar.

Ahí está la inversión que define el problema entero. La capa verificable no hace lo que promete el nombre del repo, y la capa que podría hacerlo no es verificable. No es un fallo del código y no lo arregla nadie escribiendo mejor Python: es una propiedad del problema.

El propio README lo dice con todas las letras, y es la frase más honesta del repositorio: hasta que los proveedores publiquen detectores y claves, ninguna herramienta puede certificar que un texto falla la comprobación oficial.

En sus versiones recientes el README también recoge la mitad del problema de la Capa B: recomienda reescribir con un modelo que no sea el de origen, para que el texto no vuelva a estamparse con la misma marca. Lo que no arregla es la otra mitad. Si reescribes texto de Claude con Gemini, no borras la marca: la cambias por SynthID. La función estrella de un quitador de marcas de agua no elimina nada, blanquea de un proveedor a otro.

Y un aviso de uso concreto: cuidado con el limpiador agresivo de Unicode. Borrar U+200D o U+FE0F sin lista blanca contextual convierte 👨‍👩‍👧 en tres emojis sueltos y cambia el significado en farsi, donde el ZWNJ separa palabras. Para algo que se vende como seguro por defecto, es pérdida de datos silenciosa.

⚠️ Cuando alguien te enseñe una captura con “17 marcas de agua eliminadas”, pregúntale de qué clase eran. La respuesta casi siempre será: espacios duros que venían de pegar desde Word.

Tu IA puede mentirte

Lo que la IA te devuelve no se comprueba a ojo

Aquí no puedes verificar nada porque no existe detector. En tu código sí puedes: te llevas el ciclo anticaos, las pruebas en navegador con Playwright, los casos Gherkin y el adversarial review entre modelos para revisar lo que escriben tus agentes.

Ver el método entero →

Métodos en directo + casos Gherkin

Cuándo se degrada la marca de verdad

Aquí es donde el asunto se pone interesante, porque hay literatura y hay números. Ninguno es de Claude —nadie tiene los de Claude— pero todos miden la misma familia de esquemas que Anthropic describe.

Empieza por la única fuente oficial que existe. Anthropic enumera cuándo su marca puede no ser detectable, y la lista es más generosa de lo que esperarías: cuando el texto ha sido muy editado, parafraseado, traducido o mezclado con otra escritura, y cuando el pasaje es muy corto y deja demasiado poco texto para una señal fiable.

Cuatro verbos y una longitud. Vamos por partes, porque no pesan lo mismo.

Los textos cortos, la fuga aburrida

Esta es la que no cuenta nadie porque no vende cursos. Una marca estadística necesita muestra. Sin muestra no hay evidencia acumulada que medir y el detector no puede separar tu texto del ruido.

El paper de SynthID-Text en Nature lo mide: con 50 tokens la tasa de acierto máxima ronda el 0,3 fijando un 1% de falsos positivos. Es decir, siete de cada diez pasajes cortos marcados se escapan. Sin que hagas nada.

Un tuit. Un mensaje de commit. Un párrafo de respuesta en un ticket. Un titular. Todo eso vive por debajo del umbral por construcción, y no hay nada que limpiar porque nunca hubo señal que limpiar.

Google añade una segunda condición en la documentación de SynthID: la marca es menos efectiva en respuestas factuales, porque hay menos margen para inclinar la elección de palabras sin estropear la exactitud. Junta las dos y tienes el peor caso posible para un detector: texto corto y factual. Que resulta ser la forma de buena parte de lo que un desarrollador le pide a un modelo.

La paráfrasis, o dos resultados que parecen contradecirse

Ahora la parte que se cita mal en las dos direcciones. Hay dos papers de referencia y dicen cosas aparentemente opuestas.

Sadasivan y su equipo, en un trabajo publicado en TMLR, montaron un ataque de paráfrasis recursiva: pasar el texto por un parafraseador una y otra vez. Sobre pasajes de unos 300 tokens marcados con el esquema de listas verdes, la detección cayó del 99,8% al 9,7% de acierto con un 1% de falsos positivos, en cinco rondas. Y la calidad del texto solo se degradaba un poco.

Kirchenbauer y su equipo —los mismos del esquema original— publicaron el resultado contrario. Reescribieron texto marcado a mano, lo parafrasearon con modelos y lo mezclaron dentro de documentos humanos más largos. Su conclusión: la marca sigue detectándose después de paráfrasis humana y automática, porque una paráfrasis filtra estadísticamente n-gramas del original. Tras paráfrasis humana fuerte, el texto vuelve a ser detectable observando unos 800 tokens de media, con una tasa de falsos positivos de 1 entre 100.000.

No se contradicen. Están midiendo el mismo eje desde dos extremos: cuánta señal queda depende de cuánto reescribes y de cuánto texto tiene delante el detector. Diluir la marca en un pasaje corto la mata; diluirla en un texto largo solo obliga a leer más para encontrarla.

OpenAI lo formuló mejor que nadie cuando explicó por qué no desplegaba su marca de texto, y es la frase que deberías llevarte de esta sección: su esquema aguantaba la manipulación localizada, la paráfrasis incluida, pero flaqueaba ante la manipulación globalizada — traducir con otro sistema o reescribir con otro modelo generativo.

Cambiar palabras sueltas no es un ataque. Cambiar el idioma o el generador, sí.

Lo que cuesta cada tramo

Ordenado por lo que le pasa a la señal y, sobre todo, por lo que le pasa a tu texto:

Qué haces Qué le pasa a la señal Qué le pasa a tu texto
Cambias conectores y alguna palabra Se diluye, sobrevive Intacto
Parafraseas párrafo a párrafo Cae mucho; con longitud, reaparece Reconocible, algo más plano
Traduces ida y vuelta, o lo pasas por otro modelo Se degrada de verdad Otro texto, y con la marca del otro proveedor
Extraes las ideas y lo reescribes tú Desaparece Es tuyo

Mira las dos últimas filas, que es donde está todo. La penúltima funciona y te deja el mismo problema con otro logotipo. La última funciona de verdad, y en el punto en que funciona ya has hecho tanto trabajo que era más rápido escribirlo tú.

Tres avisos para cerrar, porque este es el terreno donde más se afirma sin base:

  1. Ninguno de estos números es de Claude. Son de esquemas publicados. La marca de Anthropic puede ser más robusta o menos, y no hay forma pública de comprobarlo.
  2. No puedes medir dónde has quedado. Sin detector público no hay marcador. Puedes hacer las cuatro cosas de la tabla y no saber si serviste de algo.
  3. Degradar no es borrar. Bajar la confianza del detector no es lo mismo que quitar la marca, y quien te venda lo segundo te está vendiendo lo primero con nombre de lo segundo.

Si tu objetivo es que el texto no parezca de una máquina, el camino corto no es lavarlo: es escribir tú las partes que importan.

Lo que se escapa a cualquier herramienta

Tres cosas que ningún script de post-proceso alcanza.

El soft binding. Tres conceptos que se confunden a todas horas. En C2PA, un hard binding es un hash criptográfico que vincula el manifiesto con el asset y permite comprobar que los bits protegidos no han cambiado. Que el manifiesto vaya embebido en el fichero es otra cosa: una forma de almacenarlo. Y un soft binding es un identificador que sale del propio contenido —una marca imperceptible o una huella— para localizar el manifiesto en un almacén remoto cuando el embebido ya no está.

Lo que quitan estas herramientas es el manifiesto embebido. C2PA llama durable Content Credentials a la combinación de hard y soft binding, y existe justo porque los metadatos se pueden borrar: el soft binding está diseñado para sobrevivir a eso, lo que no lo hace indestructible. El matiz que importa es que Anthropic habla de C2PA firmado en ficheros pero no dice que implemente soft binding, así que aquí no puedes dar nada por hecho en ninguna dirección.

Las marcas en el dominio de la señal. SynthID para imagen, audio y vídeo trabaja sobre píxeles y formas de onda. Un exiftool -all= no las roza. Es justo lo que hace detectable el verificador de OpenAI cuando ya le has quitado los metadatos C2PA a una imagen.

Los backdoors de entrenamiento. Comportamiento inducido en el modelo. No hay post-proceso posible.

Y por encima de todo, el meta-problema: para texto no existe detector público. Ni de Anthropic ni de nadie; el de OpenAI solo mira imagen y audio. Nadie puede certificar que un texto pasa. Nadie puede certificar que falla. Cualquier herramienta que insinúe lo contrario está vendiendo humo con una interfaz bonita.

Marcas de agua, procedencia, detectores que todavía no existen: la infraestructura de la IA se está montando en directo y cuesta seguirle el ritmo. En la newsletter de Web Reactiva contamos cada domingo lo que vamos entendiendo, con las aportaciones de +7.200 developers.

Quiero esa dinamita 🧨

Cómo te lo montarías tú (la parte que sí vale)

No replicaría este repo. Replicaría el inspector, que es el 20% del código con el 90% del valor.

Un linter de Unicode para tus repos

El caso de uso honesto no tiene nada que ver con la IA. Los caracteres invisibles rompen diffs, búsquedas, grep y tests de igualdad de cadenas. Y los controles bidireccionales permiten un ataque real.

Trojan Source lo publicaron Nicholas Boucher y Ross Anderson en Cambridge en 2021, con dos CVE asociados y comprobado contra C, C++, C#, JavaScript, Java, Rust, Go y Python. El fallo no está en ningún compilador: está en cómo casi todos los renderizadores muestran Unicode. Un U+202E reordena el código para que tú leas una cosa y el parser lea otra. Cinco años después sigue siendo un ángulo muerto en la mayoría de pipelines de revisión, y por eso encaja mejor en un repaso de skills de ciberseguridad para agentes que en uno de marcas de agua.

Este es el escáner del que hablaba al principio. Su núcleo cabe en menos de 80 líneas:

import unicodedata
from collections import Counter

DANGEROUS = {
    "bidi":  set(range(0x202A, 0x202F)) | set(range(0x2066, 0x206A)) | {0x200E, 0x200F, 0x061C},
    "tag":   set(range(0xE0001, 0xE0080)),
    "zw":    {0x200B, 0x200C, 0x200D, 0x2060, 0xFEFF},
    "space": {0x00A0, 0x2000, 0x2003, 0x2009, 0x202F, 0x3000},
}

# Contexto: ZWJ y ZWNJ son legítimos en emoji y en escrituras índicas o árabes
SEMANTIC_OK = {0x200C, 0x200D}

def scan(text):
    hits = Counter()
    for i, ch in enumerate(text):
        cp = ord(ch)
        for kind, cps in DANGEROUS.items():
            if cp in cps:
                hits[(kind, cp, i)] += 1
    return hits

Y encima, tres decisiones de diseño que separan el juguete de la herramienta:

  • Severidad, no lista plana. Un tag character o un control bidi en código fuente es un error. Un espacio duro en un markdown es un aviso. Un ZWJ pegado a un emoji se ignora.
  • Lista blanca contextual. Este es el bug del repo original: borra U+200D y U+FE0F sin mirar el contexto, así que 👨‍👩‍👧 se convierte en tres emojis sueltos y el farsi cambia de significado porque el ZWNJ separa palabras. Para algo que se vende como “seguro por defecto”, es pérdida de datos silenciosa.
  • Auto-fix solo con --fix explícito. Nunca por defecto, y con salida como anotación de GitHub para que se vea en el pull request.

Distribúyelo como pre-commit hook y como GitHub Action. Ahí está el alcance real.

Higiene de metadatos antes de publicar

El segundo producto lo tienes funcionando en diez minutos. Subes capturas a tu blog y esas capturas llevan modelo de cámara, a veces coordenadas GPS, a veces tu usuario en la ruta del software. Eso es privacidad pura, no evasión.

# En imágenes, el 95% del valor sin escribir una línea de código
exiftool -all= -overwrite_original imagenes/*.png

Con PDF hay una trampa que casi nadie cuenta. ExifTool edita mediante actualizaciones incrementales: los datos antiguos no se borran, solo se deja de apuntar a ellos. El propio ExifTool te avisa por consola de que sus ediciones en PDF son reversibles y que los tags se pueden recuperar con un solo comando. Así que para PDF hacen falta dos pasos:

# 1. ExifTool quita los tags, pero deja los datos antiguos en el fichero
exiftool -all= -overwrite_original documento.pdf

# 2. qpdf reconstruye el PDF y descarta los objetos huérfanos
qpdf --linearize documento.pdf documento.limpio.pdf

Sin el segundo paso tienes un PDF que parece limpio. ExifTool a secas no es el camino para PDF: es la mitad del camino.

Lo que añadirías encima: un pre-publish que audita la carpeta de assets, clasifica por severidad (GPS crítico, modelo de cámara informativo) y limpia pidiendo confirmación.

🛡️ Antes de lanzar cualquiera de las dos herramientas contra tu contenido, haz backup. Los limpiadores agresivos de Unicode y de metadatos rompen ficheros de verdad, y el fallo suele ser silencioso.

La ventana peligrosa

Termino con lo que más me preocupa, y no es técnico.

Anthropic dice que detectar una marca indica que el contenido pudo pasar por Claude, pero no confirma su procedencia completa. Y pone el ejemplo perfecto: la gente usa Claude para revisar, traducir o resumir, y el resultado puede llevar marca aunque las ideas y el texto vengan de otra fuente.

Lee eso otra vez. La marca no prueba autoría.

Si le pasas un texto tuyo a Claude para que te corrija las tildes, lo que sale puede ir marcado. Tus ideas, tus frases, tu trabajo. Marcado.

Y al revés también: la ausencia de marca no significa que el contenido no fuera generado por IA.

Ahora junta las dos piezas. La marca ya existe en producción. El detector todavía no. Y cuando llegue, existe un riesgo claro de que universidades, empresas y plataformas traten esa señal como prueba de autoría por IA, cuando la investigación de base y la documentación del propio fabricante dicen que no lo es.

No es una certeza, es un riesgo. Pero es un riesgo con precedentes y con cifras. Liang y su equipo, en Stanford, pasaron siete detectores comerciales por dos corpus escritos por humanos: redacciones de estudiantes estadounidenses de octavo curso y ensayos del TOEFL escritos por no nativos. Con los primeros acertaban casi siempre. Con los segundos, más de la mitad se clasificaron como generados por IA.

No es un detalle de laboratorio: es exactamente el mismo sesgo que OpenAI dio como una de sus razones para no desplegar su marca de agua de texto.

Ese es el problema real de los próximos meses. No es que puedas o no borrar un watermark.

Es que alguien va a suspender a un estudiante que solo pidió ayuda con la ortografía.

Y eso no se arregla con un script de Python.

Preguntas frecuentes

¿Se puede borrar la marca de agua de texto de Claude?

Con herramientas deterministas de post-proceso, no. La marca se aplica a nivel de modelo y necesita cierta extensión de texto para dar señal, lo que apunta a algo estadístico que ningún limpiador de Unicode alcanza. Se degrada con reescritura fuerte, traducción automática o al pasarla por otro modelo, pero a ese nivel de transformación el resultado ya es otro texto. Y ojo con el matiz: degradar la confianza de un detector no es lo mismo que borrar la marca.

¿Qué borran entonces los “watermark removers” o quitadores de marca de agua que hay en GitHub?

Caracteres Unicode invisibles, espacios exóticos, controles bidireccionales y metadatos de ficheros. Es limpieza útil, pero pertenece a otra clase de marca de agua distinta de la que usa Claude en texto.

¿El verificador de OpenAI detecta la marca de agua de Claude?

No, y tampoco detecta texto de nadie. La herramienta de openai.com/verify busca dos señales propias de OpenAI, metadatos C2PA y marca SynthID, y solo acepta imágenes y audio (PNG, JPG, WEBP, MP3, WAV, AAC, FLAC, OGG, OPUS, PCM). Existe desde el 19 de mayo de 2026 y se amplió al audio el 31 de julio. Para texto no hay verificador público de ningún proveedor.

¿Un texto corto lleva marca de agua detectable?

Normalmente no. Es la limitación que reconoce la propia Anthropic y la que miden los papers: en SynthID-Text, con 50 tokens la tasa de acierto máxima ronda el 0,3 fijando un 1% de falsos positivos. Un tuit, un mensaje de commit o un párrafo suelto quedan por debajo del umbral sin que hagas nada.

¿Y ChatGPT marca su texto?

No. OpenAI construyó una marca de agua de texto, según el Wall Street Journal con un 99,9% de eficacia y lista desde hace tiempo, y decidió no desplegarla: menos robusta ante traducción o reescritura con otro modelo, con riesgo de perjudicar a quien no escribe en inglés nativo, y con casi un 30% de usuarios diciendo en una encuesta interna que usarían menos ChatGPT si la ponía y un rival no.

¿Qué algoritmo de watermarking usa Claude exactamente?

No se sabe. La compañía no lo ha revelado y solo ha prometido publicar los detalles más adelante. Su descripción encaja con las marcas generativas basadas en sampling, como las de Kirchenbauer o SynthID-Text, pero quien te diga cuál usa Claude está especulando. Y sin clave ni herramienta pública, nadie de fuera puede comprobarlo.

¿Los metadatos C2PA de las imágenes sí se pueden quitar?

Sí, y sin dificultad. Anthropic admite que un cambio de formato, un reguardado o una captura de pantalla se los lleva. Un exiftool -all= elimina el manifiesto embebido. En PDF necesitas además qpdf --linearize, porque las ediciones de ExifTool en PDF son reversibles.

¿Es lo mismo el watermark de Claude que una marca de agua de las de toda la vida?

El nombre es el mismo, el mecanismo no. Una marca de agua clásica es un logo semitransparente encima de una imagen y se ve. La de Claude en texto es invisible y vive en qué palabras elige el modelo, no en algo superpuesto.

¿Detectar una marca de agua demuestra que el texto lo escribió una IA?

No. La documentación de Anthropic advierte que la marca indica procesamiento por Claude, no autoría. Un texto humano corregido o traducido con Claude puede llevar watermark, y su ausencia tampoco prueba que no haya habido IA.

¿Merece la pena instalar watermarks-remover?

Como inspector de Unicode y limpiador de metadatos, sí. Como eliminador de la marca de agua de Claude en texto, no hace lo que su nombre sugiere, y su propio README lo admite. Cuidado además con el limpiador agresivo, que borra ZWJ y selectores de variación sin lista blanca y te puede romper emojis y escrituras no latinas.

¿Qué hago si de verdad quiero que mi texto no parezca de IA?

Escribirlo tú y usar el modelo para lo que hace bien: buscar, contrastar, revisar y estructurar. Los tics se quitan cambiando decisiones de escritura, no pasando un filtro al final.

Fuentes

🧨 Última oprtunidad para recibir la dinamita que mereces sobre programación con IA el próximo domingo: Suscríbete gratis a Web Reactiva en https://webreactiva.com/newsletter

Imagen de Daniel Primo
Claude, IA de Anthropic

Escrito con la ayuda de la IA generativa de Claude, fuentes fidedignas y con un human in the loop:
Dani Primo.

CEO en pantuflas de Web Reactiva. Programador y formador en tecnologías que cambian el mundo y a las personas. Activo en linkedin, en substack y canal @webreactiva en telegram

12 recursos para developers cada domingo en tu bandeja de entrada

Además de una skill práctica bien explicada, trucos para mejorar tu futuro profesional y una pizquita de humor útil para el resto de la semana. Gratis.