Solucionar "El modelo no admite entrada de imágenes" en OpenCode — La visión de GPT y Claude no funciona
¿OpenCode no lee tu imagen con GPT o Claude? El modelo admite visión, pero OpenCode solo envía el nombre del archivo. Arréglalo declarando attachment y modalities para gpt-5.5 y modelos Claude en opencode.jsonc.
Published 2026-07-14
Adjuntaste un PNG/JPG en OpenCode, le pediste a GPT o Claude que lo describiera y recibiste algo como "el modelo actual no admite entrada de imágenes" — o el modelo solo menciona el nombre del archivo, no la imagen. En casi todos los casos el modelo sí admite visión; el problema es que OpenCode nunca envió la imagen como entrada multimodal.
Causa raíz: OpenCode solo reenvía una imagen cuando el modelo está declarado con capacidad de imagen en opencode.jsonc. Sin esa declaración, trata el adjunto como una simple referencia de archivo y descarta los píxeles.
Solución rápida: añade dos campos al modelo en opencode.jsonc y luego reinicia OpenCode:
"attachment": true,
"modalities": {
"input": ["text", "image"],
"output": ["text"]
}
Si necesitas un endpoint compatible con OpenAI y con capacidad de visión que funcione hoy con esta configuración, APIMaster ofrece gpt-5.5 y los modelos de visión de Claude en https://apimaster.ai/v1. Configuración completa: guía de configuración de OpenCode.
Cómo se ve este problema
- Cambias a un modelo GPT o Claude en OpenCode, arrastras una captura de pantalla y preguntas "describe esta imagen".
- La respuesta es una variación de "no puedo leer imágenes", "este modelo no admite entrada de imágenes", o el modelo responde sobre un nombre de archivo (
screenshot.png) en lugar del contenido real. - La misma imagen funciona perfectamente cuando la pegas directamente en ChatGPT o Claude.
Esto no es una limitación del modelo ni una clave de API rota. gpt-5.5, claude-sonnet-4-6, claude-opus-4-7, claude-opus-4-8 y claude-haiku-4-5 aceptan entrada de imágenes a través de la API Chat Completions compatible con OpenAI. La imagen simplemente nunca salió de OpenCode.
Por qué ocurre
OpenCode decide por modelo si se puede enviar un adjunto, y si ese adjunto puede ser una imagen. Lee esto desde tu configuración de proveedor en opencode.jsonc. Si la entrada de tu modelo se ve así:
"gpt-5.5": {
"name": "gpt-5.5"
}
…entonces OpenCode no tiene ninguna señal de que el modelo acepte imágenes. Según la versión, o se niega a adjuntar el archivo o pasa solo el nombre del adjunto al texto del prompt. El modelo recibe "[attachment: diagram.png]" — una cadena de texto, no una imagen — y responde correctamente que no se le dio ninguna imagen.
La solución es indicarle a OpenCode dos cosas de forma explícita:
| Campo | Significado |
|---|---|
"attachment": true |
Este modelo puede recibir adjuntos. |
"modalities": { "input": ["text", "image"] } |
Este modelo acepta entrada de imagen, así que OpenCode convierte el archivo en un bloque de contenido multimodal image_url. |
Una vez configurados ambos, OpenCode codifica la imagen en base64 y la envía como entrada de visión correcta — y el modelo la lee.
Cómo solucionarlo
1. Localiza tu opencode.jsonc
| SO | Ruta |
|---|---|
| macOS / Linux | ~/.config/opencode/opencode.jsonc |
| Windows | C:\Users\<username>\.config\opencode\opencode.jsonc |
2. Añade attachment + modalities a cada modelo de visión
Aquí tienes un bloque de proveedor funcional para GPT y Claude en un endpoint compatible 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"]
}
}
}
}
}
}
El ejemplo completo que cubre
claude-opus-4-7,claude-opus-4-8,claude-haiku-4-5y las variantes de razonamiento está en la guía de configuración de OpenCode. Puedes habilitar la entrada de imágenes para un solo modelo — solo ese modelo necesita los dos campos.
3. Usa la URL base correcta
El host compatible con OpenAI es:
https://apimaster.ai/v1
No uses https://api.apimaster.ai/v1 — el host con prefijo api. puede causar fallos de TLS / conexión.
4. Reinicia OpenCode
Los cambios de configuración se cargan al inicio. Cierra por completo y vuelve a abrir OpenCode, o como mínimo inicia una nueva sesión, o la configuración antigua (ciega a las imágenes) seguirá activa.
5. Prefiere la carga local / base64 en lugar de URLs públicas
Sube un PNG/JPG local en OpenCode — se convierte en una URL de datos base64, que es la vía fiable. Pasar directamente una URL de imagen pública puede fallar, porque el upstream tiene que descargarla y puede toparse con límites de formato, tamaño, MIME o hotlink:
Error while downloading file. Upstream status code: 400.
Si ves esto, cambia a un archivo local / URL de datos base64 en lugar de una URL remota.
Comprueba que funciona
En OpenCode
Cambia a apimaster/gpt-5.5 o apimaster/claude-sonnet-4-6, sube una imagen y pregunta:
Describe the main content of this image.
Una configuración correcta devuelve una descripción real. Si sigue viendo solo un nombre de archivo, faltan los campos attachment / modalities o no se reinició OpenCode.
Directamente vía la API (aísla el problema)
Para confirmar que el endpoint en sí gestiona la visión — separando un problema de configuración de OpenCode de un problema del proveedor — envía una imagen en base64. Nunca escribas una clave real en el código; usa una variable de entorno:
export APIMASTER_API_KEY="tu clave de API de APIMaster"
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 a claude-sonnet-4-6 para probar Claude de la misma manera. Una respuesta 200 que describa la imagen significa que la visión funciona en la capa de la API — así que cualquier fallo restante está en el lado de la configuración de OpenCode.
Mantén tu clave de API a salvo
- Nunca pongas la clave de API dentro de
opencode.jsonc. Ese archivo solo contiene el proveedor, los modelos y las capacidades. - Configura la clave a través del flujo
/connectde OpenCode, la interfaz Connect Provider o una variable de entorno. - No pegues la clave en chats, capturas de pantalla, issues o repositorios públicos. Si se filtra, revócala y regenérala de inmediato en la consola de tu proveedor.
Cómo ayuda APIMaster
Si quieres un único endpoint compatible con OpenAI donde la visión de GPT y Claude "simplemente funcione" con la configuración anterior, APIMaster está diseñado exactamente para esto:
| Ventaja | Lo que obtienes |
|---|---|
| Un endpoint, muchos modelos de visión | gpt-5.5, claude-sonnet-4-6, claude-opus-4-7, claude-opus-4-8, claude-haiku-4-5 — todos con capacidad de imagen, todos en https://apimaster.ai/v1 con una sola clave. |
| Descuento | Precios del Marketplace hasta ~90% más baratos que las tarifas de lista de OpenAI y ~85% más baratos que las de Claude (precios en vivo en el sitio). |
| Fidelidad del modelo | Un relay barato puede cambiar modelos en silencio — confirma que recibes lo auténtico con la detección de huellas. |
Desde $1 de recarga, pago por uso, sin suscripción. La configuración paso a paso completa de OpenCode — incluida la entrada de imágenes — está en la guía de configuración de OpenCode.
Guías relacionadas
- Guía de configuración de OpenCode — configuración completa de proveedor + visión
- Cómo solucionar clave de API inválida (OpenAI / Claude) — errores de autenticación 401
- Solucionar "api error 400 content blocked" — moderación, no visión
- Todas las guías para solucionar errores de la API — índice completo
Preguntas frecuentes
¿OpenCode admite entrada de imágenes en absoluto?
Sí. OpenCode puede enviar imágenes a cualquier modelo con capacidad de visión, pero debes declarar attachment: true y modalities.input: ["text", "image"] para ese modelo en opencode.jsonc. Sin la declaración, solo envía el nombre del archivo.
¿Qué modelos de APIMaster pueden leer imágenes en OpenCode?
gpt-5.5, claude-sonnet-4-6, claude-opus-4-7, claude-opus-4-8 y claude-haiku-4-5 aceptan entrada de imágenes. Añade los dos campos de capacidad a cada uno que quieras usar con imágenes.
¿Por qué el modelo solo ve el nombre del archivo?
OpenCode no convirtió el adjunto en entrada de imagen — en su lugar puso el nombre del adjunto en el texto del prompt. Esta es la señal reveladora de que faltan los campos attachment / modalities.
Añadí los campos y sigue fallando. ¿Ahora qué?
Reinicia OpenCode por completo, inicia una nueva sesión y confirma que el modelo activo es el que configuraste. Luego prueba el endpoint directamente con el curl en base64 de arriba para comprobar si el problema es de OpenCode o del proveedor.
¿Por qué dio error una URL de imagen pública?
El upstream tiene que descargar las URLs remotas y puede ser bloqueado por tamaño, formato, MIME o protección hotlink (Error while downloading file. Upstream status code: 400.). Usa una carga local / URL de datos base64 en su lugar.