Cómo funciona Araluma

Detalle técnico de qué hace cada herramienta, dónde se ejecuta y cómo puedes verificarlo tú mismo.

La respuesta corta

Araluma usa una arquitectura híbrida: dos herramientas funcionan completamente en tu navegador sin ninguna subida, y dos herramientas dirigen una única solicitud de red a través de nuestra propia infraestructura cuando el navegador no puede igualar la calidad. Te indicamos en cuál de los dos caminos estás, en cada herramienta y en esta página.

HerramientaDónde ocurre el trabajo
Circle Crop100% en tu navegador, Canvas API. Sin subida, funciona sin conexión.
Vista previa de Compress (slider + comparación de formatos)100% en tu navegador, canvas.toBlob. Sin subida.
Descarga final de CompressUn único viaje de ida y vuelta a nuestro servicio en api.araluma.com (Fastify + sharp + libvips en un VPS en Alemania).
Remove BackgroundUn único viaje de ida y vuelta a un Cloudflare Worker que ejecuta BiRefNet en las GPUs de edge de Cloudflare, con un respaldo en WebAssembly en tu navegador cuando la nube no está disponible.

Puedes verificar las afirmaciones del lado cliente en unos 30 segundos: abre DevTools → Network, limpia el log y usa Circle Crop o el slider de vista previa de Compress — no verás ninguna solicitud que lleve los bytes de tu imagen fuera de la página. Para las dos herramientas que tocan el servidor verás exactamente una subida por operación, a los endpoints mencionados arriba.

Por qué híbrido

La mayoría de herramientas de imagen online se sitúan en uno de los dos extremos: subir todo a un servidor (esperas los viajes de ida y vuelta y el operador guarda tu archivo), o todo en el navegador (pagas en calidad y velocidad en los pasos de codificación/IA). Ninguno de los dos extremos gana en todos los casos.

Elegimos el lado cliente donde los navegadores ya son excelentes — el elemento <canvas> se encarga del recorte, rotación y la vista previa de codificación con pérdida en JPG/WebP — y el lado servidor donde el navegador aún pierde de forma medible:

  • Compresión de imágenes, en la descarga final. El servidor sharp + libvips 8.17 produce archivos 10-15% más pequeños byte a byte que los codificadores del navegador con la misma calidad visual, y da acceso a la sintonización de velocidad/croma de AVIF y la salida JPEG XL que el navegador no expone. El slider y la vista previa siguen corriendo en tu navegador para que la iteración sea instantánea; solo el toque de “Descargar” pasa por nuestro servicio.
  • Eliminación de fondo con IA, en el camino predeterminado. El modelo BiRefNet que ejecuta cf.image.segment de Cloudflare (misma arquitectura que remove.bg) necesita una GPU real para terminar en 1-3 segundos. El respaldo en el navegador (ISNet vía ONNX Runtime + WebAssembly) funciona, tarda 20-40 segundos en el primer uso y 2-10 segundos después, y produce un recorte visiblemente más tosco en cabello, pelaje y bordes finos.

El costo que aceptamos por estar del lado servidor en esos dos caminos es un viaje de ida y vuelta por operación. El costo que evitamos al permanecer del lado cliente en todo lo demás (Circle Crop, la vista previa de Compress) es ese viaje de ida y vuelta en las partes del flujo que iteran más rápido.

El pipeline, paso a paso

1. Seleccionas un archivo

Mediante el selector de archivos, arrastrando y soltando, o pegando, el navegador le entrega a JavaScript un objeto File. JavaScript lee los bytes usando FileReader o Blob.arrayBuffer(). En ningún momento de este paso se envía el archivo por la red, independientemente de qué herramienta estés usando.

2. El navegador decodifica la imagen

Los navegadores modernos decodifican nativamente JPG, PNG, WebP, GIF y AVIF. Usamos createImageBitmap() para convertir los bytes en bruto en un bitmap con el que la GPU puede trabajar, fuera del hilo principal. Para HEIC en navegadores que no lo decodifican nativamente, recurrimos a un decodificador WebAssembly que se ejecuta localmente en tu navegador.

3. La herramienta hace su trabajo — aquí es donde los caminos divergen

  • Circle Crop. Una transformación de píxeles Canvas 2D con una ruta de recorte circular. El bitmap se dibuja en un <canvas> con la rotación y el zoom elegidos, se aplica el recorte circular y el interior del círculo se lee de vuelta como ImageData. Cropper.js gestiona la interacción del marco de recorte. Completamente en tu navegador.
  • Compress — vista previa y slider. Recodifica JPG, PNG, WebP o AVIF usando canvas.toBlob para que la vista previa lado a lado se actualice mientras mueves el slider de calidad. Completamente en tu navegador. Sin subida todavía.
  • Compress — Descarga. Cuando tocas “Descargar”, la imagen se envía una vez a api.araluma.com (un servicio Fastify que corre en un VPS en Alemania operado por Hostinger, Node 24 + sharp 0.34 + libvips 8.17, las mismas bibliotecas C que usa Squoosh en su camino de servidor). Se recodifica con los mismos parámetros que configuraste en la vista previa y los bytes regresan en streaming a tu navegador. El servicio mantiene una caché aislada por tenant y direccionada por contenido (un hash de los bytes de entrada + parámetros) con un límite de 500 MB, de modo que volver a descargar la misma imagen con los mismos ajustes reproduce los bytes almacenados — la caché no está indexada por usuario, IP ni nombre de archivo. Si el servicio no está disponible, la herramienta recurre al blob de vista previa en el navegador.
  • Remove Background — camino predeterminado en la nube. La imagen se sube una vez a un Cloudflare Worker (araluma-bg-remover), se almacena temporalmente en un bucket privado de R2 (araluma-bg-temp), se procesa mediante la transformación cf.image.segment de Cloudflare que ejecuta el modelo BiRefNet en las GPUs de edge de Cloudflare, y el recorte se transmite de vuelta. El objeto de R2 almacenado se elimina en el plazo de una hora por una regla de ciclo de vida de R2, independientemente del resultado. Una foto típica termina en 1-3 segundos. Límites diarios por IP y de subida de 5 MB mantienen el plan gratuito sostenible.
  • Remove Background — respaldo en WebAssembly. Si el Worker no está disponible (tu red cae, estás detrás de un firewall estricto, la cuota diaria está llena o el archivo supera el límite de 5 MB en la nube), la herramienta cambia de forma transparente al modelo ISNet que se ejecuta localmente en tu navegador vía ONNX Runtime Web con WebAssembly. En el primer uso, descarga el modelo de ~80 MB y tarda 20-40 segundos; los usos posteriores tardan 2-10 segundos. Sin subida en este camino — puedes verificarlo en DevTools.

4. Descargas el resultado

El bitmap de salida se codifica en un Blob, se envuelve en una object URL y se ofrece al diálogo estándar de guardar archivo de tu navegador. El archivo aparece en tu disco.

Cómo verificarlo tú mismo

Elige el método que prefieras:

Método 1 — Observa la pestaña Network

  1. Abre Araluma en una pestaña nueva y abre DevTools → Network.
  2. Usa Circle Crop o el slider de vista previa de Compress. Verás solicitudes de HTML/CSS/JS/fuentes únicamente, más los módulos WebAssembly relevantes en el primer uso. Ninguna solicitud llevará los bytes de tu imagen.
  3. Ahora usa Compress → Descargar o Remove Background. Verás exactamente un POST a api.araluma.com (Compress) o al Worker de Remove Background, llevando tu imagen — y una respuesta que regresa con el resultado. Pasa el cursor sobre cualquier solicitud para ver el tamaño y el tiempo.

La columna “Initiator” te indica qué script activó cada solicitud, y la columna “Type” te dice qué se envió. No ocultamos ninguna de las dos.

Método 2 — Usa las herramientas sin conexión

  1. Carga cualquier página de herramienta de Araluma. Usa Remove Background una vez en una imagen pequeña para que el modelo ISNet en el navegador quede en caché.
  2. Abre DevTools → Network → marca Offline (o desactiva el Wi-Fi).
  3. Recarga la página; los assets estáticos están en caché, así que sigue cargando.
  4. Prueba cada herramienta:
    • Circle Crop y la vista previa de Compress siguen funcionando — nunca necesitaron la red.
    • Compress Descarga recurre al blob de vista previa en el navegador (codificación ligeramente menos eficiente, pero funcional).
    • Remove Background recurre al modelo ISNet en WebAssembly y funciona sin ninguna solicitud saliente.

Si las cuatro herramientas funcionaron sin conexión (una ligeramente degradada, tres idénticas), por definición ningún servidor vio tu imagen.

Qué vemos nosotros — y qué no

En los caminos del lado cliente, no vemos nada sobre tu imagen. No hay ninguna solicitud que examinar, ninguna caché donde almacenarla, ninguna línea de log que buscar.

En los caminos del lado servidor:

  • Compress Descarga ve los bytes de la imagen durante el tiempo de la codificación (típicamente unos cientos de milisegundos), mantiene una entrada de caché direccionada por contenido durante el TTL de la caché, y eso es todo. La caché no está indexada por usuario, IP, nombre de archivo ni ningún identificador que pudiéramos usar para encontrar “tus” imágenes. No registramos el contenido de las imágenes. El servicio de codificación es compartido entre los mismos dos tenants que servía v1 antes del traspaso, con CORS por tenant, límites de velocidad y URLs canónicas firmadas con HMAC.
  • Remove Background ve la imagen durante el tiempo de la subida de almacenamiento temporal y la llamada de segmentación (típicamente 1-3 segundos en total), tras lo cual la copia temporal es eliminada por la regla de ciclo de vida de R2. Nunca enviamos tus bytes a ningún proveedor de modelos de terceros — el modelo BiRefNet corre dentro de la propia infraestructura de Cloudflare, no en una API externa del estilo de remove.bg / fal.ai / Replicate.

En todos los caminos, nuestro proveedor de analytics (Cloudflare Web Analytics) registra datos agregados de páginas vistas — URL, país, familia de navegador, Core Web Vitals. Sin cookies, sin identificadores persistentes, nada vinculado a una persona.

Para las herramientas que descargan un módulo WebAssembly en el primer uso (el decodificador HEIC, el modelo ONNX de ISNet), nuestro proveedor de alojamiento sabe que alguien obtuvo el módulo — igual que sabe que alguien obtuvo el archivo CSS. El módulo en sí no contiene ninguna información sobre tu imagen.

El inventario completo de datos está en nuestra política de privacidad.

La stack tecnológica

Para los curiosos:

  • Astro — el generador de sitios estáticos. Cada página se entrega como HTML plano con “islands” JavaScript con mejora progresiva solo donde viven las herramientas interactivas.
  • CSS vanilla con propiedades personalizadas — sin Tailwind, sin CSS-in-JS. El sistema de diseño completo es un único archivo tokens.css.
  • canvas.toBlob / <canvas> — codificación en JPEG, PNG, WebP, AVIF (soportados por el navegador) en la vista previa de Compress y en todo Circle Crop.
  • Cropper.js — la capa de interacción del marco de recorte.
  • ONNX Runtime Web — ejecuta el respaldo ISNet en WebAssembly para Remove Background.
  • Cloudflare Pages — aloja el build estático y lo sirve desde el edge.
  • Cloudflare Workers + R2 + cf.image.segment (BiRefNet) — el pipeline predeterminado de Remove Background.
  • Fastify + sharp 0.34 + libvips 8.17 en Node 24 — el servicio de descarga de Compress en api.araluma.com, en un VPS de Hostinger en Alemania.
  • Cloudflare Web Analytics — conteos de páginas vistas agregados, sin cookies.

Compatibilidad con navegadores

Todas las herramientas funcionan en la versión actual y la anterior de Chrome, Firefox, Safari y Edge — escritorio y móvil. El sitio usa mejora progresiva: donde un navegador soporta una API más nueva (p. ej., showSaveFilePicker, OffscreenCanvas), la usamos; donde no, recurrimos al equivalente más antiguo. No hay barrera de “tu navegador no está soportado”.

Los únicos requisitos imprescindibles son JavaScript (para cualquier herramienta) y una conexión de red (solo al usar Compress Descarga o el camino predeterminado de Remove Background — los demás caminos funcionan completamente sin conexión tras la primera carga de página).

Preguntas

¿Algo que no hayamos cubierto? Escríbenos a support@araluma.com. Las preguntas técnicas son bienvenidas.