Risolvi "Model Does Not Support Image Input" in OpenCode — Vision di GPT e Claude non funziona
OpenCode non legge la tua immagine con GPT o Claude? Il modello supporta la vision, ma OpenCode invia solo il nome del file. Risolvi dichiarando attachment e modalities per gpt-5.5 e i modelli Claude in opencode.jsonc.
Published 2026-07-14
Hai allegato un PNG/JPG in OpenCode, hai chiesto a GPT o Claude di descriverlo e hai ricevuto qualcosa come "the current model does not support image input" — oppure il modello menziona solo il nome del file, non l'immagine. In quasi tutti i casi il modello supporta la vision; il problema è che OpenCode non ha mai inviato l'immagine come input multimodale.
Causa principale: OpenCode inoltra un'immagine solo quando il modello è dichiarato come capace di gestire immagini in opencode.jsonc. Senza quella dichiarazione tratta l'allegato come un semplice riferimento a un file e scarta i pixel.
Soluzione rapida: aggiungi due campi al modello in opencode.jsonc, poi riavvia OpenCode:
"attachment": true,
"modalities": {
"input": ["text", "image"],
"output": ["text"]
}
Se ti serve un endpoint compatibile con OpenAI e capace di gestire la vision che funziona con questa configurazione fin da subito, APIMaster offre gpt-5.5 e i modelli vision di Claude su https://apimaster.ai/v1. Configurazione completa: guida alla configurazione di OpenCode.
Come si presenta il problema
- Passi a un modello GPT o Claude in OpenCode, trascini uno screenshot e chiedi "descrivi questa immagine".
- La risposta è una variante di "I can't read images", "image input is not supported for this model", oppure il modello risponde a proposito di un nome di file (
screenshot.png) invece che del contenuto reale. - La stessa immagine funziona senza problemi quando la incolli direttamente in ChatGPT o Claude.
Questo non è un limite del modello e non è una chiave API rotta. gpt-5.5, claude-sonnet-4-6, claude-opus-4-7, claude-opus-4-8 e claude-haiku-4-5 accettano tutti input immagine tramite l'API Chat Completions compatibile con OpenAI. L'immagine semplicemente non è mai uscita da OpenCode.
Perché succede
OpenCode decide per ogni modello se un allegato può essere inviato e se quell'allegato può essere un'immagine. Legge questa informazione dalla configurazione del provider in opencode.jsonc. Se la voce del tuo modello è così:
"gpt-5.5": {
"name": "gpt-5.5"
}
…allora OpenCode non ha alcun segnale che il modello accetti immagini. A seconda della build, o rifiuta di allegare il file o passa nel testo del prompt solo il nome dell'allegato. Il modello riceve "[attachment: diagram.png]" — una stringa, non un'immagine — e correttamente risponde che non gli è stata fornita alcuna immagine.
La soluzione è comunicare a OpenCode due cose in modo esplicito:
| Campo | Significato |
|---|---|
"attachment": true |
A questo modello è consentito ricevere allegati. |
"modalities": { "input": ["text", "image"] } |
Questo modello accetta input image, quindi OpenCode converte il file in un blocco di contenuto multimodale image_url. |
Una volta impostati entrambi, OpenCode codifica l'immagine in base64 e la invia come vero e proprio input vision — e il modello la legge.
Come risolverlo
1. Individua il tuo opencode.jsonc
| OS | Percorso |
|---|---|
| macOS / Linux | ~/.config/opencode/opencode.jsonc |
| Windows | C:\Users\<username>\.config\opencode\opencode.jsonc |
2. Aggiungi attachment + modalities a ogni modello vision
Ecco un blocco provider funzionante per GPT e Claude su un endpoint compatibile con OpenAI:
{
"$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"]
}
}
}
}
}
}
L'esempio completo che copre
claude-opus-4-7,claude-opus-4-8,claude-haiku-4-5e le varianti reasoning è nella guida alla configurazione di OpenCode. Puoi abilitare l'input immagine per un solo modello — solo quel modello ha bisogno dei due campi.
3. Usa la base URL corretta
L'host compatibile con OpenAI è:
https://apimaster.ai/v1
Non usare https://api.apimaster.ai/v1 — l'host con prefisso api. può causare errori di TLS / connessione.
4. Riavvia OpenCode
Le modifiche alla configurazione vengono caricate all'avvio. Chiudi completamente e riapri OpenCode, o come minimo avvia una nuova sessione, altrimenti la vecchia configurazione (cieca alle immagini) rimane attiva.
5. Preferisci upload locale / base64 agli URL pubblici
Carica un PNG/JPG locale in OpenCode — viene convertito in un data URL base64, che è il percorso affidabile. Passare direttamente un URL di immagine pubblico può fallire, perché l'upstream deve scaricarla e potrebbe incappare in limiti di formato, dimensione, MIME o hotlink:
Error while downloading file. Upstream status code: 400.
Se vedi questo errore, passa a un file locale / data URL base64 invece di un URL remoto.
Verifica che funzioni
In OpenCode
Passa a apimaster/gpt-5.5 o apimaster/claude-sonnet-4-6, carica un'immagine e chiedi:
Describe the main content of this image.
Una configurazione corretta restituisce una descrizione reale. Se vede ancora solo un nome di file, i campi attachment / modalities mancano oppure OpenCode non è stato riavviato.
Direttamente via API (isola il problema)
Per confermare che l'endpoint stesso gestisca la vision — separando un problema di configurazione di OpenCode da un problema del provider — invia un'immagine in base64. Non inserire mai una chiave reale in modo fisso; usa una variabile d'ambiente:
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
}'
Cambia model in claude-sonnet-4-6 per testare Claude allo stesso modo. Una risposta 200 che descrive l'immagine significa che la vision funziona a livello di API — quindi qualsiasi errore residuo è dal lato della configurazione di OpenCode.
Tieni al sicuro la tua chiave API
- Non mettere mai la chiave API dentro
opencode.jsonc. Quel file contiene solo il provider, i modelli e le capacità. - Configura la chiave tramite il flusso
/connectdi OpenCode, la UI Connect Provider o una variabile d'ambiente. - Non incollare la chiave in chat, screenshot, issue o repository pubblici. Se trapela, revocala e rigenerala immediatamente nella console del tuo provider.
Come ti aiuta APIMaster
Se vuoi un unico endpoint compatibile con OpenAI dove la vision di GPT e Claude "funziona e basta" con la configurazione sopra, APIMaster è costruito esattamente per questo:
| Vantaggio | Cosa ottieni |
|---|---|
| Un endpoint, molti modelli vision | gpt-5.5, claude-sonnet-4-6, claude-opus-4-7, claude-opus-4-8, claude-haiku-4-5 — tutti capaci di gestire immagini, tutti su https://apimaster.ai/v1 con una sola chiave. |
| Sconto | Prezzi del Marketplace fino a ~90% in meno rispetto ai listini OpenAI e ~85% in meno rispetto ai listini Claude (prezzi live sul sito). |
| Fedeltà del modello | Un relay economico può sostituire i modelli di nascosto — verifica di ricevere quello vero con la rilevazione tramite fingerprint. |
Da $1 di ricarica, pay-as-you-go, nessun abbonamento. La configurazione completa passo-passo di OpenCode — incluso l'input immagine — è nella guida alla configurazione di OpenCode.
Guide correlate
- Guida alla configurazione di OpenCode — configurazione completa provider + vision
- Come risolvere Invalid API Key (OpenAI / Claude) — errori di autenticazione 401
- Risolvi "api error 400 content blocked" — moderazione, non vision
- Tutte le guide per risolvere gli errori API — indice completo
FAQ
OpenCode supporta l'input immagine?
Sì. OpenCode può inviare immagini a qualsiasi modello capace di gestire la vision, ma devi dichiarare attachment: true e modalities.input: ["text", "image"] per quel modello in opencode.jsonc. Senza la dichiarazione invia solo il nome del file.
Quali modelli APIMaster possono leggere immagini in OpenCode?
gpt-5.5, claude-sonnet-4-6, claude-opus-4-7, claude-opus-4-8 e claude-haiku-4-5 accettano tutti input immagine. Aggiungi i due campi di capacità a ciascuno di quelli che vuoi usare con le immagini.
Perché il modello vede solo il nome del file?
OpenCode non ha convertito l'allegato in input immagine — ha invece messo il nome dell'allegato nel testo del prompt. Questo è il segnale rivelatore che i campi attachment / modalities mancano.
Ho aggiunto i campi e continua a fallire. E adesso?
Riavvia completamente OpenCode, avvia una nuova sessione e conferma che il modello attivo sia quello che hai configurato. Poi testa l'endpoint direttamente con il curl base64 sopra per verificare se il problema è OpenCode o il provider.
Perché un URL di immagine pubblico ha dato errore?
L'upstream deve scaricare gli URL remoti e può essere bloccato da dimensione, formato, MIME o protezione hotlink (Error while downloading file. Upstream status code: 400.). Usa invece un upload locale / data URL base64.