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

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

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

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

Таблица ниже показательна, но не исчерпывающа (каталог продолжает расти). Она показывает по одному примеру каждого типа пути:

Пример инструментаГде происходит работа
Circle Crop (только браузер)100% в Вашем браузере, Canvas API. Без отправки, работает офлайн.
Предпросмотр сжатия (только браузер)100% в Вашем браузере, canvas.toBlob. Без отправки. Ползунок остаётся мгновенным.
Загрузка сжатия (обращение к серверу)Один обмен с нашим сервисом по адресу api.araluma.com (sharp плюс libvips на VPS в Германии), с запасным вариантом в браузере.
Удаление фона (обращение к серверу)Один обмен с Cloudflare Worker, на котором запущен BiRefNet на пограничных GPU, с запасным вариантом на WebAssembly в Вашем браузере.

Инструменты обрезки, изменения размера, PDF и преобразования форматов (кроме пути с выводом в AVIF) находятся на стороне только браузера. Загрузка сжатия, удаление фона, увеличение с помощью ИИ и преобразования с выводом в AVIF находятся на стороне с обращением к серверу, каждый со своим локальным запасным вариантом.

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

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

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

Мы выбрали сторону клиента везде, где браузеры уже превосходны. Элемент <canvas> справляется с обрезкой, поворотом, изменением размера и предпросмотровым кодированием с потерями в JPG или WebP, а современные браузеры нативно декодируют каждый распространённый формат. Мы выбрали сторону сервера только для тех немногих шагов, где браузер всё ещё измеримо проигрывает:

  • Сжатие, при финальной загрузке. Серверные sharp плюс libvips дают файлы на 10 до 15% меньше байт в байт, чем кодировщики браузера при той же визуальной зрелости, и открывают настройки скорости и цветности AVIF, которых браузер не даёт. Ползунок и предпросмотр по-прежнему работают в Вашем браузере, чтобы итерации оставались мгновенными. Только нажатие “Загрузить” проходит через наш сервис.
  • Удаление фона ИИ, на пути по умолчанию. Модель BiRefNet, которую запускает сегментация изображений Cloudflare (та же архитектура, что у remove.bg), требует настоящей GPU, чтобы справиться за секунду или две. Запасной вариант в браузере (ISNet через ONNX Runtime плюс WebAssembly) работает, но занимает гораздо больше времени и даёт заметно более грубый вырез на волосах, шерсти и тонких краях.
  • Увеличение с помощью ИИ, на пути по умолчанию. Облачное сверхвысокое разрешение восстанавливает детали, которые повторная выборка в браузере не может, с запасным вариантом в браузере, когда сервис недоступен.

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

Конвейер, шаг за шагом

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

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

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

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

3. Инструмент делает своё дело, где пути расходятся

  • Инструменты только для браузера (обрезка, изменение размера, предпросмотр и ползунок сжатия, сборка PDF и большинство преобразований форматов). Они выполняются как пиксельные преобразования Canvas и перекодирования canvas.toBlob прямо на Вашей машине. Интерактивная рамка обрезки использует Cropper.js. Ничего не покидает страницу.
  • Загрузка сжатия. Когда Вы нажимаете “Загрузить”, изображение один раз уходит на api.araluma.com (сервис Fastify на VPS Hostinger в Германии, Node плюс sharp и libvips, те же библиотеки C, что Squoosh использует на своём серверном пути). Оно перекодируется с параметрами, заданными Вами в предпросмотре, и байты возвращаются потоком. Сервис держит изолированный по арендаторам кеш с адресацией по содержимому (хеш входных байтов плюс параметры), так что повторная загрузка того же изображения с теми же настройками воспроизводит байты из кеша. Этот кеш не индексируется по Вам, Вашему IP или имени файла. Если сервис недоступен, инструмент переходит к предпросмотровому блобу в браузере.
  • Удаление фона, облачный путь по умолчанию. Изображение один раз загружается в Cloudflare Worker, размещается в приватном бакете R2, обрабатывается сегментацией изображений Cloudflare, запускающей модель BiRefNet на пограничных GPU, и вырез возвращается потоком. Размещённый объект удаляется в течение часа правилом жизненного цикла R2, независимо от результата. Обычная фотография завершается за секунду или две. Суточные ограничения на IP и размер отправки удерживают бесплатный уровень устойчивым.
  • Удаление фона, запасной вариант на WebAssembly. Если Worker недоступен (Ваша сеть отвалилась, строгий брандмауэр его блокирует, суточная квота заполнена или файл слишком велик для облачного предела), инструмент тихо переключается на модель ISNet, работающую локально через ONNX Runtime Web и WebAssembly. Первый запуск скачивает модель и занимает больше времени, последующие запуски быстрее. Без отправки на этом пути, проверяемо в DevTools.
  • Увеличение с помощью ИИ. Путь по умолчанию один раз отправляет изображение в облачный сервис сверхвысокого разрешения и возвращает увеличенный результат потоком, с запасным вариантом в браузере, если сервис недоступен.

4. Вы загружаете результат

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

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

Выберите, что Вам удобнее:

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

  1. Откройте Araluma в новой вкладке и откройте DevTools, затем панель Network.
  2. Используйте инструмент только для браузера, например Circle Crop или ползунок предпросмотра сжатия. Вы увидите запросы только к HTML, CSS, JS и шрифтам, плюс соответствующие модули WebAssembly при первом использовании. Ни один запрос не унесёт байты Вашего изображения.
  3. Теперь используйте инструмент, обращающийся к серверу, например Загрузку сжатия или Удаление фона. Вы увидите ровно один POST, несущий Ваше изображение к именованной конечной точке, и один ответ с результатом. Наведите курсор на любой запрос, чтобы прочитать его размер и время.

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

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

  1. Загрузите любую страницу инструмента Araluma. Запустите Удаление фона один раз на маленьком изображении, чтобы модель ISNet в браузере попала в кеш.
  2. Откройте DevTools, перейдите в Network и отметьте Offline (или выключите Wi-Fi).
  3. Перезагрузите страницу. Статические ресурсы в кеше, поэтому она всё равно загружается.
  4. Попробуйте инструменты:
    • Инструменты только для браузера продолжают работать. Им никогда не нужна была сеть.
    • Загрузка сжатия переходит к предпросмотровому блобу в браузере (чуть менее эффективное кодирование, но рабочее).
    • Удаление фона переходит к модели ISNet на WebAssembly и работает без единого исходящего запроса.

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

Что мы видим, а что нет

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

На путях с обращением к серверу:

  • Загрузка сжатия видит байты изображения на время кодирования (обычно несколько сотен миллисекунд), хранит запись кеша с адресацией по содержимому в течение её TTL, и на этом всё. Кеш не индексируется по пользователю, IP, имени файла или любому идентификатору, который мы могли бы использовать, чтобы найти “Ваши” изображения. Мы не записываем содержимое изображения. Сервис кодирования общий для тех же арендаторов, что v1 обслуживала до перехода, с CORS по арендаторам, ограничениями частоты и каноническими URL, подписанными HMAC.
  • Удаление фона видит изображение на время загрузки во временное хранилище и вызова сегментации (обычно секунда или две), после чего временная копия удаляется правилом жизненного цикла R2. Мы никогда не передаём Ваши байты стороннему поставщику модели. Модель BiRefNet работает внутри собственной инфраструктуры Cloudflare, а не на внешнем API в стиле remove.bg, fal.ai или Replicate.
  • Увеличение с помощью ИИ видит изображение на время вызова сверхвысокого разрешения, возвращает результат и не сохраняет ничего, привязанного к Вам.

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

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

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

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

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

  • Astro, генератор статических сайтов. Каждая страница отдаётся как обычный HTML с прогрессивно улучшаемыми “островами” JavaScript только там, где есть интерактивные инструменты.
  • Чистый CSS с пользовательскими свойствами, без Tailwind, без CSS-in-JS. Вся система дизайна, это единственный файл tokens.css.
  • canvas.toBlob и <canvas>, кодирование JPEG, PNG, WebP и AVIF для инструментов и предпросмотров на стороне браузера.
  • Cropper.js, слой взаимодействия с прямоугольником обрезки.
  • ONNX Runtime Web, который запускает запасной вариант ISNet на WebAssembly для Удаления фона.
  • Cloudflare размещает статическую сборку и раздаёт её с границы сети, а также запускает Workers, R2 и конвейер сегментации изображений (BiRefNet) за путём Удаления фона по умолчанию.
  • Fastify с sharp и libvips на Node, сервис загрузки сжатия по адресу api.araluma.com, на VPS Hostinger в Германии.
  • Cloudflare Web Analytics, агрегированный подсчёт просмотров страниц без cookie.

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

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

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

Вопросы

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