Ir al contenido

Capturas de pantalla e imágenes

Una captura de pantalla de un terminal, de un formulario o de una factura contiene los mismos valores que el texto que la rodea: una dirección de correo electrónico, un IBAN, el nombre de un cliente. Con el reconocimiento de texto instalado, Latet lee en tu equipo el texto de cada imagen que lleva una petición, lo enmascara como cualquier otro texto y, encima de cada valor que encuentra, pinta su valor ficticio. El modelo lee el valor ficticio en la imagen; cuando lo vuelve a escribir, Latet restaura el valor real, como hace con el texto.

Ventana de terminal
latet ocr install # downloads the models once (about 31 MB)
  • Los modelos funcionan con el extra ocr, ONNX Runtime y Pillow, que los instaladores instalan junto con Latet; latet upgrade lo añade a un Latet instalado sin él.
  • Son los modelos PP-OCRv6 small de PaddleOCR, uno que encuentra las líneas de texto y otro que las lee, con licencia Apache-2.0. Vienen de huggingface.co en una revisión fijada, y cada archivo se comprueba con un SHA-256 fijado antes de usarlo.
  • Se ejecutan en tu CPU, en alrededor de un segundo para una captura de pantalla Full HD, en pocos segundos para la de una pantalla 4K o 5K, y en varios segundos para la captura de una página entera. No se envía nada a ningún sitio, y Latet solo se conecta a huggingface.co cuando ejecutas latet ocr install.
  • Un daemon en ejecución empieza a usarlos al momento. latet ocr status muestra si están en uso; latet ocr remove los borra. Para mantenerlos instalados pero sin usarlos, define ocr: off.
  • latet global-install --ocr los descarga con el resto de la instalación. En Docker: docker exec latet latet ocr install --yes.
  1. Latet lee sus líneas de texto, y dónde está cada carácter. Una imagen de más de unos 3.000 píxeles de largo, como la captura de una pantalla 4K o 5K, de una página entera mucho más alta que una pantalla o de varias pantallas una al lado de otra, se lee en partes de 2.000 a 3.000 píxeles que se solapan, a un tamaño en el que su texto se lee: si se redujera para leerla de una vez, su texto pequeño se leería mal, o no se encontraría.
  2. El texto leído pasa a ser un texto más de la petición, Texto en una imagen: los detectores, tus términos, la caja fuerte, el revisor local y el Revisor en directo lo ven como cualquier otro.
  3. Cada valor encontrado se cubre en la imagen: un rectángulo del color del fondo, con el valor ficticio escrito encima en letras de un tamaño parecido. Un tipo cuya política es redact recibe una simple barra. La imagen conserva su formato, sin sus metadatos; una que saldría más grande de lo que aceptan los proveedores (5 MB) se envía como JPEG, o se retiene si incluso así es demasiado grande.
  4. Cuando se vuelve a enviar, ya que todos los agentes reenvían la conversación, la misma imagen sale igual, byte a byte, también después de un reinicio: la caché de prompts del proveedor sigue funcionando.

Una imagen sin nada que enmascarar sale tal como estaba. Una imagen que Latet no puede leer se retiene: el modelo recibe en su lugar una nota breve, [image withheld by Latet: …], con el motivo. Eso le pasa a una imagen animada, a una de más de 20 MB o 40 megapíxeles, a una que no es una imagen válida, a una tan larga para su anchura, o tan ancha para su altura, que habría que leerla en más de 16 partes (la captura de una página de más de unos 29.000 píxeles de largo), y a cualquier imagen mientras los modelos se siguen cargando (una petición los espera hasta 20 segundos). A una petición que Latet solo comprueba, como las de Claude Code, no se le puede quitar una imagen: una con una imagen que Latet no sabe leer no se envía.

Qué Se leen y se enmascaran
Imágenes en los mensajes: las imágenes base64 de Claude, las URL data: de OpenAI Chat y Responses, Codex por HTTP y por su WebSocket, las imágenes en línea de Gemini (inlineData) sí
Capturas de pantalla que devuelven las herramientas: Read de Claude Code sobre una imagen, servidores MCP como el de un navegador, el computer use de OpenAI sí
Imágenes indicadas por su dirección (una URL https://, el ID de un archivo), PDF y otros documentos, audio no: la petición no se envía

images indica qué puede salir, y ocr, si se leen las imágenes. Los dos están en Reglas → Protección → Datos de producción, en la configuración y en un proyecto.

images Con reconocimiento de texto Sin él
allow (predeterminado) las imágenes se leen y se enmascaran no se envía ninguna petición con una imagen
mask solo se envían las imágenes leídas y enmascaradas: una petición que lleva una que Latet no puede leer (un PDF, una imagen indicada por su dirección) no se envía no se envía ninguna petición con una imagen
block no se envía ninguna petición que lleve una imagen o un documento lo mismo
  • El perfil max no envía imágenes, como block. Un proyecto tuyo puede definir images: mask para enviarlas enmascaradas.

  • El latet.yaml de un repositorio solo puede hacer que se envíen menos imágenes. Enviar más, desde tus ajustes o desde un proyecto tuyo, y ocr: off esperan tu aprobación cuando los pide un agente (Los agentes y tus ajustes).

  • Con ocr: off, igual que sin reconocimiento de texto, no se envía ninguna petición con una imagen.

  • Un agente al que se detiene recibe un error que explica por qué y qué hacer. Sin reconocimiento de texto, se le dice que ejecute latet ocr install y que empiece una conversación nueva, porque la imagen se queda en su historial:

    Latet cannot read this image's text: text recognition is not installed. On a computer, latet ocr install installs it; on a Latet server, its administrator installs it there. Then rewind to before the image or start a new conversation, because the image stays in its history.

Una petición que Latet reescribe (Codex, OpenCode y los demás agentes en modo pasarela) envía cada imagen reescrita, sin sus metadatos. Una petición que Latet solo comprueba, como las de Claude Code, sale tal como la construyó el agente, así que allí Latet da cuenta de cada byte de cada imagen: la estructura de su formato, leída según su gramática; el texto de sus metadatos (el comentario Screenshot de una captura, el programa que la creó, el nombre de su perfil de color), leído por la comprobación final; y los píxeles de la imagen principal, cuyo texto leyó el reconocimiento de texto. Lo que sobra no se envía:

  • una ubicación (GPS) en los metadatos de una foto;
  • las notas que el fabricante de una cámara escribe en una forma propia;
  • la miniatura que una cámara guarda dentro de una foto, y cualquier otra imagen dentro de ella, como los mapas de profundidad y de ganancia de la foto en modo retrato de un móvil;
  • lo que sigue al final de la imagen, como el vídeo de una foto en movimiento.

Al agente se le dice cómo seguir:

Latet cannot read all of this image's metadata or embedded images. Rewind to before the image or start a new conversation, because the image stays in its history. Remove the metadata before attaching it again: iOS: Share, Options, Location off; macOS Preview: Tools, Show Inspector, Remove Location Info; Windows: Properties, Details, Remove Properties and Personal Information.

Lleva la conversación a antes de la imagen, o empieza una nueva, y vuelve a adjuntar la imagen sin sus metadatos: en iOS, Compartir, Opciones, Ubicación desactivada; en Vista Previa de macOS, Herramientas, Mostrar inspector, Eliminar información de ubicación; en Windows, Propiedades del archivo, Detalles, Quitar propiedades e información personal. Una captura de pantalla normal no tiene nada de esto, y pasa.

Una imagen WebP original no se puede explicar allí byte a byte, y también se rechaza: expórtala como PNG, y luego vuelve atrás o empieza una conversación nueva. Una petición que Latet reescribe envía una imagen WebP reescrita como PNG.

En modo cliente, el plugin enmascara las imágenes antes de que Claude Code las envíe:

  • Las imágenes que devuelven las herramientas (Read sobre un PNG, la captura de pantalla de un servidor MCP) se sustituyen por su copia enmascarada antes de que Claude las vea. Tu pantalla muestra el original.
  • Una captura de pantalla que pegas no se puede modificar, solo quitar del prompt. Cuando Latet encuentra en ella valores que enmascarar, el plugin la quita y añade a tu prompt una nota con la ruta de una copia enmascarada, .latet/masked-<id>.png en tu proyecto, que Claude abre con Read. No se escribe nada ahí: el propio plugin responde a esa llamada a Read.
  • La comprobación previa a cada petición también cubre las imágenes: una imagen con un valor en claro que haya llegado a la petición por otra vía la detiene.
  • En el Revisor en directo, el texto de una imagen espera como cualquier texto, con la imagen encima: un marco donde cada valor recibe su valor ficticio, los valores que enmascaras en su texto cubiertos también, y puedes arrastrar un rectángulo sobre cualquier parte para cubrirla con una barra, o no enviar la imagen en absoluto. Tu decisión se guarda, sellada, para esa imagen: si se vuelve a enviar, sale de la misma forma.
  • El revisor local lee de todos modos el texto de cada imagen. También se le puede mostrar la propia imagen, solo si lo activas tú, para que encuentre lo que se le ha escapado al reconocimiento de texto.
  • Un intercambio muestra sus imágenes tal como se enviaron (con history: full), cada una con un enlace al texto leído en ella, y los indicadores Imagen: enmascarada e Imagen: retenida.
  • Reglas muestra si el reconocimiento de texto está instalado y en uso, y el comando que lo instala.

Lo que no puede hacer el reconocimiento de texto

Sección titulada «Lo que no puede hacer el reconocimiento de texto»
  • No es infalible, como con los nombres. El texto que no lee (muy pequeño, tenue, manuscrito, girado, en una fuente estilizada) sale tal cual. Para las capturas de pantalla que nunca deben salir, usa images: block, los rectángulos del Revisor en directo o el revisor local, mostrándole las imágenes.
  • Un valor mal leído se enmascara tal como se ha leído. Una O leída en lugar de un 0 en un IBAN o en un código fiscal italiano se corrige gracias a sus dígitos de control; otro valor mal leído puede no reconocerse.
  • El modelo lee el valor ficticio. Si lo lee mal, su respuesta lleva el valor ficticio mal leído, y Latet no puede restaurar el valor real.
  • Los PDF y otros documentos no se leen, ni las imágenes indicadas por su dirección: una petición que lleva uno no se envía.
  • Los códigos QR y los códigos de barras no se descodifican. El reconocimiento de texto lee texto: los datos que contiene un código salen con la imagen. No envíes un código que contenga un valor que proteges.
  • Solo texto. Las caras, las firmas, los logotipos y la escritura a mano no se cubren.