OpenCode「Model Does Not Support Image Input」を解決 — GPT・Claude のビジョンが動かない
OpenCode が GPT や Claude で画像を読めない? モデルはビジョン対応なのに、OpenCode はファイル名しか送っていません。opencode.jsonc で gpt-5.5 と Claude モデルに attachment と modalities を宣言して解決します。
公開 2026-07-14
OpenCode で PNG/JPG を添付し、GPT や Claude に内容を説明してもらおうとすると、「the current model does not support image input」 のような返答が返ってくる — あるいはモデルが画像ではなくファイル名にしか言及しない。ほとんどの場合、モデルは確かにビジョンに対応しています。問題は、OpenCode が画像をマルチモーダル入力として送信していないことです。
根本原因: OpenCode は、モデルが opencode.jsonc で画像対応として宣言されている場合にのみ画像を転送します。その宣言がないと、添付ファイルを単なるファイル参照として扱い、ピクセルを破棄してしまいます。
手早い解決策: opencode.jsonc のモデルに 2 つのフィールドを追加し、OpenCode を再起動します:
"attachment": true,
"modalities": {
"input": ["text", "image"],
"output": ["text"]
}
今すぐこの設定で動くビジョン対応の OpenAI 互換エンドポイントが必要なら、APIMaster が gpt-5.5 と Claude のビジョンモデルを https://apimaster.ai/v1 で提供しています。詳しいセットアップ: OpenCode 設定ガイド。
この問題の症状
- OpenCode で GPT または Claude モデルに切り替え、スクリーンショットをドラッグして「この画像を説明して」と尋ねる。
- 返答が 「画像を読めません」、「このモデルは画像入力に対応していません」 のバリエーション、あるいは実際の内容ではなくファイル名(
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 に 2 つのことを明示的に伝えることです:
| フィールド | 意味 |
|---|---|
"attachment": true |
このモデルは添付ファイルを受け取れる。 |
"modalities": { "input": ["text", "image"] } |
このモデルは画像入力を受け付けるので、OpenCode はファイルをマルチモーダルな image_url コンテンツブロックに変換する。 |
両方を設定すると、OpenCode は画像を base64 エンコードして適切なビジョン入力として送信し、モデルがそれを読み取ります。
直し方
1. opencode.jsonc の場所を特定する
| OS | パス |
|---|---|
| macOS / Linux | ~/.config/opencode/opencode.jsonc |
| Windows | C:\Users\<username>\.config\opencode\opencode.jsonc |
2. 各ビジョンモデルに attachment + modalities を追加する
OpenAI 互換エンドポイントで GPT と Claude を使う、動作するプロバイダーブロックの例です:
{
"$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 セットアップガイド にあります。1 つのモデルだけ画像入力を有効にすることも可能です — そのモデルにのみ 2 つのフィールドが必要です。
3. 正しい base URL を使う
OpenAI 互換のホストはこちらです:
https://apimaster.ai/v1
https://api.apimaster.ai/v1 は使わないでください — api. プレフィックスのホストは TLS / 接続の失敗を引き起こすことがあります。
4. OpenCode を再起動する
設定変更は起動時に読み込まれます。OpenCode を完全に終了して開き直すか、少なくとも新しいセッションを開始してください。そうしないと古い(画像を認識しない)設定が有効なままになります。
5. 公開 URL より、ローカルアップロード / base64 を優先する
OpenCode でローカルの PNG/JPG をアップロードしてください — base64 データ URL に変換され、これが確実な経路です。公開画像 URL を直接渡すと失敗することがあります。上流がそれをダウンロードする必要があり、フォーマット・サイズ・MIME・ホットリンクの制限に引っかかる場合があるためです:
Error while downloading file. Upstream status code: 400.
これが表示されたら、リモート URL ではなくローカルファイル / base64 データ URL に切り替えてください。
動作確認
OpenCode で
apimaster/gpt-5.5 または apimaster/claude-sonnet-4-6 に切り替え、画像をアップロードして次のように尋ねます:
Describe the main content of this image.
設定が正しければ、実際の説明が返ってきます。まだファイル名しか見ていない場合は、attachment / modalities フィールドが欠けているか、OpenCode が再起動されていません。
API 経由で直接(問題の切り分け)
エンドポイント自体がビジョンを処理できることを確認するには — 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 レスポンスが返れば、API レイヤーでビジョンが動いているということです — つまり残っている失敗はすべて OpenCode の設定側にあります。
API キーを安全に保つ
- API キーを
opencode.jsoncの中に置くことは絶対にしないでください。このファイルにはプロバイダー、モデル、機能だけを入れます。 - キーは OpenCode の
/connectフロー、Connect Provider UI、または環境変数で設定します。 - キーをチャット、スクリーンショット、issue、公開リポジトリに貼らないでください。漏洩した場合は、プロバイダーのコンソールで直ちに失効させて再生成してください。
APIMaster が役立つ理由
GPT と Claude のビジョンが上記の設定で「そのまま動く」、単一の OpenAI 互換エンドポイントが欲しいなら、APIMaster はまさにそのために作られています:
| 利点 | 得られるもの |
|---|---|
| 1 つのエンドポイントで多数のビジョンモデル | gpt-5.5、claude-sonnet-4-6、claude-opus-4-7、claude-opus-4-8、claude-haiku-4-5 — すべて画像対応、すべて https://apimaster.ai/v1 で 1 つのキーで利用可能。 |
| 割引 | Marketplace 価格は OpenAI 定価から最大約 90% オフ、Claude 定価から約 85% オフ(実際の価格はサイトで確認)。 |
| モデルの忠実性 | 安価なリレーはこっそりモデルを差し替えることがあります — フィンガープリント検出 で本物を受け取っているか確認しましょう。 |
$1 のチャージから、従量課金、サブスクリプション不要。画像入力を含む完全なステップバイステップの OpenCode セットアップは OpenCode 設定ガイド にあります。
関連ガイド
- OpenCode 設定ガイド — 完全なプロバイダー + ビジョンのセットアップ
- Invalid API Key(OpenAI / Claude)の直し方 — 401 認証エラー
- 「api error 400 content blocked」の解決 — ビジョンではなくモデレーション
- API エラー修正ガイド一覧 — 全インデックス
FAQ
そもそも OpenCode は画像入力に対応していますか?
はい。OpenCode はビジョン対応のどのモデルにも画像を送れますが、そのモデルについて opencode.jsonc で attachment: true と modalities.input: ["text", "image"] を宣言する必要があります。宣言がないとファイル名だけを送ります。
OpenCode で画像を読める APIMaster のモデルはどれですか?
gpt-5.5、claude-sonnet-4-6、claude-opus-4-7、claude-opus-4-8、claude-haiku-4-5 はすべて画像入力を受け付けます。画像で使いたいモデルそれぞれに 2 つの機能フィールドを追加してください。
なぜモデルはファイル名しか見ないのですか?
OpenCode が添付ファイルを画像入力に変換せず、代わりに添付ファイル名をプロンプトのテキストに入れてしまったからです。これは attachment / modalities フィールドが欠けている典型的なサインです。
フィールドを追加したのにまだ失敗します。次はどうすれば?
OpenCode を完全に再起動し、新しいセッションを開始して、有効なモデルが設定したものであることを確認してください。次に、上記の base64 curl でエンドポイントを直接テストし、問題が OpenCode 側かプロバイダー側かを確認します。
なぜ公開画像 URL がエラーになったのですか?
上流はリモート URL をダウンロードする必要があり、サイズ・フォーマット・MIME・ホットリンク保護によってブロックされることがあります(Error while downloading file. Upstream status code: 400.)。代わりにローカルアップロード / base64 データ URL を使ってください。