Исправляем «Model Does Not Support Image Input» в OpenCode — не работает Vision у GPT и Claude
OpenCode не читает изображение с GPT или Claude? Модель поддерживает vision, но OpenCode отправляет только имя файла. Решение — объявить attachment и modalities для gpt-5.5 и моделей Claude в opencode.jsonc.
Published 2026-07-14
Вы прикрепили PNG/JPG в OpenCode, попросили GPT или Claude описать его и получили что-то вроде «the current model does not support image input» — или модель упоминает только имя файла, а не саму картинку. Почти во всех случаях модель действительно поддерживает vision; проблема в том, что OpenCode вообще не отправил изображение как мультимодальный ввод.
Корневая причина: OpenCode пересылает изображение только тогда, когда модель объявлена как поддерживающая изображения в opencode.jsonc. Без этого объявления он воспринимает вложение как обычную ссылку на файл и отбрасывает пиксели.
Быстрое решение: добавьте два поля к модели в opencode.jsonc, затем перезапустите OpenCode:
"attachment": true,
"modalities": {
"input": ["text", "image"],
"output": ["text"]
}
Если вам нужен OpenAI-совместимый endpoint с поддержкой vision, который работает с этой конфигурацией уже сегодня, APIMaster отдаёт gpt-5.5 и vision-модели Claude по адресу https://apimaster.ai/v1. Полная настройка: гайд по конфигурации OpenCode.
Как выглядит эта проблема
- Вы переключаетесь на модель GPT или Claude в OpenCode, перетаскиваете скриншот и просите «describe this image».
- В ответ приходит вариация «I can't read images», «image input is not supported for this model», или модель отвечает про имя файла (
screenshot.png) вместо реального содержимого. - То же изображение прекрасно работает, если вставить его напрямую в ChatGPT или Claude.
Это не ограничение модели и не сломанный API-ключ. gpt-5.5, claude-sonnet-4-6, claude-opus-4-7, claude-opus-4-8 и claude-haiku-4-5 — все принимают ввод изображений через OpenAI-совместимый Chat Completions API. Изображение просто так и не покинуло OpenCode.
Почему так происходит
OpenCode решает для каждой модели отдельно, можно ли отправить вложение и может ли это вложение быть изображением. Он считывает это из вашей конфигурации провайдера в opencode.jsonc. Если запись модели выглядит так:
"gpt-5.5": {
"name": "gpt-5.5"
}
…то у OpenCode нет никакого сигнала о том, что модель принимает изображения. В зависимости от сборки он либо отказывается прикреплять файл, либо передаёт в текст промпта только имя вложения. Модель получает "[attachment: diagram.png]" — строку, а не картинку — и справедливо отвечает, что изображение ей не дали.
Решение — явно сообщить OpenCode две вещи:
| Поле | Значение |
|---|---|
"attachment": true |
Этой модели разрешено получать вложения. |
"modalities": { "input": ["text", "image"] } |
Эта модель принимает ввод image, поэтому OpenCode преобразует файл в мультимодальный content-блок image_url. |
Как только оба поля заданы, OpenCode кодирует изображение в base64 и отправляет его как корректный vision-ввод — и модель его читает.
Как это исправить
1. Найдите свой opencode.jsonc
| ОС | Путь |
|---|---|
| macOS / Linux | ~/.config/opencode/opencode.jsonc |
| Windows | C:\Users\<username>\.config\opencode\opencode.jsonc |
2. Добавьте attachment + modalities к каждой vision-модели
Вот рабочий блок провайдера для GPT и Claude на OpenAI-совместимом endpoint:
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"apimaster": {
"name": "APIMaster.ai",
"npm": "@ai-sdk/openai-compatible",
"options": {
"baseURL": "https://apimaster.ai/v1"
},
"models": {
"gpt-5.5": {
"name": "gpt-5.5",
"attachment": true,
"modalities": {
"input": ["text", "image"],
"output": ["text"]
}
},
"claude-sonnet-4-6": {
"name": "claude-sonnet-4-6",
"attachment": true,
"modalities": {
"input": ["text", "image"],
"output": ["text"]
}
}
}
}
}
}
Полный пример, охватывающий
claude-opus-4-7,claude-opus-4-8,claude-haiku-4-5и reasoning-варианты, находится в гайде по настройке OpenCode. Вы можете включить ввод изображений только для одной модели — эти два поля нужны только ей.
3. Используйте правильный base URL
OpenAI-совместимый хост:
https://apimaster.ai/v1
Не используйте https://api.apimaster.ai/v1 — хост с префиксом api. может вызвать сбои TLS / подключения.
4. Перезапустите OpenCode
Изменения конфигурации загружаются при запуске. Полностью закройте и заново откройте OpenCode или как минимум начните новую сессию, иначе останется активной старая (слепая к изображениям) конфигурация.
5. Предпочитайте локальную загрузку / base64 публичным URL
Загрузите локальный PNG/JPG в OpenCode — он преобразуется в base64 data URL, и это надёжный путь. Передача публичного URL изображения напрямую может не сработать, потому что upstream должен его скачать и может упереться в ограничения формата, размера, MIME или защиты от хотлинкинга:
Error while downloading file. Upstream status code: 400.
Если вы это видите, перейдите на локальный файл / base64 data URL вместо удалённого URL.
Проверка, что всё работает
В OpenCode
Переключитесь на apimaster/gpt-5.5 или apimaster/claude-sonnet-4-6, загрузите изображение и спросите:
Describe the main content of this image.
Правильная конфигурация вернёт настоящее описание. Если модель по-прежнему видит только имя файла, значит поля attachment / modalities отсутствуют или OpenCode не был перезапущен.
Напрямую через API (изолируем проблему)
Чтобы убедиться, что сам endpoint обрабатывает vision — отделяя проблему конфигурации OpenCode от проблемы провайдера — отправьте base64-изображение. Никогда не прописывайте настоящий ключ жёстко; используйте переменную окружения:
export APIMASTER_API_KEY="your APIMaster API key"
curl https://apimaster.ai/v1/chat/completions \
-H "Authorization: Bearer $APIMASTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.5",
"messages": [
{
"role": "user",
"content": [
{ "type": "text", "text": "Describe this image." },
{
"type": "image_url",
"image_url": { "url": "data:image/png;base64,YOUR_IMAGE_BASE64" }
}
]
}
],
"max_tokens": 1000
}'
Замените model на claude-sonnet-4-6, чтобы так же протестировать Claude. Ответ 200, описывающий изображение, означает, что vision работает на уровне API — а значит, любой оставшийся сбой на стороне конфигурации OpenCode.
Держите API-ключ в безопасности
- Никогда не помещайте API-ключ в
opencode.jsonc. Этот файл хранит только провайдера, модели и их возможности. - Настраивайте ключ через flow
/connectв OpenCode, интерфейс Connect Provider или переменную окружения. - Не вставляйте ключ в чаты, скриншоты, issues или публичные репозитории. Если он утёк, немедленно отзовите и перевыпустите его в консоли провайдера.
Чем помогает APIMaster
Если вам нужен единый OpenAI-совместимый endpoint, где vision у GPT и Claude «просто работает» с конфигурацией выше, APIMaster создан именно для этого:
| Преимущество | Что вы получаете |
|---|---|
| Один endpoint, много vision-моделей | gpt-5.5, claude-sonnet-4-6, claude-opus-4-7, claude-opus-4-8, claude-haiku-4-5 — все поддерживают изображения, все на https://apimaster.ai/v1 с одним ключом. |
| Скидка | Цены Marketplace до ~90% дешевле прайса OpenAI и ~85% дешевле прайса Claude (актуальные цены на сайте). |
| Соответствие модели | Дешёвый релей может втихую подменить модель — убедитесь, что получаете настоящую, с помощью детекции по отпечаткам. |
Пополнение от $1, оплата по факту использования, без подписки. Полная пошаговая настройка OpenCode — включая ввод изображений — в гайде по конфигурации OpenCode.
Зарегистрироваться на APIMaster →
Похожие гайды
- Гайд по конфигурации OpenCode — полная настройка провайдера + vision
- Как исправить Invalid API Key (OpenAI / Claude) — ошибки авторизации 401
- Исправляем «api error 400 content blocked» — модерация, а не vision
- Все гайды по исправлению ошибок API — полный индекс
FAQ
Поддерживает ли OpenCode ввод изображений вообще?
Да. OpenCode может отправлять изображения любой vision-модели, но для этой модели в opencode.jsonc нужно объявить attachment: true и modalities.input: ["text", "image"]. Без объявления он отправляет только имя файла.
Какие модели APIMaster умеют читать изображения в OpenCode?
gpt-5.5, claude-sonnet-4-6, claude-opus-4-7, claude-opus-4-8 и claude-haiku-4-5 — все принимают ввод изображений. Добавьте два поля возможностей к каждой модели, которую хотите использовать с изображениями.
Почему модель видит только имя файла?
OpenCode не преобразовал вложение в ввод изображения — вместо этого он поместил имя вложения в текст промпта. Это верный признак того, что поля attachment / modalities отсутствуют.
Я добавил поля, а всё равно не работает. Что дальше?
Полностью перезапустите OpenCode, начните новую сессию и убедитесь, что активная модель — именно та, которую вы настроили. Затем протестируйте endpoint напрямую с помощью base64 curl выше, чтобы понять, в чём проблема — в OpenCode или в провайдере.
Почему публичный URL изображения выдал ошибку?
Upstream должен скачивать удалённые URL и может быть заблокирован из-за размера, формата, MIME или защиты от хотлинкинга (Error while downloading file. Upstream status code: 400.). Используйте локальную загрузку / base64 data URL вместо этого.