← Proyectos
Web

ABR Image Tools

Editor de imágenes que funciona entero en el navegador, nacido para escribir manuales de usuario sin enseñar datos personales. Censura automática de DNI, IBAN, teléfonos, correos y caras con OCR en local, flechas, formas y texto para señalar pasos, capas, pestañas, exportación a WebP, IA local para quitar fondos y ampliar, y procesamiento por lotes con censura editable. Sin servidores ni cuentas, y gratis.

Una captura de una aplicación con los datos personales desenfocados y dos pasos señalados con recuadros, flechas y texto
La Censura Inteligente con el DNI, el IBAN, el teléfono y el correo detectados y listados para revisarLos resultados de un lote con miniaturas, zonas censuradas y peso antes y después de cada imagenLa vista previa de quitar el fondo, con la foto original de un oso y el oso recortadoUn diagrama de flujo escrito en Mermaid, con su vista previa, listo para insertarse como formas editablesEl editor en modo oscuro con la captura anotada y censurada
herramientas
36
herramientas
modelos de IA en local
6
modelos de IA en local
tests (Vitest)
825
tests (Vitest)
commits
1.081
commits

Qué hace

  • Censura inteligente. Lee el texto de la imagen y encuentra DNI, NIE, IBAN, teléfonos, correos, tarjetas, IP y URLs, además de caras. Se revisa la lista y se tapa con desenfoque, pixelado o un bloque de color. Admite reglas propias por texto o expresión regular.
  • Aviso antes de exportar. Si queda un dato sensible sin tapar, lo dice antes de guardar la imagen.
  • Anotar para documentar. Rectángulos, círculos, flechas, líneas, texto, resaltador, bocadillos, estrellas, polígonos, pluma Bézier y trazo libre, con color, grosor, relleno, degradados y sombra.
  • Un editor completo. Capas, grupos, selección múltiple, lienzo infinito con área de exportación, recorte, filtros, biblioteca de elementos reutilizables y deshacer ilimitado.
  • Pestañas y autoguardado. Varias imágenes abiertas a la vez, guardadas solas en el navegador, y exportables como proyecto .abr o espacio de trabajo .abrz.
  • Tamaño y peso. Redimensionar, y reducir peso hasta un tamaño de archivo objetivo. Exporta a PNG, JPG, WebP y SVG.
  • IA en local. Quitar fondos, ampliar ×4, borrar marcas de agua y generar imágenes a partir de texto (experimental), todo en el equipo del usuario.
  • Lotes. Quitar fondo, autocensura y redimensionado sobre muchas imágenes, con revisión de las que salen sin nada tapado, descarga en ZIP y apertura en el editor con la censura editable.
  • Diagramas Mermaid convertidos en formas editables, paleta de comandos, modo presentación, modo oscuro e interfaz en español, inglés y chino.

Cómo está hecho

Sin servidor

Es un sitio estático. El OCR, la detección de caras y los modelos de IA se ejecutan en el navegador, en Web Workers, con WebAssembly o WebGPU. Las imágenes no salen nunca del equipo, y los proyectos se guardan en IndexedDB.

Clean Architecture y patrón Command

Dominio, infraestructura, estado e interfaz están separados. Cada elemento del lienzo es un comando que sabe dibujarse, moverse, serializarse y clonarse; el motor solo los recorre por capas. El historial guarda copias clonadas de los comandos en cada paso.

Lotes con censura editable

Las operaciones son un registro declarativo con su esquema de ajustes. Cuando el lote censura, guarda también la imagen original sin pérdida, y al abrirla en el editor llega con un comando de desenfoque editable por región, que no se puede deshacer por accidente.

Problemas que resolví

  • Una censura que no salía en el fichero. El desenfoque y el pixelado solo se dibujaban en el lienzo en vivo; en la exportación no hacían nada. El algoritmo pasó a un módulo independiente del entorno.
  • Un deshacer que no deshacía. Cuatro sitios modificaban un comando antes de guardar el historial y corrompían la entrada anterior. Ahora todos clonan antes de cambiar nada.
  • Cero regiones detectadas y ningún error. Las reglas reactivas de Vue no se podían clonar con postMessage, y el error se perdía dentro de un Promise.allSettled.
  • Una suite E2E que no probaba nada. El servidor de desarrollo daba un 500 por imports de tipos, el helper de los tests contaba siempre cero y los clics se perdían al azar. Arreglados los tres, la suite volvió a la CI.
  • Un componente de 3.294 líneas. El lienzo se desmontó en 17 composables y dos componentes, hasta quedarse en 711 líneas.

Stack

Nuxt 4Vue 3TypeScriptPiniaTailwind CSSCanvas 2DOffscreenCanvasWeb WorkersTesseract.jsMediaPipeONNX Runtime WebTransformers.jsWebGPUWebAssemblyMermaidIndexedDBPWAVitestPlaywrightGitHub Actions