Mellow HubЦены

БЛОГ

Разбор фото на устройстве с CLIP в браузере: 80% верно в fp32 и 5% в 8 битах

Как Cerebro разбирает папку фото в браузере с MobileCLIP-S0, почему 8-битные веса угадали 24 из 451 и что показал fp32 3 ноября 2026 года.

← Все обновления

Стена маленьких картинок из примерной ленты Cerebro: селфи, еда, пляжи, храмы, горы и несколько экранов Mellow Hub; все фото в ней сгенерированы ИИ, это не чья-то настоящая медиатека

Главное в цифрах

  • 3 ноября 2026 года полноточный (fp32) кодировщик изображений MobileCLIP-S0 разложил по верным папкам 342 из 425 размеченных фото (80%) и 19 из 22 видео (86%) в нашем тесте в браузере.
  • 8-битные веса, которые идут с той же моделью MobileCLIP-S0, угадали 24 из 451 снимка, около 5%, поэтому Cerebro в Mellow Hub использует только веса fp32.
  • Кодировщик изображений в fp32 весит около 45,5 МБ и отдаётся с нашего сайта двумя файлами меньше 25 МиБ, предела для статического файла; текстовые векторы папок посчитаны заранее, так что текстовая модель в браузер не попадает.
  • Перенос распознавания в два-три Web Worker позволил разобрать тестовую папку из 1 821 файла на 657 МБ за 115 секунд без единого кадра дольше 100 мс (3 ноября 2026 года).
  • В Chrome нашего основателя на рабочем сайте Cerebro 3 ноября 2026 года разложил 14 файлов по 8 папкам за 18 секунд, нашёл дубликат и скриншот и ничего не загрузил на сервер.
  • В Hub для Mac фреймворк Apple Vision выдавал около 158 анализов в секунду на M4, а медиатека «Фото» из 65 588 объектов читалась на MacBook около 17 минут (5 ноября 2026 года).

Слушать главное1:56ИИ-голос

Ситуация и цель

3 ноября 2026 года основатель прислал шесть роликов, где «Claude разбирает мои фото после поездки»: сотни миниатюр разлетаются по подписанным папкам, бегут счётчики. У лучшего было 2,65 млн просмотров и 18 103 комментария. Ни один из авторов не выпустил инструмент: у каждого это была локальная HTML-страница, написанная ассистентом, или промпт.

Мы встроили такой инструмент в Mellow Hub под именем Cerebro с одним правилом с самого начала: ничего не загружается на сервер. Hub для Mac читает всю медиатеку «Фото», включая iCloud, через PhotoKit и Vision от Apple. Браузер медиатеку прочитать не может, поэтому в браузере Cerebro разбирает папку, которую человек выбрал сам, на его же компьютере. Этот кейс — про браузерную половину: какая модель, какие веса и насколько точно получилось.

Что мы сделали, по шагам

1. Модель, которая влезет в веб-страницу

Мы взяли MobileCLIP-S0 — маленькую модель CLIP от Apple (Apple Sample Code License, экспорт в ONNX от Xenova) — и отдаём только её половину для изображений. Она работает на onnxruntime-web 1.30.0 поверх WebAssembly в одном потоке: для нескольких потоков нужна страница с cross-origin isolation, а кабинет Hub не такой. Все файлы отдаются с нашего сайта, обе лицензии лежат рядом с весами.

Папки — это слова, а для слов нужен текстовый кодировщик, который мы не хотели тащить в браузер. Поэтому текстовые векторы папок посчитали один раз заранее и сохранили небольшим JSON с векторами из 512 чисел. Вектор картинки уходит в ближайшую папку, а если даже лучшее совпадение ниже 0,1 — в «Другое».

Папок для фото десять (Селфи, Люди, Образы, Еда и кафе, Путешествия, Природа, Места и интерьеры, Питомцы, Спорт, Документы и чеки) плюс «Другое». Видео уходит в «Видео с лицом» или в «Видео» — по двум векторам на одном из его кадров.

Папки фото в Cerebro со счётчиками: Селфи 359, Люди 287, Образы 182, Еда и кафе 372, Путешествия 452, Природа 362, Места и интерьеры 137, Питомцы 31, Спорт 42, Документы 32, Другое 21
Десять папок для фото плюс «Другое» так, как их показывает Cerebro на примерной медиатеке из 3 000 сгенерированных ИИ файлов на тестовом стенде. Примерные цифры, не настоящая медиатека.

2. Что решает не модель

  • Скриншоты и записи экрана определяются по файлу: имя вроде «Снимок экрана» на языках, на которых читают Hub, или PNG, который хотя бы в 1,9 раза выше, чем шире. Модель путала пейзажи с экранами приложений.
  • Дубликаты — по 64-битному разностному хешу: если хеши двух картинок различаются не больше чем в 3 битах, это одна картинка; ищем через индекс по четвертям, а не сравнением каждой пары.
  • HEIC с iPhone декодируется через libheif, если браузер сам его не открывает. Наш бесплатный конвертер HEIC в JPG тоже работает в браузере и ничего не загружает.

3. Выбор весов: 8 бит или полная точность

С моделью идут и 8-битные веса, они меньше, и обычно в браузер отдают именно такие. Мы проверили оба варианта на своих размеченных картинках до выпуска. 8-битные веса отправили в верную папку 24 из 451 картинки, около 5%. Полноточные веса fp32 угадали 342 из 425 фото (80%) и 19 из 22 видео (86%).

Мы отдаём только fp32. Веса — около 45,5 МБ, разрезанные на два файла по 22,8 МБ, потому что статический файл на нашем хостинге может быть не больше 25 МиБ. В коде записано: к 8-битному файлу не возвращаться.

4. Прочь из потока страницы

Первая версия декодировала, распознавала и сравнивала картинки прямо на странице, и большая папка основателя заморозила вкладку. Теперь работу делают два-три Web Worker (три при 8 и больше ядрах, два при 4, один, если устройство сообщает меньше 4 ГБ памяти), у каждого своя копия модели; картинка декодируется в ширину 512 пикселей, в очереди у воркера по две. Воркер, который молчит 60 секунд, заменяется, а его картинка уходит другому.

Результаты

Проверка (2026)Результат
Размеченный набор, 8 бит24 из 451 верно, около 5%
Размеченный набор, fp32, фото342 из 425 верно, 80%
Размеченный набор, fp32, видео19 из 22 верно, 86%
Chrome основателя, рабочий сайт, 3 нояб14 файлов за 18 с, 8 папок, найдены дубликат и скриншот
Тестовая папка, воркеры, 3 нояб1 821 файл, 657 МБ, 115 с, ни одного кадра дольше 100 мс

Chromium и WebKit дали одинаковые метки одним и тем же картинкам. В Chrome и Edge разобранные копии можно записать в папки «Mellow · папка» туда, куда выберет человек, — через выбор папки, который есть не в каждом браузере; Safari и Firefox разбирают, но писать папки не умеют, и страница так и говорит. Оригиналы никогда не перемещаются и не меняются.

На стороне Mac фреймворк Apple Vision выдавал около 158 анализов в секунду на M4 при шести одновременно, и больше параллельных задач не помогало. 5 ноября MacBook основателя читал его медиатеку из 65 588 объектов со скоростью около 64 в секунду — примерно 17 минут. Как выпускается и обновляется сам Hub для Mac — в отдельном кейсе.

Заметки к выпускам 1.3.0 и 1.2.0 Mellow Hub для Mac, обе от 3 ноября 2026 года: Cerebro разбирает любую папку и всю медиатеку «Фото», включая iCloud, распознаванием изображений Apple; ничего не загружается
Половина на Mac словами наших публичных заметок к выпускам 3 ноября 2026 года: распознавание изображений Apple прямо на Mac, ничего не загружается. Снимок 8 ноября 2026 года.

Что не сработало

  • 8-битные веса. Почему они ломаются, мы так и не выяснили. Знаем только, что на наших картинках — с огромным отрывом.
  • Примерно каждая пятая картинка уходит не в ту папку. Однажды цветок попал в «Питомцы». Это честный уровень маленькой общей модели с десятью папками и без обучения на фото самого человека.
  • Страница замерзала, пока работа не переехала в воркеры.
  • Совпадение имён повесило первый HEIC. В нашем воркере была своя функция libheif, которая перекрыла одноимённую глобальную переменную библиотеки, и первый HEIC ждал вечно. Теперь всё в воркере живёт внутри одной функции, а тест проверяет, что глобальных имён он не оставляет.
  • Safari тормозил на видео. Кадр после перемотки по одним метаданным блокировал страницу Safari на 1 004 мс на каждое видео и возвращал чёрный кадр. Если дождаться первых загруженных данных видео, выходит 6 мс и настоящая картинка.
  • Сюрприз с типом файла. Некоторые серверы отдают файл .mjs как загрузку, поэтому модули среды выполнения лежат как .js.
  • Не измерено: точность на настоящей личной медиатеке в браузере. Наш размеченный набор — наш собственный и небольшой, и 80% относятся именно к нему.

Как сделать это у себя

  1. Возьмите маленький кодировщик изображений CLIP в ONNX, например MobileCLIP-S0, и проверьте каждый набор весов, квантованный и полный, на своих размеченных картинках до выпуска.
  2. Посчитайте текстовые векторы категорий заранее и отдавайте только кодировщик изображений.
  3. Держите среду выполнения и веса на своём сайте и режьте веса под лимит хостинга на файл.
  4. Распознавайте в Web Worker, декодируйте в небольшую ширину через createImageBitmap, HEIC — внутри воркера.
  5. Скриншоты и дубликаты оставьте правилам о файле, а не модели.
  6. Пишите разобранные копии через File System Access API там, где браузер его поддерживает, и никогда не трогайте оригиналы.
  7. Для всей медиатеки «Фото» или iCloud нужно приложение. В Mellow Hub это Cerebro в Hub для Mac, который использует Apple Vision прямо на Mac.

Вопросы и ответы

Может ли CLIP разобрать фото в браузере, не загружая их?

Да. Cerebro запускает кодировщик изображений MobileCLIP-S0 на onnxruntime-web в Web Worker прямо на компьютере человека; 3 ноября 2026 года он разобрал 14 файлов за 18 секунд в Chrome на нашем рабочем сайте и ничего не загрузил.

Почему 8-битные веса CLIP такие неточные?

Причину мы не нашли. На наших размеченных снимках 8-битные веса из комплекта MobileCLIP-S0 угадали 24 из 451, а fp32 — 342 из 425 фото, поэтому квантованные веса стоит проверять на своих картинках до выпуска.

Насколько точно MobileCLIP-S0 раскладывает фото по папкам?

На нашем размеченном наборе в ноябре 2026 года fp32 отправил в верную папку 80% фото (342 из 425) и 86% видео (19 из 22). Примерно каждая пятая картинка всё равно попадает не туда.

Может ли сайт прочитать мою медиатеку iPhone или iCloud?

Нет. Веб-страница видит только файлы или папку, которые вы выбрали. Чтобы разобрать всю медиатеку «Фото» вместе с iCloud, Cerebro работает через Hub для Mac: он читает её через PhotoKit Apple и распознаёт прямо на Mac.

Сколько весит модель CLIP для браузера?

Наш кодировщик изображений MobileCLIP-S0 в fp32 — около 45,5 МБ двумя файлами меньше 25 МиБ каждый, плюс среда WebAssembly примерно на 14 МБ. Всё это скачивается, когда человек впервые разбирает папку.

Куда дальше

Ещё обновления

Все обновления · Опубликовано 3 ноября 2026 г.

Напишите основателю Hub

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

О чём сообщение?

Мы приложим адрес этой страницы, чтобы увидеть то же, что и вы.