Napraw „Model nie obsługuje wprowadzania obrazów" w OpenCode — Vision w GPT i Claude nie działa
OpenCode nie odczytuje obrazu z GPT lub Claude? Model obsługuje vision, ale OpenCode wysyła tylko nazwę pliku. Napraw to, deklarując attachment i modalities dla gpt-5.5 i modeli Claude w opencode.jsonc.
Published 2026-07-14
Dołączyłeś plik PNG/JPG w OpenCode, poprosiłeś GPT lub Claude o jego opisanie i dostałeś coś w stylu „bieżący model nie obsługuje wprowadzania obrazów" — albo model wspomina jedynie o nazwie pliku, a nie o samym obrazie. Niemal zawsze model w rzeczywistości obsługuje vision; problem polega na tym, że OpenCode nigdy nie wysłał obrazu jako danych multimodalnych.
Przyczyna źródłowa: OpenCode przekazuje obraz tylko wtedy, gdy model jest zadeklarowany jako obsługujący obrazy w opencode.jsonc. Bez tej deklaracji traktuje załącznik jako zwykłe odwołanie do pliku i pomija piksele.
Szybka naprawa: dodaj dwa pola do modelu w opencode.jsonc, a następnie zrestartuj OpenCode:
"attachment": true,
"modalities": {
"input": ["text", "image"],
"output": ["text"]
}
Jeśli potrzebujesz endpointu zgodnego z OpenAI, obsługującego vision i działającego z tą konfiguracją już dziś, APIMaster udostępnia modele gpt-5.5 oraz Claude vision pod adresem https://apimaster.ai/v1. Pełna konfiguracja: przewodnik konfiguracji OpenCode.
Jak wygląda ten problem
- Przełączasz się na model GPT lub Claude w OpenCode, przeciągasz zrzut ekranu i pytasz „opisz ten obraz".
- Odpowiedź to wariacja na temat „nie potrafię odczytywać obrazów", „wprowadzanie obrazów nie jest obsługiwane dla tego modelu" lub model odpowiada na temat nazwy pliku (
screenshot.png) zamiast rzeczywistej treści. - Ten sam obraz działa bez problemu, gdy wkleisz go bezpośrednio do ChatGPT lub Claude.
To nie jest ograniczenie modelu ani nie uszkodzony klucz API. gpt-5.5, claude-sonnet-4-6, claude-opus-4-7, claude-opus-4-8 oraz claude-haiku-4-5 akceptują wprowadzanie obrazów przez zgodne z OpenAI API Chat Completions. Obraz po prostu nigdy nie opuścił OpenCode.
Dlaczego tak się dzieje
OpenCode decyduje per model, czy załącznik może zostać wysłany oraz czy tym załącznikiem może być obraz. Odczytuje to z konfiguracji dostawcy w opencode.jsonc. Jeśli wpis modelu wygląda tak:
"gpt-5.5": {
"name": "gpt-5.5"
}
…to OpenCode nie ma sygnału, że model przyjmuje obrazy. W zależności od kompilacji albo odmawia dołączenia pliku, albo przekazuje do tekstu promptu jedynie nazwę załącznika. Model otrzymuje "[attachment: diagram.png]" — ciąg znaków, a nie obraz — i słusznie odpowiada, że nie dostał obrazu.
Rozwiązaniem jest jawne przekazanie OpenCode dwóch informacji:
| Pole | Znaczenie |
|---|---|
"attachment": true |
Ten model może otrzymywać załączniki. |
"modalities": { "input": ["text", "image"] } |
Ten model akceptuje wprowadzanie obrazów, więc OpenCode konwertuje plik na multimodalny blok treści image_url. |
Gdy oba pola są ustawione, OpenCode koduje obraz w base64 i wysyła go jako prawidłowe dane vision — a model go odczytuje.
Jak to naprawić
1. Znajdź swój plik opencode.jsonc
| OS | Ścieżka |
|---|---|
| macOS / Linux | ~/.config/opencode/opencode.jsonc |
| Windows | C:\Users\<username>\.config\opencode\opencode.jsonc |
2. Dodaj attachment + modalities do każdego modelu vision
Oto działający blok dostawcy dla GPT i Claude na endpoincie zgodnym z 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"]
}
}
}
}
}
}
Pełny przykład obejmujący
claude-opus-4-7,claude-opus-4-8,claude-haiku-4-5oraz warianty reasoning znajdziesz w przewodniku konfiguracji OpenCode. Wprowadzanie obrazów możesz włączyć tylko dla jednego modelu — dwa pola potrzebne są jedynie temu modelowi.
3. Użyj poprawnego base URL
Host zgodny z OpenAI to:
https://apimaster.ai/v1
Nie używaj https://api.apimaster.ai/v1 — host z prefiksem api. może powodować błędy TLS / połączenia.
4. Zrestartuj OpenCode
Zmiany konfiguracji wczytywane są przy starcie. Całkowicie zamknij i ponownie otwórz OpenCode lub co najmniej rozpocznij nową sesję, w przeciwnym razie stara (niewidząca obrazów) konfiguracja pozostanie aktywna.
5. Preferuj lokalny upload / base64 zamiast publicznych URL
Wgraj lokalny plik PNG/JPG w OpenCode — zostanie przekonwertowany na data URL w base64, co jest niezawodną ścieżką. Podanie bezpośrednio publicznego URL obrazu może się nie powieść, ponieważ upstream musi go pobrać i może natrafić na ograniczenia formatu, rozmiaru, MIME lub hotlinkowania:
Error while downloading file. Upstream status code: 400.
Jeśli widzisz taki błąd, przełącz się na lokalny plik / data URL w base64 zamiast zdalnego URL.
Sprawdź, że działa
W OpenCode
Przełącz się na apimaster/gpt-5.5 lub apimaster/claude-sonnet-4-6, wgraj obraz i zapytaj:
Describe the main content of this image.
Poprawna konfiguracja zwróci prawdziwy opis. Jeśli nadal widzi jedynie nazwę pliku, oznacza to, że brakuje pól attachment / modalities albo OpenCode nie został zrestartowany.
Bezpośrednio przez API (izolacja problemu)
Aby potwierdzić, że sam endpoint obsługuje vision — oddzielając problem konfiguracji OpenCode od problemu dostawcy — wyślij obraz w base64. Nigdy nie umieszczaj prawdziwego klucza na stałe; użyj zmiennej środowiskowej:
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
}'
Zmień model na claude-sonnet-4-6, aby przetestować Claude w ten sam sposób. Odpowiedź 200, która opisuje obraz, oznacza, że vision działa na poziomie API — więc każdy pozostały błąd leży po stronie konfiguracji OpenCode.
Zadbaj o bezpieczeństwo klucza API
- Nigdy nie umieszczaj klucza API wewnątrz
opencode.jsonc. Ten plik przechowuje wyłącznie dostawcę, modele i możliwości. - Skonfiguruj klucz przez procedurę
/connectw OpenCode, interfejs Connect Provider lub zmienną środowiskową. - Nie wklejaj klucza do czatów, zrzutów ekranu, zgłoszeń (issues) ani publicznych repozytoriów. Jeśli wycieknie, natychmiast unieważnij i wygeneruj go ponownie w konsoli dostawcy.
Jak pomaga APIMaster
Jeśli chcesz mieć jeden endpoint zgodny z OpenAI, na którym vision w GPT i Claude „po prostu działa" z powyższą konfiguracją, APIMaster został stworzony dokładnie do tego:
| Zaleta | Co zyskujesz |
|---|---|
| Jeden endpoint, wiele modeli vision | gpt-5.5, claude-sonnet-4-6, claude-opus-4-7, claude-opus-4-8, claude-haiku-4-5 — wszystkie obsługują obrazy, wszystkie pod https://apimaster.ai/v1 z jednym kluczem. |
| Zniżka | Ceny w Marketplace nawet ~90% taniej niż cennik OpenAI i ~85% taniej niż cennik Claude (aktualne ceny na stronie). |
| Wierność modelu | Tani relay może po cichu podmienić model — potwierdź, że dostajesz prawdziwy, za pomocą wykrywania odcisku palca (fingerprint). |
Od 1 $ doładowania, płatność za faktyczne użycie, bez subskrypcji. Pełna, krok po kroku konfiguracja OpenCode — w tym wprowadzanie obrazów — znajduje się w przewodniku konfiguracji OpenCode.
Powiązane przewodniki
- Przewodnik konfiguracji OpenCode — pełna konfiguracja dostawcy + vision
- Jak naprawić Invalid API Key (OpenAI / Claude) — błędy uwierzytelniania 401
- Napraw „api error 400 content blocked" — moderacja, nie vision
- Wszystkie przewodniki naprawy błędów API — pełny indeks
FAQ
Czy OpenCode w ogóle obsługuje wprowadzanie obrazów?
Tak. OpenCode potrafi wysyłać obrazy do dowolnego modelu obsługującego vision, ale dla tego modelu musisz zadeklarować attachment: true oraz modalities.input: ["text", "image"] w opencode.jsonc. Bez tej deklaracji wysyła jedynie nazwę pliku.
Które modele APIMaster potrafią odczytywać obrazy w OpenCode?
gpt-5.5, claude-sonnet-4-6, claude-opus-4-7, claude-opus-4-8 oraz claude-haiku-4-5 — wszystkie akceptują wprowadzanie obrazów. Dodaj dwa pola możliwości do każdego modelu, którego chcesz używać z obrazami.
Dlaczego model widzi tylko nazwę pliku?
OpenCode nie przekonwertował załącznika na dane obrazu — zamiast tego umieścił nazwę załącznika w tekście promptu. To niezawodny sygnał, że brakuje pól attachment / modalities.
Dodałem pola, a nadal nie działa. Co teraz?
Całkowicie zrestartuj OpenCode, rozpocznij nową sesję i potwierdź, że aktywny model jest tym, który skonfigurowałeś. Następnie przetestuj endpoint bezpośrednio powyższym curl z base64, aby sprawdzić, czy problem leży po stronie OpenCode, czy dostawcy.
Dlaczego publiczny URL obrazu zwrócił błąd?
Upstream musi pobierać zdalne URL i może zostać zablokowany przez rozmiar, format, MIME lub ochronę przed hotlinkowaniem (Error while downloading file. Upstream status code: 400.). Zamiast tego użyj lokalnego uploadu / data URL w base64.