Как работает Araluma

Технические подробности о том, что делает каждый инструмент, где он запускается и как вы можете это проверить самостоятельно.

Коротко о главном

Araluma использует гибридную архитектуру: два инструмента работают полностью в Вашем браузере без какой-либо загрузки на сервер, а два инструмента при необходимости направляют один сетевой запрос через собственную инфраструктуру — когда браузер не может обеспечить требуемое качество. На каждом инструменте и на этой странице мы явно указываем, какой путь используется.

ИнструментГде выполняется обработка
Circle Crop100% в Вашем браузере, Canvas API. Без загрузки, работает офлайн.
Compress — предпросмотр (слайдер и сравнение форматов)100% в Вашем браузере, canvas.toBlob. Без загрузки.
Compress — финальная загрузкаОдин запрос к нашему сервису на api.araluma.com (Fastify + sharp + libvips на VPS в Германии).
Remove BackgroundОдин запрос к Cloudflare Worker, который запускает BiRefNet на edge-GPU Cloudflare, с WebAssembly-запасным вариантом в Вашем браузере при недоступности облака.

Проверить клиентские утверждения можно примерно за 30 секунд: откройте DevTools → Network, очистите журнал, затем воспользуйтесь Circle Crop или слайдером предпросмотра Compress — Вы увидите ноль запросов, передающих байты Вашего изображения. При использовании двух инструментов, задействующих сервер, Вы увидите ровно одну загрузку на операцию — на указанные выше endpoints.

Почему гибридная архитектура

Большинство онлайн-инструментов для работы с изображениями располагаются на одном из крайних полюсов: «загрузить всё на сервер» (Вы ждёте туда-обратно, а оператор хранит Ваш файл) или «всё в браузере» (Вы жертвуете качеством и скоростью на этапах кодирования и AI). Ни одна из крайностей не побеждает везде.

Мы выбрали клиентскую обработку там, где браузеры уже справляются превосходно — элемент <canvas> обрабатывает кадрирование, поворот, масштабирование и предварительное перекодирование в JPG/WebP — и серверную там, где браузер по-прежнему заметно проигрывает:

  • Сжатие изображений, при финальной загрузке. Серверный sharp + libvips 8.17 создаёт файлы на 10–15% меньше байт-в-байт, чем браузерные кодировщики при том же визуальном качестве, и открывает доступ к настройкам скорости/хромы AVIF и выводу JPEG XL, недоступным в браузере. Слайдер и предпросмотр по-прежнему работают в Вашем браузере, так что итерации остаются мгновенными; только нажатие «Скачать» проходит через наш сервис.
  • AI-удаление фона, по умолчанию. Модель BiRefNet, которую запускает cf.image.segment Cloudflare (та же архитектура, что у remove.bg), требует настоящего GPU для завершения за 1–3 секунды. Запасной вариант в браузере (ISNet через ONNX Runtime + WebAssembly) работает, занимает 20–40 секунд при первом запуске и 2–10 секунд в дальнейшем, и даёт заметно более грубую обрезку на волосах, мехе и тонких краях.

Цена, которую мы платим за серверную обработку на этих двух путях, — один запрос на операцию. Цена, которую мы избегаем, оставаясь на стороне клиента везде в остальном (Circle Crop, предпросмотр Compress), — задержка запроса на тех частях рабочего процесса, которые итерируются быстрее всего.

Пайплайн по шагам

1. Вы выбираете файл

Через диалог выбора файла, перетаскивание или вставку браузер передаёт JavaScript объект File. JavaScript читает байты с помощью FileReader или Blob.arrayBuffer(). На этом шаге файл не отправляется по сети ни в какой момент, независимо от того, какой инструмент Вы используете.

2. Браузер декодирует изображение

Современные браузеры нативно декодируют JPG, PNG, WebP, GIF и AVIF. Мы используем createImageBitmap(), чтобы вне основного потока превратить сырые байты в битмап, с которым может работать GPU. Для HEIC в браузерах без нативной поддержки мы откатываемся к WebAssembly-декодеру, работающему локально в Вашем браузере.

3. Инструмент выполняет свою работу — здесь пути расходятся

  • Circle Crop. Трансформация пикселей Canvas 2D с круговым контуром обрезки. Битмап отрисовывается в <canvas> с выбранными поворотом и масштабом, применяется круговая обрезка, а содержимое круга считывается как ImageData. За интерактивную рамку кадрирования отвечает Cropper.js. Полностью в Вашем браузере.
  • Compress — предпросмотр и слайдер. Перекодирует JPG, PNG, WebP или AVIF с помощью canvas.toBlob, чтобы сравнение side-by-side обновлялось при перемещении слайдера качества. Полностью в Вашем браузере. Загрузки на сервер ещё нет.
  • Compress — загрузка. Когда Вы нажимаете «Скачать», изображение однократно отправляется на api.araluma.com (сервис Fastify на VPS в Германии, работающий на Hostinger, Node 24 + sharp 0.34 + libvips 8.17, те же C-библиотеки, которые Squoosh использует на серверном пути). Изображение перекодируется с теми же параметрами, что Вы задали в предпросмотре, и байты стримятся обратно в Ваш браузер. Сервис ведёт изолированный по арендатору кэш с адресацией по содержимому (хэш от входных байт + параметры) объёмом до 500 МБ, так что повторная загрузка того же изображения с теми же настройками воспроизводит кэшированные байты — кэш не индексируется по пользователю, IP или имени файла. Если сервис недоступен, инструмент откатывается к blob предпросмотра из браузера.
  • Remove Background — облачный путь по умолчанию. Изображение однократно загружается на Cloudflare Worker (araluma-bg-remover), помещается в приватный R2-бакет (araluma-bg-temp), обрабатывается трансформацией cf.image.segment Cloudflare, которая запускает модель BiRefNet на edge-GPU Cloudflare, и результат стримится обратно. Промежуточный объект R2 удаляется в течение одного часа правилом жизненного цикла R2 независимо от результата. Типичная фотография обрабатывается за 1–3 секунды. Суточные лимиты по IP и ограничение на загрузку в 5 МБ позволяют поддерживать бесплатный уровень.
  • Remove Background — запасной вариант WebAssembly. Если Worker недоступен (сеть упала, Вы находитесь за строгим файрволом, суточная квота исчерпана или файл превышает облачный лимит в 5 МБ), инструмент прозрачно переключается на модель ISNet, работающую локально в Вашем браузере через ONNX Runtime Web с WebAssembly. При первом запуске скачивается модель ~80 МБ, что занимает 20–40 секунд; последующие запуски выполняются за 2–10 секунд. На этом пути загрузки нет — Вы можете проверить это в DevTools.

4. Вы скачиваете результат

Выходной битмап кодируется в Blob, оборачивается в object URL и передаётся в стандартный диалог сохранения файла браузера. Файл появляется на Вашем диске.

Как проверить самостоятельно

Выберите удобный способ:

Способ 1 — Наблюдайте за вкладкой Network

  1. Откройте Araluma в новой вкладке и откройте DevTools → Network.
  2. Воспользуйтесь Circle Crop или слайдером предпросмотра Compress. Вы увидите запросы только за HTML/CSS/JS/шрифтами плюс соответствующие модули WebAssembly при первом использовании. Ни один запрос не будет содержать байты Вашего изображения.
  3. Теперь воспользуйтесь Compress → Скачать или Remove Background. Вы увидите ровно один POST на api.araluma.com (Compress) или на Worker удаления фона, содержащий Ваше изображение, — и один ответ с результатом. Наведите на любой запрос, чтобы увидеть размер и тайминг.

Столбец «Initiator» показывает, какой скрипт инициировал каждый запрос, а столбец «Type» — что именно было отправлено. Мы не скрываем ни то, ни другое.

Способ 2 — Используйте инструменты офлайн

  1. Откройте любую страницу инструмента Araluma. Воспользуйтесь Remove Background один раз на небольшом изображении, чтобы браузерная модель ISNet оказалась в кэше.
  2. Откройте DevTools → Network → поставьте галочку Offline (или отключите Wi-Fi).
  3. Перезагрузите страницу; статические ресурсы закэшированы, поэтому она всё равно загрузится.
  4. Попробуйте каждый инструмент:
    • Circle Crop и предпросмотр Compress продолжают работать — им сеть никогда не была нужна.
    • Compress — загрузка откатывается к blob предпросмотра из браузера (чуть менее эффективное кодирование, но работает).
    • Remove Background переключается на WebAssembly-модель ISNet и работает без каких-либо исходящих запросов.

Если все четыре инструмента заработали офлайн (один с незначительной деградацией, три идентично), то по определению ни один сервер не получил Ваше изображение.

Что мы видим — и что не видим

На клиентских путях мы не видим ничего о Вашем изображении. Нет запроса для анализа, нет кэша для хранения, нет строки журнала.

На серверных путях:

  • Compress — загрузка видит байты изображения в течение времени кодирования (обычно несколько сотен миллисекунд), сохраняет запись кэша с адресацией по содержимому на время TTL кэша — и всё. Кэш не индексируется по пользователю, IP, имени файла или любому идентификатору, по которому можно найти «Ваши» изображения. Содержимое изображений мы не логируем. Сервис кодирования разделён между теми же двумя арендаторами, что обслуживал v1 до перехода, с CORS, лимитами запросов и канонически подписанными HMAC URL для каждого арендатора.
  • Remove Background видит изображение в течение промежуточной загрузки и вызова сегментации (обычно 1–3 секунды суммарно), после чего промежуточная копия удаляется правилом жизненного цикла R2. Мы никогда не передаём Ваши байты стороннему провайдеру модели — модель BiRefNet работает внутри собственной инфраструктуры Cloudflare, а не через внешние API вроде remove.bg / fal.ai / Replicate.

На каждом пути наш провайдер аналитики (Cloudflare Web Analytics) фиксирует агрегированные данные о просмотрах страниц — URL, страна, семейство браузера, Core Web Vitals. Никаких куков, никаких постоянных идентификаторов, ничего, что было бы привязано к личности.

Для инструментов, которые при первом использовании скачивают модуль WebAssembly (HEIC-декодер, ONNX-модель ISNet), наш хостинг-провайдер видит, что кто-то запросил модуль, — точно так же, как он видит, что кто-то запросил CSS-файл. Сам модуль не содержит никакой информации о Вашем изображении.

Полный перечень собираемых данных — в нашей политике конфиденциальности.

Технологический стек

Для любопытных:

  • Astro — генератор статических сайтов. Каждая страница отдаётся как обычный HTML с прогрессивно улучшенными JavaScript-«островами» только там, где живут интерактивные инструменты.
  • Ванильный CSS с кастомными свойствами — никакого Tailwind, никакого CSS-in-JS. Вся дизайн-система — один файл tokens.css.
  • canvas.toBlob / <canvas> — кодирование JPEG, PNG, WebP, AVIF (поддерживаемых браузером) в предпросмотре Compress и во всём Circle Crop.
  • Cropper.js — слой взаимодействия с рамкой кадрирования.
  • ONNX Runtime Web — запускает WebAssembly-запасной вариант ISNet для Remove Background.
  • Cloudflare Pages — хостинг статической сборки с раздачей из edge-узлов.
  • Cloudflare Workers + R2 + cf.image.segment (BiRefNet) — основной пайплайн Remove Background.
  • Fastify + sharp 0.34 + libvips 8.17 на Node 24 — сервис загрузки Compress на api.araluma.com, на VPS Hostinger в Германии.
  • Cloudflare Web Analytics — агрегированный, без куков подсчёт просмотров страниц.

Поддержка браузеров

Все инструменты работают в текущей и предыдущей версиях Chrome, Firefox, Safari и Edge — на десктопе и мобильном. Сайт построен по принципу прогрессивного улучшения: там, где браузер поддерживает более новый API (например, showSaveFilePicker, OffscreenCanvas), мы его используем; там, где нет — откатываемся к старому эквиваленту. Никакого «Ваш браузер не поддерживается».

Единственные жёсткие требования — JavaScript (для любого инструмента) и сетевое соединение (только при использовании Compress — загрузка или основного пути Remove Background — остальные пути работают полностью офлайн после первой загрузки страницы).

Вопросы

Что-то не охватили? Напишите нам: support@araluma.com. Технические вопросы приветствуются.