clip-image-describe — замена вставленной картинки её описанием в Claude Code

03.08.26

Интеграция - Нейросети

Служба для Windows перехватывает Ctrl+V, распознаёт картинку из буфера локальной моделью зрения и кладёт вместо неё текстовое описание — в переписку с Claude Code уходит текст, а не изображение. Внутри: почему это невозможно сделать штатным хуком (с замерами), замеры восьми моделей зрения и четырёх распознавателей текста на одном снимке, опровергнутые гипотезы.

Проблема

Снимок экрана в контексте весит 1050–1840 токенов против 450–500 у своего описания — это замер на моих снимках; предел тарифа высокого разрешения (2576 точек по длинной стороне) — до 4784 токенов на картинку, так что на крупных снимках разница больше. Но главное не разовая цена: вложение остаётся в истории разговора и отправляется модели заново в каждом следующем запросе сессии. Десяток снимков за долгую беседу — и заметная часть окна занята картинками, которые давно разобраны.

Штатных рычагов нет:

  • данные вставленного изображения не отдаются ни хукам, ни расширениям — anthropics/claude-code#16592, открыт;
  • отключить обработку вставки нельзя — #43194, открыт.

 

Почему не получилось хуком

Очевидный план: хук UserPromptSubmit ловит сообщение, находит вложение в транскрипте, распознаёт, возвращает decision: "block" и подкладывает описание через additionalContext. Логика была написана и на подготовленной копии транскрипта работает. В бою не срабатывает никогда.

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

Замеры на Claude Code 2.1.220:

 

Прогон Что видел хук
16:40 запись с картинкой имеет метку 13:40:20.878Z; хук ждал её с 13:40:21.2 до 13:40:23.97 — 2,80 с опроса каждые 50 мс. Результат: не найдена
16:42 хук закончил ожидание в 16:42:22.56 и снял состояние файла: 204 записи, последняя пользовательская — 13:41:44.480Z, блоки ['tool_result']. Записи с картинкой нет. Постфактум она нашлась с меткой 13:42:19.461Z — то есть легла на диск после 16:42:22,5

 

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

 

Где живёт вставленная картинка

Разобрано по коду расширения .vscode/extensions/anthropic.claude-code-2.1.220-win32-x64/webview/index.js:

  1. Буфер обмена Windows — до нажатия Ctrl+V. Единственное звено, доступное снаружи.
  2. Ctrl+V → окно чата. FileReader.readAsDataURL(file) превращает картинку в строку data:image/png;base64,..., она складывается в массив вложений в состоянии поля ввода. На диск не пишется ничего — проверено сканированием %TEMP%, ~/.claude и хранилищ VS Code за период вставок.
  3. Отправка. Строка режется по запятой, собирается блок {type: "image", source: ...}.
  4. Транскрипт .jsonl — пишется последним, уже после хуков.

Вывод: вмешаться после Ctrl+V невозможно, значит, надо вмешаться до.

 

Решение

  1. Низкоуровневый перехватчик клавиатуры видит Ctrl+V во всей системе.
  2. Три быстрые проверки: активное окно принадлежит нужной программе, в буфере есть картинка (CF_DIB, CF_DIBV5 или CF_BITMAP), не зажат Shift.
  3. Совпало — нажатие поглощается, картинка сохраняется файлом, показывается окно-индикатор со счётчиком секунд, идёт распознавание.
  4. В буфер кладётся текст (описание плюс путь к оригиналу), служба сама посылает окну Ctrl+V.

Ctrl+Shift+V не перехватывается — путь «вставить как есть», когда изображение действительно нужно показать модели целиком.

 

Тонкости перехвата

Обработчик обязан отвечать за миллисекунды. Windows отключает низкоуровневый перехватчик клавиатуры, который думает дольше примерно 300 мс, а распознавание идёт секунды. В самом обработчике — только проверки, работа уходит в отдельный поток через канал:

if is_target && clipboard_has_image() {
    if BUSY.load(Ordering::SeqCst) { return LRESULT(1); }
    BUSY.store(true, Ordering::SeqCst);
    if let Some(tx) = TX.get() { let _ = tx.send(()); }
    return LRESULT(1); // нажатие поглощено
}

Не поймать собственную вставку. Служба сама посылает Ctrl+V, и её же перехватчик это видит. Спасает флаг LLKHF_INJECTED: у программно порождённых событий он взведён, такие нажатия пропускаются дальше.

Флаг занятости, а не очередь. Пока идёт распознавание, пользователь жмёт Ctrl+V ещё раз. Отложенные нажатия сработали бы после успеха, когда в буфере уже лежит текст, и вставили бы его повторно. Поэтому лишние нажатия поглощаются.

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

Любая ошибка = поведение как раньше. Буфер не трогается до успеха. Модель недоступна, вышло время, ответ пустой — в буфере всё ещё исходная картинка, служба просто посылает Ctrl+V. Сломанная служба не должна мешать работать.

 

Задание модели пришлось переписывать дважды

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

Рабочая формулировка задаёт границу явно: пометка — только дорисованное вручную (рамка, обводка, стрелка, подчёркивание, зачёркивание, мазок маркером); собственные элементы программы пометками не считаются; ничего не дорисовано — писать строго «пометок нет». Ответ разбит на три части: пометки, дословный текст, одна-две фразы про обстановку. Отдельно оговорено: длинные наборы букв и цифр переписывать посимвольно, при неуверенности ставить ? вместо того чтобы придумать.

 

Кто распознаёт — замеры

Все распознаватели проверены на одном снимке (1399×564, окно с текстом и таблицей) с одинаковым заданием. Считалось посимвольное совпадение пяти трудных строк:

b04o4i5o0 · 3e0d4a2d-7b81-4a9f-ac1e-73ac282e7d60 · c--CraftSkill · 14.12s · b8lolxzl0

Последняя — мелкий шрифт внутри снятой таблицы, «снимок снимка». Плюс три русские строки на проверку кириллицы.

 

Модель зрения Время Точность Пометки
Qwen3-VL-30B-A3B локально, RTX 3090 4,5–8 с 4/5 описывает
Qwen3-VL-32B локально, плотная 24,3 с 4/5 описывает
Haiku 4.5 через claude -p 20,7–32 с 3/5 описывает
Codex gpt-5.6-luna, подписка ChatGPT 32 с 4/5 описывает
bytedance-seed/seed-2.0-mini, OpenRouter 12–18 с 5/5 (3 прогона из 3) описывает
qwen/qwen3-vl-32b-instruct, OpenRouter 7,8 с 1/5 —
qwen/qwen3.7-flash, OpenRouter 105 с 3/5 —
meta-llama/llama-4-scout, OpenRouter 6–40 с 0/5, 0/5, 3/5 — неустойчива —

 

Снимок через seed-2.0-mini стоит около $0,0008.

 

Распознаватель текста Русский Латинские идентификаторы Время
RapidOCR, штатная китайско-английская модель не читает 3/5 — берёт мелкую строку 4,5 с
RapidOCR + кириллическая PP-OCRv5 отлично 2/5 — портит латиницу 4,2 с
EasyOCR (ru+en, torch) отлично 0/5 1,2 с на RTX 2060
PaddleOCR-VL-1.6 (0,9B, 1,8 ГБ) отлично 4/5 1,4–6,7 с

 

Характерная порча у кириллической модели: c--CraftSkill → c--Craftski11, 3e0d4a20 → Зе0d4а20. Русский она читает отлично ровно до тех пор, пока в строке не появляется латиница.

Выбрана локальная Qwen3-VL-30B-A3B: 4,5–8 с, 4/5, описывает и пометки, и смысл, не расходует лимиты подписок. Для мелкого шрифта в конфиге есть режим openrouter с seed-2.0-mini, по умолчанию выключен.

Обязательное условие для семейства Qwen-VL — запуск с --image-min-tokens 2048. Без него модель уверенно врёт в длинных наборах букв и цифр: путает o и 0, l и 1, а обрезанные краем снимка пути достраивает выдуманными.

 

Сколько места это освобождает

Освобождается разница «картинка минус описание»: 575 токенов на обычном снимке, 1365 на верхней границе замера, до 4309 на полноразмерном снимке в тарифе высокого разрешения.

 

Снимков за сессию Обычный снимок Верхняя граница Полное разрешение
5 2,9 тыс. токенов 6,8 тыс. 21,5 тыс.
10 5,8 тыс. 13,7 тыс. 43 тыс.
20 11,5 тыс. 27,3 тыс. 86 тыс.
30 17,3 тыс. 41 тыс. 129 тыс.

 

Если считать рабочее окно в 200 тысяч токенов, картина такая:

  • Обычная работа, пять-десять снимков за сессию — освобождается 3–7% окна. Заметно, но ничего не решает: момент уплотнения контекста отодвигается ровно на эти проценты.
  • Отладка интерфейса или разбор чужих экранов, двадцать-тридцать снимков — от 14% до двух третей окна. Здесь это уже разница между «дошли до конца задачи» и «контекст уплотнился на середине».

То есть выигрыш не постоянный, а режимный: на снимкоёмких сессиях он решающий, на обычных — приятный, но не более.

Отдельно про деньги, чтобы закрыть вопрос об облачном режиме. Повторное чтение истории идёт по цене чтения из кэша — десятая часть входной цены. Десять снимков на двухстах запросах — это от 1,1 до 2,7 миллиона лишних токенов чтения, порядка одного-двух долларов за сессию. Распознавание тех же десяти снимков через seed-2.0-mini стоит $0,008. Облачный режим окупается с запасом в сотни раз, так что его цена аргументом против не является.

 

Что проверено и отвергнуто

Двойной проход: OCR даёт точный текст, модель зрения — смысл. Ни один распознаватель текста не даёт одновременно русский и латинские идентификаторы: силён в одном — слаб в другом. Выигрыш — одна строка из пяти, цена — зависимость от Python в службе на Rust и склейка двух ответов.

PaddleOCR-VL вместо модели зрения. Текст читает не хуже (4/5, отличный русский) при 1,8 ГБ против 20. Но обучена только выписывать содержимое документа: на составное задание из трёх частей вернула пустой ответ, пометки описывать не умеет.

Плотная 32B точнее разреженной 30B. Та же точность при впятеро большем времени: 24,3 с против 4,5–8. Зрительная часть у них общая, языковая на чтение букв не влияет.

Больше токенов на изображение — точнее. Только до 2048. Значение 4096 вдвое дольше и точности не добавляет.

Облако точнее локальной модели. Не подтвердилось ни по одному показателю, кроме единственной мелкой строки.

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

 

Ограничения

  • Только Windows: перехват построен на низкоуровневом хуке клавиатуры и буфере обмена Windows.
  • Перетаскивание картинки мышью и вставка через меню не перехватываются.
  • Текст мельче примерно 12 точек внутри снятого скриншота путается в похожих знаках у всех проверенных локальных моделей.

 

Грабли

  • pkill -f <шаблон> на ВМ убивает собственную SSH-сессию — шаблон попадает в командную строку оболочки, которая эту команду и выполняет. Безопасно: pgrep -x <имя> плюс проверка /proc/PID/cmdline.
  • rapidocr_onnxruntime 1.4.4 принимает только rec_model_path= / rec_keys_path=; точечная запись Rec.model_path молча игнорируется, распознавание идёт штатной моделью — заметно лишь по содержимому ответа.
  • Модели PaddleX с HuggingFace не содержат встроенного словаря символов, его надо доставать из inference.yml и передавать отдельным файлом.
  • Задача планировщика под учётной записью пользователя показывает консольное окно; -WindowStyle Hidden не помогает. Работает обёртка wscript.exe + .vbs, запускающий .bat.
  • settings.json в Claude Code перечитывается без перезапуска сессии — по крайней мере секция хуков в 2.1.220: правка в 16:11 подхватилась той же сессией к 16:20.
  • Хук, вызывающий claude -p, рекурсивно запускает сам себя в порождённой сессии.
  • sys.stdin.read() на Windows портит русский текст, читать надо sys.stdin.buffer.read().decode("utf-8").
  • Модель зрения без модуля mmproj не работает: llama.cpp ответит «image input is not supported».

 

Установка

git clone https://github.com/Regsorm/clip-image-describe
cd clip-image-describe
cargo build --release
copy target\release\clip-image-describe.exe .
copy config.example.toml config.toml

В config.toml указывается как минимум адрес своей модели зрения. Проверка с разбором каждого нажатия в консоли — переменная окружения CLIP_DEBUG=1. Постоянная работа — задачей планировщика при входе в систему через wscript + .vbs, команда регистрации есть в README.

Годится любой llama.cpp с моделью зрения, загруженной вместе с модулем mmproj.

Исходники: https://github.com/Regsorm/clip-image-describe (MIT).

Вступайте в нашу телеграмм-группу Инфостарт

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Нейросети Системный администратор Разработчик Аналитик Бухгалтер Пользователь Руководитель проекта 1С 8.3 1С:Документооборот 1С:Бухгалтерия 3.0 1С:Зарплата и Управление Персоналом 3.x Россия Платные (руб)

Подключите ИИ к 1С и решайте рабочие задачи обычными словами. От работы с данными до доработки конфигурации через расширения, всё в привычном чате с ИИ-помощником. Теперь с поддержкой DeepSeek Harness, Kimi Code и Kimi Work, доступных в России без VPN.

15990 руб.

30.07.2026    19752    44    4    

39

SALE! %

Банковские операции Обмен с интернет-банком Мастера заполнения Нейросети Разработчик Бухгалтер Пользователь 1С:Предприятие 8 1C:ERP 1С:Бухгалтерия 3.0 1С:ERP Управление предприятием 2 1С:Управление холдингом 1С:ERP. Управление холдингом 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 11 1С:Розница 3.0 Платные (руб)

Корректируйте банковские документы быстро и легко! Создайте правило обработки — и оно автоматически применится при загрузке выписки (отбор по любому реквизиту или регулярному выражению). Решение заполняет расшифровку платежа, комиссию эквайринга, подбирает ведомости на выплату зарплаты, помечает дубли из банка на удаление и многое другое. Доплачивать за алгоритмы не нужно — они включены в решение. Обработка работает при загрузке из файлов клиент-банка и через DirectBank. Новое — искусственный интеллект: модель приводит нестандартные назначения платежа к виду, понятному алгоритмам, а ИИ-ассистент прямо в 1С консультирует по решению и разбирает код правил и алгоритмов. Поддерживаются локальные и облачные OpenAI-совместимые модели — данные могут не покидать ваш контур.

17500 руб.

20.12.2024    21699    105    32    

90

Инструментарий разработчика Нейросети Платные (руб)

Первые попытки разработки на 1С с использованием больших языковых моделей (LLM) могут разочаровать. LLMки сильно галлюцинируют, потому что не знают устройства конфигураций 1С, не знают нюансов синтаксиса. Но если дать им подсказки с помощью MCP, то результат получается кардинально лучше. Далее в публикации: MCP для поиска по метаданным 1С, справке синтакс-помощника и проверки синтаксиса.

15250 руб.

25.08.2025    77241    147    41    

154

SALE! 30%

Нейросети 1С 8.3 1С:Документооборот 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Расширение добавляет в 1С чат с ИИ-агентом. Пользователь пишет вопрос обычными словами: «какие УПД не подписаны?», «какой НДС к уплате за квартал?», «что висит на согласовании дольше недели?», а агент сам строит запросы к базе с правами этого пользователя и отвечает цифрами, таблицей, диаграммой или файлом Excel. Плитки «Аналитик», «Бухгалтер» и «Руководитель» дают сводку по базе одной кнопкой. Агент разбирает ошибки по скриншоту, сверяет прайсы поставщиков и проверяет коды маркировки. С версии 1.0.21 спрашивать можно и с телефона: QR-код в окне агента, без установки приложения. Работает в УТ 11, КА 2, ERP 2, БП 3.0, УНФ 3.0, Документооборот 3.0 и Альфа-Авто 6, ставится одним расширением.

18300 руб.

05.10.2026    3920    12    9    

13

Инструментарий разработчика Нейросети Системный администратор Разработчик Руководитель проекта 1С 8.3 Платные (руб)

Обработка заменяет ФИО, организации, ИНН, ИИН, БИН, ОГРН, КПП, БИК, счета и IBAN, паспорта, СНИЛС, адреса, телефоны, почту и суммы на правдоподобные выдуманные перед отправкой данных в ChatGPT, Claude или YandexGPT, а потом расшифровывает ответ модели обратно, подставляя настоящие имена и настоящие числа. Возвращаются и те итоги, которые модель посчитала сама: суммы масштабируются одним коэффициентом, поэтому пропорции и доли переживают обезличивание. Словарь замен хранится в самой базе и подхватывается автоматически, даже если обработку закрывали. Реквизиты России и Казахстана, любая конфигурация от 8.3.24, без единой зависимости.

14640 руб.

07.08.2026    2235    3    0    

3

Распознавание документов и образов Нейросети 1С:Предприятие 8 1С 8.3 1С 8.5 1C:Бухгалтерия 1С:Зарплата и Управление Персоналом 3.x Беларусь Россия Казахстан Армения Платные (руб)

ИИ-сканер документов с REST API для интеграции с 1С и корпоративными системами. Извлекайте данные из счетов, паспортов, дипломов, патентов и трудовых книжек за секунды. Точность человека - скорость машины. Приложение поддерживает восемь типов документов, четырех провайдеров ИИ (имеется возможность использования локальных ИИ), локальный REST API и экспорт в JSON. Важно! модель должна поддерживать функцию Vision (распознавание файлов и картинок). Запускайте используя локальные ИИ, без подписок и ограничений

6100 руб.

24.08.2026    1500    2    0    

2

Нейросети Разработчик Бесплатно (free)

Как автоматически создавать маркетинговые ролики для собственных IT-продуктов, используя ИИ? В предыдущей статье я рассказывал о Zapis — приложении для работы с речью и текстом. Теперь расширил его возможности: добавил конвейер создания видео, в котором ИИ-агент изучает материалы проекта, готовит сценарий, подбирает реальные скриншоты и пишет текст диктора. Zapis отвечает за озвучку, а Remotion — за анимацию и сборку. На примере обмена ПУТ на OneBase -> 1С:Бухгалтерия 3.0 покажу готовый 83-секундный ролик из восьми сцен. Разберём, как устроен процесс, зачем нужны настоящие скриншоты интерфейса, как синхронизируются речь и изображение и что сохраняется для повторной сборки после изменений в продукте. Исходный код и инструкции доступны в открытом репозитории Zapis.

06.11.2026    557    Ibrogim    2    

11

Нейросети Разработчик 1С 8.3 Бесплатно (free)

Как подключить ИИ-агента к разработке 1С на примере обработки «Почему не закрывается месяц»: одна папка, копия демобазы и несколько скриптов. Семь шагов: агент, выгрузка в файлы, правила, проверка кода, сборка, тесты YAxUnit и сценарии форм. На каждый: зачем он нужен, команда и где легко споткнуться. В конце: что выросло поверх, три ошибки с разных типовых и сколько это стоило.

05.11.2026    7874    Iliaelagin    8    

16
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. nedomolkov.ivan 527 04.08.26 08:51 Сейчас в теме
Таблица «что проверено и отвергнуто» — то, ради чего статью стоит читать целиком. Особенно находка про порядок операций: запись ложится в транскрипт после хуков, а метка времени внутри выглядит более ранней. На таком легко потерять день, решив, что у тебя гонка, которую победит таймаут.

Одно замечание к методике замеров. Пять трудных строк на одном снимке не различают 4/5 и 5/5: у моделей зрения разброс между прогонами на одном и том же входе часто больше, чем разница между соседними моделями — у вас это и видно по llama-4-scout с её 0/5, 0/5, 3/5. Чтобы таблица держала удар, нужны три прогона каждой модели на трёх-четырёх разных снимках, и считать надо худший результат, а не средний: цена одного испорченного идентификатора выше, чем польза от красивого описания.

И дешёвый приём из соседней области про мелкий шрифт: когда снимок делаете вы сами (автоматизация, скрипты), дешевле поднять масштаб источника до съёмки, чем потом вытягивать строку более тяжёлой моделью. С «снимком снимка» это не работает, конечно, но половину случаев закрывает без смены модели.
2. Sorm 151 04.08.26 21:28 Сейчас в теме
(1) Ну в общем да, что еще сказать.
Для отправки сообщения требуется регистрация/авторизация