Skip to main content
Glama

obrobka

Обработка изображений, которая полностью работает в вашем браузере — конвертация, изменение размера, удаление фона. Файлы никогда не покидают устройство.

obrobka.dobrovolskyi.com.ua

Сначала украинский, затем английский. Лицензия MIT.


Что делает

Конвертация

PNG · JPEG · WebP · AVIF на выходе; HEIC также читается на входе

Подгонка под точный размер

пять режимов — contain, cover, fill, inside, outside

Удаление фона

три уровня моделей, от 4.4 MB до 84 MB

Контур

цветная обводка вокруг объекта, холст увеличивается, чтобы вместить

Кадрирование по объекту

выделяет объект, а не центр

Увеличение

Swin2SR ×2 или ×4, с разбиением на тайлы, чтобы память оставалась стабильной

Пакетная обработка

много файлов сразу, результат в ZIP

Метаданные

просмотр того, что хранит файл; результат не содержит их

Всё работает как WebAssembly в Web Worker. Нет сервера, нет загрузки и нет аккаунта.

Related MCP server: Agent Helper

Почему это может вас заинтересовать

Одно и то же ядро обеспечивает работу браузерного приложения и MCP-сервера. packages/core не использует ни DOM, ни Node API — это чистые функции над RGBA-буферами, а весь ввод-вывод скрыт за портами. Один runJob() обслуживает и вкладку браузера, и ИИ-агента.

npx obrobka-mcp

Предоставляет агенту восемь инструментов — convert_image, resize_image, remove_background, smart_crop, upscale_image, read_metadata, strip_metadata и process_batch — работающих с путями к файлам, а не с base64-блобами.

Выбор моделей основан на измерениях, а не на карточках моделей. Каждый кандидат был скачан и профилирован перед выбором — цифры см. в плане M2. Два результата изменили дизайн:

  • MODNet и ormbg обучены только на людях. На нечеловеческом объекте они возвращают пустую маску, что исключает их как универсальный вариант по умолчанию.

  • BiRefNet_lite был убит OOM killer'ом на 1024×1024 при 4.2 GB свободной памяти. У вкладки браузера потолок ещё ниже, поэтому он был исключён.

U²-Netp оказался универсальным при 4.4 MB, что делает уровень по умолчанию в десять раз легче, чем планировалось изначально.

Ваши фотографии с телефона выходили повёрнутыми набок, и ничто об этом не сообщало. JPEG и HEIC хранят ориентацию как тег, а не в пикселях. @jsquash/jpeg игнорирует его; браузерный <img> применяет его. Поэтому предпросмотр «до» выглядел вертикальным, а результат выходил набок — это было измерено на специально созданном JPEG 8×4 с тегом Orientation: 6, который декодировался в 8×4 как с тегом, так и без него. Теперь конвейер читает тег и сначала поворачивает изображение, до любой операции, которая рассуждает о координатах.

У пакетного параллелизма есть два разных правильных ответа. Без модели четыре воркера сокращают обработку 20 файлов с 3639 мс до 1186 мс — 3.1× для 223 MB. С моделью тот же пул — ловушка: ONNX Runtime уже распараллеливает внутри сессии, поэтому четыре сессии U²-Netp дают 1.8× для 1.2 GB, а две сессии isnet достигают 2.2 GB, что больше, чем может удержать вкладка. Поэтому пул — needsModel ? 1 : min(cores − 1, 4).

Сжатие ZIP зависит от формата, и не так, как можно было бы предположить. Дефлирование WebP экономит 0.1 % при десятикратном расходе CPU — как и ожидалось. Дефлирование наших PNG экономит 15.2 %, потому что энкодер сжимает быстро и оставляет избыточность. Для PNG — уровень 4, для всего остального — store.

Архитектура

packages/core             pure ops over RGBA buffers — no DOM, no Node
  ops/                    resample · crop · fit · mask · outline · smartCrop
  ports/                  Codec · Segmenter · Upscaler · Metadata
packages/codecs           jSquash, split into browser and Node adapters
packages/models           model registry and three preprocessing recipes
packages/onnx-node        onnxruntime-node + on-disk cache
packages/onnx-web         onnxruntime-web + Cache Storage, WebGPU → WASM
packages/metadata         EXIF reading (exifr) and byte-level stripping
packages/heic             libheif, isolated — LGPL, loaded on demand
packages/contract-tests   one suite, run against both adapters
apps/web                  Astro + Svelte island, PWA
apps/mcp                  stdio MCP server

Контрактные тесты — это суть границы порта: один и тот же набор тестов запускается против onnxruntime-node и onnxruntime-web, поэтому расхождение между ними обнаруживается сразу, а не в продакшене.

Модели

Все модели распространяются под разрешительными лицензиями — проект принимает пожертвования, что делает некоммерческие лицензии моделей неподходящими.

Уровень

Модель

Размер

Лицензия

Охват

Быстрый (по умолчанию)

U²-Netp

4.4 MB

Apache-2.0

любой объект

Портрет

MODNet fp16

12.4 MB

Apache-2.0

только люди

Качество

isnet-general

84.1 MB

MIT

любой объект

Модели раздаются из R2 и кэшируются в браузере после первого использования.

Разработка

Требуются Node ≥ 22.12 и pnpm 11.

pnpm install
pnpm typecheck
pnpm test
pnpm --filter @obrobka/web dev

Некоторым тестам нужен настоящий HEIC, который нельзя сгенерировать локально — libheif только читает. Файл один раз загружается из набора соответствия HEIF и кэшируется в ~/.cache/obrobka/fixtures, рядом с моделями. Всё остальное, включая JPEG с EXIF-ориентацией и GPS, собирается байт за байтом во время теста: фотография в репозитории была бы чьей-то фотографией с чьими-то координатами.

Сквозные тесты запускаются против статического сервера, который применяет продакшн-заголовки _headers, потому что иначе crossOriginIsolated невозможно проверить:

pnpm --filter @obrobka/web build
pnpm exec playwright test

Примечание о тестах

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

Более ранний тестовый образец — плоский круг с жёстким краем — оказался вне распределения для этих моделей: одна и та же форма получала оценку 0.97 или 0.03 в зависимости только от того, была ли она увеличена. Полезно знать, если вы пишете тесты против моделей сегментации.

Лицензия

MIT. Веса моделей имеют собственные лицензии, перечисленные выше.

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • AI image processing: upscale, resize, crop, compress, convert file format, and generate SEO metadata

  • OCR, transcription, file extraction, and image generation for AI agents via MCP.

  • Generate images, GIFs, and PDFs from HTML, URLs, or templates — from your AI agent.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ThatHunky/obrobka'

If you have feedback or need assistance with the MCP directory API, please join our Discord server