Коротко о главном
RoundCut использует гибридную архитектуру: большинство инструментов работает целиком в вашем браузере с нулевой загрузкой, а горстка отправляет один-единственный сетевой запрос через нашу собственную инфраструктуру, когда браузер не может сравняться по качеству, и всегда с незаметным запасным вариантом на стороне клиента. Мы говорим вам, на каком вы пути, в каждом инструменте и на этой странице.
Таблица ниже репрезентативна, а не исчерпывающа (новые инструменты выходят регулярно). Она показывает по одному примеру каждого типа пути:
| Пример инструмента | Где происходит работа |
|---|---|
| Обрезка по кругу (только браузер) | 100% в вашем браузере, Canvas API. Без загрузки, работает офлайн. |
| Предпросмотр сжатия (только браузер) | 100% в вашем браузере, canvas.toBlob. Без загрузки. Ползунок остаётся мгновенным. |
| Финальная загрузка сжатия (затрагивает сервер) | Один полный цикл к нашему сервису на api.roundcut.com.br (Fastify + sharp + libvips на VPS в Германии), с запасным вариантом в браузере. |
| Удаление фона (затрагивает сервер) | Один полный цикл к Cloudflare Worker, который запускает BiRefNet на пограничных GPU Cloudflare, с запасным вариантом на WebAssembly в вашем браузере, когда облако недоступно. |
Обрезка, изменение размера, конвертация формата (кроме кодирования AVIF) и предпросмотр сжатия, всё это работает полностью в вашем браузере. Удаление фона, загрузка сжатия, ИИ-увеличение, кодирование AVIF и PDF из нескольких изображений каждое отправляет один-единственный запрос и откатывается к браузеру, когда облако недоступно.
Вы можете проверить заявления о стороне клиента примерно за 30 секунд: откройте DevTools → Network, очистите журнал, затем используйте инструмент только на браузере, например Обрезку по кругу или ползунок предпросмотра сжатия, вы увидите ноль запросов, уносящих байты вашего изображения за пределы страницы. Для инструментов, затрагивающих сервер, вы увидите ровно одну загрузку на операцию, на названные конечные точки.
Почему гибридная
Большинство онлайн-инструментов для изображений сидит на одном из краёв: загрузить-всё-на-сервер (вы ждёте полных циклов, а оператор хранит ваш файл) или всё-в-браузере (вы платите качеством и скоростью на шагах кодирования/ИИ). Ни одна крайность не выигрывает везде.
Мы выбрали сторону клиента там, где браузеры уже превосходны, элемент <canvas>
справляется с обрезкой, поворотом, изменением размера и кодированием предпросмотра с
потерями в JPG/WebP, и сторону сервера там, где браузер всё ещё измеримо проигрывает:
- Сжатие изображений, при финальной загрузке. Серверный
sharp+libvips 8.17выдаёт файлы на 10-15% меньше байт в байт, чем браузерные кодировщики при том же визуальном качестве, и даёт доступ к настройке скорости/цветности AVIF и выводу в JPEG XL, который браузер не предоставляет. Ползунок и предпросмотр по-прежнему работают в вашем браузере, чтобы итерация оставалась мгновенной, через наш сервис проходит только нажатие «Download». - ИИ-удаление фона и ИИ-увеличение, на пути по умолчанию. Моделям (BiRefNet для сегментации, супер-разрешение для увеличения) нужна настоящая GPU, чтобы закончить за секунды. Запасные варианты в браузере работают, но они медленнее и дают заметно более грубый результат на волосах, шерсти и тонких краях.
- Кодирование AVIF, при конвертации. Встроенный в браузер кодировщик AVIF медленный на некоторых устройствах, поэтому вывод AVIF отправляет один запрос на Worker сжатия, с кодированием в браузере в основном потоке в качестве запасного варианта.
Цена, которую мы принимаем за серверную сторону на этих путях, это один полный цикл на операцию. Цена, которой мы избегаем, оставаясь на стороне клиента во всём остальном, это плата за полный цикл на тех частях процесса, что итерируются быстрее всего.
Конвейер, шаг за шагом
1. Вы выбираете файл
Через выбор файла, перетаскивание или вставку браузер передаёт JavaScript объект
File. JavaScript читает байты с помощью FileReader или Blob.arrayBuffer(). Ни
в один момент этого шага файл не отправляется по сети, независимо от того, какой
инструмент вы используете.
2. Браузер декодирует изображение
Современные браузеры нативно декодируют JPG, PNG, WebP, GIF и AVIF. Мы используем
createImageBitmap(), чтобы превратить сырые байты в растр, с которым GPU может
работать, вне основного потока. Для HEIC в браузерах, которые не декодируют его
нативно, мы откатываемся к декодеру WebAssembly, работающему локально в вашем браузере.
3. Инструмент делает своё дело, вот здесь пути расходятся
- Инструменты только на браузере (обрезка, изменение размера, конвертация формата в PNG/JPEG/WebP, предпросмотр сжатия). Преобразование пикселей в Canvas 2D или кодек WebAssembly перекодирует растр локально. Результат готов без какой-либо загрузки. Cropper.js управляет интерактивной рамкой обрезки в инструментах обрезки, а
canvas.toBlobотвечает за перекодирование предпросмотра. Целиком в вашем браузере. - Сжатие, загрузка. Когда вы нажимаете «Download», изображение один раз отправляется на
api.roundcut.com.br(сервис Fastify, работающий на VPS в Германии под управлением Hostinger, Node 24 +sharp 0.34+libvips 8.17, те же C-библиотеки, что Squoosh использует на своём серверном пути). Оно перекодируется с теми же параметрами, что вы задали в предпросмотре, и байты потоком возвращаются в ваш браузер. Сервис держит изолированный по арендатору, адресуемый по содержимому кэш (хеш входных байтов + параметров), ограниченный 500 МБ, чтобы повторная загрузка того же изображения с теми же настройками воспроизводила кэшированные байты, кэш не индексируется по вам, IP или имени файла. Если сервис недоступен, инструмент откатывается к blob предпросмотра в браузере. - Удаление фона, облачный путь по умолчанию. Изображение один раз загружается на Cloudflare Worker, временно помещается в приватный бакет R2, обрабатывается преобразованием
cf.image.segmentот Cloudflare, которое запускает модель BiRefNet на пограничных GPU Cloudflare, и вырезанный объект потоком возвращается обратно. Временный объект R2 удаляется в течение часа правилом жизненного цикла R2, каким бы ни был исход. Типичное фото завершается за 1-3 секунды. Дневные лимиты по IP и загрузка до 5 МБ держат бесплатный уровень устойчивым. - Другие инструменты с облачной поддержкой (ИИ-увеличение, кодирование AVIF, PDF из нескольких изображений) следуют той же форме: один запрос на названную инфраструктуру (облачный API для изображений ради супер-разрешения, Worker сжатия для кодирования AVIF, наш сервис VPS для PDF из нескольких изображений), результат потоком обратно и прозрачный запасной вариант в браузере, если этот запрос не пройдёт.
- Запасной вариант на WebAssembly. Если соответствующий облачный путь недоступен (ваша сеть отвалилась, вы за строгим брандмауэром, дневная квота заполнена или файл превышает облачный лимит), инструмент прозрачно переключается на локальную модель или кодек, работающий в вашем браузере, например модель удаления фона ISNet через ONNX Runtime Web с WebAssembly. Первый запуск скачивает модель и идёт медленнее, последующие запуски быстрее. Без какой-либо загрузки на этих запасных путях, вы можете проверить это в DevTools.
4. Вы скачиваете результат
Выходной растр кодируется в Blob, оборачивается в object URL и предлагается
стандартному диалогу сохранения файла вашего браузера. Файл появляется на вашем диске.
Как проверить самому
Выберите то, что вам удобнее:
Способ 1. Следите за вкладкой Network
- Откройте RoundCut в новой вкладке и откройте DevTools → Network.
- Используйте инструмент только на браузере, Обрезку по кругу или ползунок предпросмотра сжатия. Вы увидите запросы только для HTML/CSS/JS/шрифтов, плюс соответствующие модули WebAssembly при первом использовании. Ни один запрос не унесёт байты вашего изображения.
- Теперь используйте инструмент, затрагивающий сервер, Сжатие → Download или Удаление фона. Вы увидите ровно один
POST, несущий ваше изображение, и один ответ, приходящий обратно с результатом. Наведите курсор на любой запрос, чтобы увидеть размер и тайминг.
Колонка «Initiator» говорит вам, какой скрипт инициировал каждый запрос, а колонка «Type» говорит, что было отправлено. Мы не прячем ни ту, ни другую.
Способ 2. Используйте инструменты офлайн
- Загрузите любую страницу инструмента RoundCut. Используйте Удаление фона один раз на маленьком изображении, чтобы модель ISNet в браузере попала в кэш.
- Откройте DevTools → Network → отметьте Offline (или отключите Wi-Fi).
- Перезагрузите страницу, статические файлы в кэше, так что она всё равно загружается.
- Попробуйте инструменты:
- Инструменты только на браузере (Обрезка по кругу, изменение размера, предпросмотр сжатия) продолжают работать, им никогда не нужна была сеть.
- Загрузка сжатия откатывается к blob предпросмотра в браузере (кодирование чуть менее эффективное, но рабочее).
- Удаление фона откатывается к модели ISNet на WebAssembly и работает без какого-либо исходящего запроса.
Если инструменты сработали офлайн (облачные слегка ослаблены, браузерные идентичны), то по определению ни один сервер не видел ваше изображение.
Что мы видим, а что нет
На путях стороны клиента мы не видим ничего о вашем изображении. Нет запроса, чтобы посмотреть, нет кэша, чтобы его хранить, нет строки лога, чтобы поискать.
На путях стороны сервера:
- Сервис сжатия и PDF видит байты изображения на время кодирования (обычно несколько сотен миллисекунд), держит запись кэша, адресуемую по содержимому, в течение 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 Pages, хостит статический билд, отдаёт его с границы сети.
- Cloudflare Workers + R2 +
cf.image.segment(BiRefNet), конвейер Удаления фона по умолчанию. - Fastify +
sharp 0.34+libvips 8.17на Node 24, сервис сжатия и PDF наapi.roundcut.com.br, на VPS Hostinger в Германии. - Cloudflare Web Analytics, агрегированный подсчёт просмотров страниц без cookie.
Поддержка браузеров
Каждый инструмент работает в текущей и предыдущей версии Chrome, Firefox, Safari и
Edge, на десктопе и мобильном. Сайт использует прогрессивное улучшение: где браузер
поддерживает более новый API (например, showSaveFilePicker, OffscreenCanvas), мы
его используем, где не поддерживает, откатываемся к более старому эквиваленту. Нет
никакой стены «ваш браузер не поддерживается».
Единственные жёсткие требования, это JavaScript (для любого инструмента) и сетевое соединение (только при использовании инструмента с облачной поддержкой на его пути по умолчанию, инструменты только на браузере работают полностью офлайн после первой загрузки страницы).
Вопросы
Что-то мы не охватили? Пишите на support@roundcut.app. Технические вопросы приветствуются.