Como o Araluma funciona

Detalhes técnicos sobre o que cada ferramenta faz, onde roda e como você pode verificar tudo.

A resposta curta

O Araluma usa uma arquitetura híbrida: duas ferramentas rodam inteiramente no seu navegador sem nenhum upload, e duas ferramentas fazem uma única requisição de rede pela nossa própria infraestrutura quando o navegador não consegue igualar a qualidade. Indicamos qual caminho você está usando — em cada ferramenta e nesta página.

FerramentaOnde o processamento acontece
Circle Crop100% no seu navegador, Canvas API. Sem upload, funciona offline.
Compress — prévia (slider + comparação de formatos)100% no seu navegador, canvas.toBlob. Sem upload.
Compress — download finalUma ida e volta ao nosso serviço em api.araluma.com (Fastify + sharp + libvips em um VPS na Alemanha).
Remove BackgroundUma ida e volta a um Cloudflare Worker que executa o BiRefNet nas GPUs de borda da Cloudflare, com fallback em WebAssembly no seu navegador quando a nuvem está inacessível.

Você pode verificar as afirmações client-side em cerca de 30 segundos: abra o DevTools → Network, limpe o log e use o Circle Crop ou o slider de prévia do Compress — você não verá nenhuma requisição carregando os bytes da sua imagem saindo da página. Para as duas ferramentas que passam pelo servidor, você verá exatamente um upload por operação, para os endpoints indicados acima.

Por que híbrido

A maioria das ferramentas de imagem online fica em um extremo: enviar tudo para um servidor (você espera duas idas e voltas e o operador guarda seu arquivo) ou tudo no navegador (você paga em qualidade e velocidade nas etapas de codificação e IA). Nenhum dos extremos vence em tudo.

Escolhemos o client-side onde os navegadores já são excelentes — o elemento <canvas> cuida de recorte, rotação e recodificação com prévia em JPG/WebP — e o server-side onde o navegador ainda perde de forma mensurável:

  • Compressão de imagem, no download final. O sharp + libvips 8.17 no servidor produz arquivos 10–15% menores byte a byte que os encoders do navegador com a mesma qualidade visual, e dá acesso ao ajuste fino de velocidade/chroma do AVIF e à saída em JPEG XL, que o navegador não expõe. O slider e a prévia ainda rodam no seu navegador para que a iteração continue instantânea; só o toque em “Download” passa pelo nosso serviço.
  • Remoção de fundo por IA, no caminho padrão. O modelo BiRefNet que o cf.image.segment da Cloudflare executa (mesma arquitetura do remove.bg) precisa de uma GPU de verdade para terminar em 1–3 segundos. O fallback no navegador (ISNet via ONNX Runtime + WebAssembly) funciona, leva 20–40 segundos na primeira execução e 2–10 segundos nas seguintes, e produz um recorte visivelmente mais grosseiro em cabelos, pelos e bordas finas.

O custo que aceitamos por usar server-side nessas duas situações é uma ida e volta por operação. O custo que evitamos ao permanecer client-side no restante (Circle Crop, prévia do Compress) é exatamente esse custo de ida e volta nas partes do fluxo que iteram com mais frequência.

O pipeline, passo a passo

1. Você seleciona um arquivo

Pelo seletor de arquivos, arrastar e soltar ou colar, o navegador entrega ao JavaScript um objeto File. O JavaScript lê os bytes usando FileReader ou Blob.arrayBuffer(). Em nenhum momento dessa etapa o arquivo é enviado pela rede, independentemente de qual ferramenta você estiver usando.

2. O navegador decodifica a imagem

Navegadores modernos decodificam nativamente JPG, PNG, WebP, GIF e AVIF. Usamos createImageBitmap() para converter os bytes brutos em um bitmap que a GPU consegue processar, fora da thread principal. Para HEIC em navegadores que não o decodificam nativamente, recorremos a um decoder WebAssembly que roda localmente no seu navegador.

3. A ferramenta faz o seu trabalho — aqui os caminhos divergem

  • Circle Crop. Uma transformação de pixel Canvas 2D com um caminho de recorte circular. O bitmap é desenhado em um <canvas> na rotação e zoom escolhidos, o recorte circular é aplicado e o interior do círculo é lido de volta como ImageData. O Cropper.js cuida da interação do quadro de recorte. Inteiramente no seu navegador.
  • Compress — prévia e slider. Recodifica JPG, PNG, WebP ou AVIF usando canvas.toBlob para que a prévia lado a lado atualize conforme você move o slider de qualidade. Inteiramente no seu navegador. Sem upload ainda.
  • Compress — Download. Quando você toca em “Download”, a imagem é enviada uma única vez para api.araluma.com (um serviço Fastify rodando em um VPS na Alemanha operado pela Hostinger, Node 24 + sharp 0.34 + libvips 8.17, as mesmas bibliotecas C que o Squoosh usa no seu caminho de servidor). A imagem é recodificada com os mesmos parâmetros definidos na prévia e os bytes são transmitidos de volta ao seu navegador. O serviço mantém um cache endereçado por conteúdo e isolado por tenant (um hash dos bytes de entrada + parâmetros) com limite de 500 MB, de modo que baixar a mesma imagem com as mesmas configurações reproduz os bytes do cache — o cache não é indexado por você, IP ou nome de arquivo. Se o serviço estiver inacessível, a ferramenta cai de volta ao blob da prévia no navegador.
  • Remove Background — caminho padrão na nuvem. A imagem é enviada uma única vez a um Cloudflare Worker (araluma-bg-remover), armazenada temporariamente em um bucket R2 privado (araluma-bg-temp), processada pela transformação cf.image.segment da Cloudflare — que executa o modelo BiRefNet nas GPUs de borda da Cloudflare — e o recorte é transmitido de volta. O objeto R2 temporário é deletado dentro de uma hora por uma regra de ciclo de vida do R2, independentemente do resultado. Uma foto típica termina em 1–3 segundos. Limites diários por IP e de 5 MB de upload mantêm o tier gratuito sustentável.
  • Remove Background — fallback em WebAssembly. Se o Worker estiver inacessível (sua rede caiu, você está atrás de um firewall restritivo, a cota diária foi atingida ou o arquivo ultrapassa o limite de 5 MB na nuvem), a ferramenta muda silenciosamente para o modelo ISNet rodando localmente no seu navegador via ONNX Runtime Web com WebAssembly. A primeira execução baixa o modelo de ~80 MB e leva 20–40 segundos; as execuções seguintes levam 2–10 segundos. Sem upload nesse caminho — você pode verificar no DevTools.

4. Você baixa o resultado

O bitmap de saída é codificado em um Blob, embrulhado em uma object URL e oferecido ao diálogo padrão de salvar arquivo do seu navegador. O arquivo aparece no seu disco.

Como verificar por conta própria

Escolha qual prefere:

Método 1 — Observe a aba Network

  1. Abra o Araluma em uma aba nova e abra o DevTools → Network.
  2. Use o Circle Crop ou o slider de prévia do Compress. Você verá requisições de HTML/CSS/JS/fontes apenas, mais os módulos WebAssembly relevantes no primeiro uso. Nenhuma requisição vai carregar os bytes da sua imagem.
  3. Agora use Compress → Download ou Remove Background. Você verá exatamente um POST para api.araluma.com (Compress) ou para o Worker do Remove Background, carregando sua imagem — e uma resposta voltando com o resultado. Passe o cursor sobre qualquer requisição para ver tamanho e tempo.

A coluna “Initiator” diz qual script acionou cada requisição, e a coluna “Type” diz o que foi enviado. Não ocultamos nenhuma das duas.

Método 2 — Use as ferramentas offline

  1. Carregue qualquer página de ferramenta do Araluma. Use o Remove Background uma vez em uma imagem pequena para que o modelo ISNet fique em cache no navegador.
  2. Abra o DevTools → Network → marque Offline (ou desligue o Wi-Fi).
  3. Recarregue a página; os assets estáticos estão em cache, então ela ainda carrega.
  4. Experimente cada ferramenta:
    • Circle Crop e a prévia do Compress continuam funcionando — nunca precisaram de rede.
    • Compress Download cai de volta ao blob da prévia no navegador (encode ligeiramente menos eficiente, mas funcional).
    • Remove Background cai de volta ao modelo ISNet em WebAssembly e funciona sem nenhuma requisição de saída.

Se as quatro ferramentas funcionaram offline (uma ligeiramente degradada, três idênticas), por definição nenhum servidor viu sua imagem.

O que vemos — e o que não vemos

Nos caminhos client-side, não vemos nada sobre sua imagem. Não há requisição para examinar, nem cache para armazená-la, nem linha de log para rastrear.

Nos caminhos server-side:

  • Compress Download vê os bytes da imagem durante o tempo de codificação (tipicamente algumas centenas de milissegundos), mantém uma entrada de cache endereçada por conteúdo pelo TTL do cache, e só isso. O cache não é indexado por usuário, IP, nome de arquivo ou qualquer identificador que pudesse ser usado para encontrar “suas” imagens. Não registramos o conteúdo das imagens. O serviço de codificação é compartilhado entre os mesmos dois tenants que o v1 atendia antes do corte, com CORS, limites de taxa e URLs canônicas assinadas por HMAC por tenant.
  • Remove Background vê a imagem durante o tempo do upload de staging e da chamada de segmentação (tipicamente 1–3 segundos no total), após o qual a cópia temporária é deletada pela regra de ciclo de vida do R2. Nunca chamamos nenhum provedor externo de modelos com seus bytes — o modelo BiRefNet roda dentro da própria infraestrutura da Cloudflare, não em uma API externa no estilo remove.bg / fal.ai / Replicate.

Em todos os caminhos, nosso provedor de analytics (Cloudflare Web Analytics) registra dados agregados de visualização de página — URL, país, família de navegador, Core Web Vitals. Sem cookies, sem identificadores persistentes, nada vinculado a uma pessoa.

Para ferramentas que baixam um módulo WebAssembly no primeiro uso (o decoder de HEIC, o modelo ONNX do ISNet), nosso provedor de hospedagem vê que alguém buscou o módulo — da mesma forma que vê alguém buscar o arquivo CSS. O módulo em si não contém nenhuma informação sobre sua imagem.

O inventário completo de dados está em nossa política de privacidade.

A stack de tecnologia

Para os curiosos:

  • Astro — o gerador de sites estáticos. Cada página é entregue como HTML simples com “islands” JavaScript com progressive enhancement apenas onde as ferramentas interativas vivem.
  • CSS vanilla com custom properties — sem Tailwind, sem CSS-in-JS. O sistema de design completo é um único arquivo tokens.css.
  • canvas.toBlob / <canvas> — codificação de JPEG, PNG, WebP, AVIF (suportados pelo navegador) na prévia do Compress e em todo o Circle Crop.
  • Cropper.js — a camada de interação do quadro de recorte.
  • ONNX Runtime Web — executa o fallback WebAssembly do ISNet no Remove Background.
  • Cloudflare Pages — hospeda o build estático, serve-o a partir da borda.
  • Cloudflare Workers + R2 + cf.image.segment (BiRefNet) — o pipeline padrão do Remove Background.
  • Fastify + sharp 0.34 + libvips 8.17 em Node 24 — o serviço de download do Compress em api.araluma.com, em um VPS da Hostinger na Alemanha.
  • Cloudflare Web Analytics — contagens de visualizações de página agregadas, sem cookies.

Suporte a navegadores

Todas as ferramentas funcionam na versão atual e na anterior do Chrome, Firefox, Safari e Edge — desktop e mobile. O site usa progressive enhancement: onde um navegador suporta uma API mais recente (ex.: showSaveFilePicker, OffscreenCanvas), usamos ela; onde não suporta, recorremos ao equivalente mais antigo. Não há barreira de “seu navegador não é compatível”.

Os únicos requisitos obrigatórios são JavaScript (para qualquer ferramenta) e conexão de rede (apenas ao usar o Compress Download ou o caminho padrão do Remove Background — os demais caminhos rodam totalmente offline após o primeiro carregamento da página).

Dúvidas

Algo que não cobrimos? Envie um e-mail para support@araluma.com. Perguntas técnicas são bem-vindas.