Generowanie obrazów
Te instrukcje są dostępne dla każdego klienta, ale generowanie obrazów jest włączane dla klucza na życzenie: napisz na support@omev.be. Posiadanie klucza API do modeli tekstowych lub dostęp do tej strony nie oznacza, że produkty do generowania obrazów są aktywne dla tego klucza.
Maksymalna liczba obrazów referencyjnych na żądanie: 9. Wejścia referencyjne
(obraz-do-obrazu) są obsługiwane przez zadania obrazu za pomocą input_urls.
Wszystkie produkty obrazów generują wyniki klasy 1K (do 1024 pikseli na krawędź dla żądania kwadratowego oraz szersze lub wyższe formaty tej samej klasy tam, gdzie produkt je oferuje). Nie ma poziomów 2K ani 4K; żądanie takiego rozmiaru zostaje odrzucone.
Ceny
Płacisz za każdy dostarczony obraz; wywołanie, które zwraca kilka obrazów, jest rozliczane za każdy z nich.
| Produkt | Jakość | Cena za obraz |
|---|---|---|
omev-image-jobs | low (domyślnie, także auto) | $0.021 |
omev-image-jobs | medium | $0.024 |
omev-image-jobs | high | $0.039 |
omev-image-lite | jeden stały poziom | $0.0192 |
omev-image-main | low (domyślnie, także auto) | $0.021 |
omev-image-pro | low (domyślnie, także auto) | $0.024 |
omev-image-pro | medium | $0.1968 |
Nieudane lub odrzucone generowanie nie jest rozliczane. Wszystkie produkty i ceny: Modele i ceny.
Istnieją dwa sposoby tworzenia obrazów, zbudowane z myślą o dwóch różnych rodzajach obciążeń.
Zadania obrazu (Image jobs) — główna ścieżka dla potoków. Składasz zamówienie,
odpytujesz o wynik (lub otrzymujesz go pod swoim adresem zwrotnym) i pobierasz gotowy
obraz z adresu URL, który przechowujemy przez 48 godzin. Jeden model, omev-image-jobs,
generuje obrazy klasy 1K w wielu formatach, w trzech poziomach jakości i opcjonalnie z
obrazami referencyjnymi. Jest to ścieżka do masowego generowania bez nadzoru: twój worker
kolejkuje zamówienia i odbiera wyniki, bez człowieka czekającego na odpowiedź z gniazda
sieciowego.
Modele bezpośrednie. Obraz jest zwracany w ciele odpowiedzi pojedynczego wywołania:
omev-image-lite, omev-image-main i omev-image-pro. Wybierz je, gdy ktoś czeka na obraz
bezpośrednio na ekranie.
API zadań obrazu
Trzy wywołania, ten sam host i ten sam klucz, co w przypadku pozostałych usług.
1. Złóż zamówienie
curl -sS https://llmapi.omev.be/api/v1/jobs/createTask \
-H "Authorization: Bearer $OMEV_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "omev-image-jobs",
"input": {
"prompt": "Flat vector infographic: three steps of onboarding, numbered 1 2 3, short labels",
"aspect_ratio": "1:1"
}
}'
{"code": 200, "msg": "success", "data": {"taskId": "task_omevimage_1754937600123_a1b2c3d4"}}
| Pole | Wymagane | Wartości |
|---|---|---|
model | tak | omev-image-jobs |
input.prompt | tak | dowolny tekst; zapisz słownie każde słowo, które musi pojawić się na obrazie |
input.aspect_ratio | nie | auto (domyślnie, kwadrat), 1:1, 3:2, 2:3, 4:3, 3:4, 16:9, 9:16, 21:9, 9:21, 5:4, 4:5, 9:8, 8:9, 27:16, 16:27, 2:1, 1:2, 3:1, 1:3 |
input.resolution | nie | 1K — jedyny oferowany poziom |
input.quality | nie | low (domyślnie; auto oznacza to samo), medium lub high; zobacz Ceny. medium i high działają dla zamówień tekst-do-obrazu, nie z input_urls |
input.background | nie | auto (domyślnie), transparent lub opaque |
input.enhance | nie | true (domyślnie) pozwala OmevAI dopracować prompt; false wysyła prompt dokładnie w takiej postaci, w jakiej go napisano |
input.input_urls | nie | 1–9 publicznych adresów http(s) obrazów referencyjnych (zobacz niżej) |
callBackUrl | nie | publiczny adres http(s); wysyłamy tam metodą POST ostateczny rekord zadania; zwykłe odpytywanie (polling) również działa |
Formaty inne niż kwadrat powstają w tej samej klasie 1K, na przykład 16:9 to 1360x768,
a 3:2 to 1536x1024.
Kod 403 zazwyczaj oznacza, że klucz nie jest aktywowany dla zadań obrazu. Skontaktuj
się z support@omev.be, aby uzgodnić dostęp; nie ponawiaj prób
wielokrotnie. Błędy API zadań przychodzą ze statusem HTTP 200 i kodem w ciele odpowiedzi,
tak jak oczekują tego istniejące integracje z API obrazów opartymi na zadaniach:
{"code": 422, "msg": "<opis błędu>", "data": null}. Sprawdzaj pole code w każdej
odpowiedzi, a nie tylko status HTTP. Zobacz Błędy.
2. Sprawdź wynik
curl -sS "https://llmapi.omev.be/api/v1/jobs/recordInfo?taskId=task_omevimage_1754937600123_a1b2c3d4" \
-H "Authorization: Bearer $OMEV_API_KEY"
{
"code": 200,
"msg": "success",
"data": {
"taskId": "task_omevimage_1754937600123_a1b2c3d4",
"model": "omev-image-jobs",
"state": "success",
"resultJson": "{\"resultUrls\":[\"https://llmapi.omev.be/api/v1/jobs/result?id=task_omevimage_1754937600123_a1b2c3d4\"]}",
"failCode": "",
"failMsg": "",
"costTime": 96000,
"createTime": 1754937600123,
"completeTime": 1754937696123,
"progress": 100,
"effectiveQuality": "low"
}
}
Stan state przechodzi przez waiting → queuing → generating → success (lub
fail, z polami failCode i failMsg wyjaśniającymi przyczynę). Odpytuj co 2–5 sekund,
stosując mechanizm back-off; typowe zadanie trwa od jednej do pięciu minut. resultJson
to ciąg znaków w formacie JSON: sparsuj go i pobierz adresy URL z resultUrls.
effectiveQuality to poziom jakości, w którym zamówienie zostało wykonane i rozliczone.
Z callBackUrl ten sam rekord zostaje wysłany pod Twój adres, gdy zadanie osiągnie stan
success lub fail.
3. Pobierz obraz
Pobieraj każdy adres URL wyniku z tym samym nagłówkiem Authorization: Bearer co pozostałe wywołania; bez klucza zwraca on 401. Plik jest dostępny przez 48 godzin: natychmiast pobierz bajty do własnej pamięci masowej; po 48 godzinach plik jest usuwany, a adres URL zwraca błąd 404. Rekord zadania (recordInfo) jest dostępny przez 7 dni.
curl -sS -o image.png "https://llmapi.omev.be/api/v1/jobs/result?id=task_omevimage_1754937600123_a1b2c3d4" \
-H "Authorization: Bearer $OMEV_API_KEY"
Jeśli twój kod obsługuje już API obrazów oparte na zadaniach o podobnej strukturze
(utwórz zadanie, odpytaj o rekord, odczytaj resultUrls), zadziała on również tutaj po
dwóch zmianach: bazowego adresu URL i klucza.
Obrazy referencyjne (obraz-do-obrazu)
Zamówienia mogą zawierać 1–9 obrazów referencyjnych: dodaj do input tablicę
input_urls z publicznymi adresami http(s) obrazów do edycji lub połączenia. Kolejność
listy jest zachowana: jeśli prompt mówi „put the product from image 1 into the scene from
image 2”, to image 1 jest input_urls[0].
{
"model": "omev-image-jobs",
"input": {
"prompt": "Put the product from image 1 into the environment from image 2",
"input_urls": [
"https://example.com/product.png",
"https://example.com/location.jpg"
],
"aspect_ratio": "1:1"
}
}
- Pominięcie
input_urls(lub pusta lista) pozostawia zwykłe zamówienie tekst-do-obrazu. - Każdy obraz referencyjny musi być plikiem PNG, JPEG lub WebP o rozmiarze do 20 MB.
- Więcej niż 9 adresów URL zostaje odrzuconych z komunikatem
A maximum of 9 reference images is allowed per request. - Obrazy referencyjne są kopiowane do wewnętrznej pamięci w chwili złożenia zamówienia, więc adres źródłowy, który później wygaśnie, nie zepsuje trwającego zadania.
- Zamówienia z obrazami referencyjnymi są wykonywane w jakości
lowi kosztują tyle samo co inne zamówienialow.
omev-image-main
Format żądania jest zgodny z OpenAI Images API, więc każdy SDK zbudowany dla niego
działa bez zmian: ustaw base_url na OmevAI i wywołaj images.generate.
omev-image-main to stabilny domyślny wybór do użycia interaktywnego. Cena: $0.021 za
obraz.
curl -sS https://llmapi.omev.be/v1/images/generations \
-H "Authorization: Bearer $OMEV_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "omev-image-main",
"prompt": "A photorealistic cat wearing sunglasses",
"size": "1024x1024"
}'
| Pole | Wymagane | Wartości |
|---|---|---|
prompt | tak | dowolny tekst |
size | nie | 1024x1024 (domyślnie), 1536x1024, 1024x1536, auto |
quality | nie | low (domyślnie) lub auto; medium/high zwraca 400 |
n | nie | tylko 1 |
response_format | nie | tylko b64_json |
Obraz znajduje się w data[0].b64_json. Jeśli wywołanie kończy się limitem czasu 504,
wyślij to samo żądanie ponownie z tym samym nagłówkiem Idempotency-Key: zamówienie
kontynuuje się po stronie serwera, a ponowienie odbiera gotowy wynik zamiast płacić
za drugi obraz.
omev-image-pro
Ten sam zgodny z OpenAI Images API format co omev-image-main. omev-image-pro to
tor jakości: prompty z osadzonym tekstem (infografiki, diagramy, wykresy, tabele,
etykiety, logotypy) renderują się tu niezawodnie. Cena: $0.024 za obraz w jakości low
lub auto, $0.1968 za obraz w jakości medium.
curl -sS https://llmapi.omev.be/v1/images/generations \
-H "Authorization: Bearer $OMEV_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "omev-image-pro",
"prompt": "Flat vector infographic: three steps of onboarding, numbered 1 2 3, short labels",
"size": "1024x1024"
}'
| Pole | Wymagane | Wartości |
|---|---|---|
prompt | tak | dowolny tekst; zapisz słownie każde słowo, które musi pojawić się na obrazie |
size | nie | 1024x1024 (domyślnie), auto lub dowolny WxH do 1024 na każdej krawędzi |
quality | nie | low, medium, auto; high zwraca 400 |
n | nie | do 4 obrazów |
response_format | nie | tylko b64_json |
background | nie | transparent, opaque, auto |
output_format | nie | png, jpeg, webp |
client = OpenAI(base_url="https://llmapi.omev.be/v1", api_key=os.environ["OMEV_API_KEY"])
resp = client.images.generate(
model="omev-image-pro",
prompt="Flat vector infographic: three steps of onboarding, numbered 1 2 3",
size="1024x1024",
)
png_bytes = base64.b64decode(resp.data[0].b64_json)
Obraz znajduje się w data[0].b64_json.
omev-image-lite
Inna ścieżka i inna struktura ciała żądania — ta zbudowana wokół contents i parts.
Jeśli twój kod już obsługuje tę strukturę, zadziała tutaj bez zmian. Obraz wyjściowy ma
zawsze rozmiar 1024×1024, więc nie ma parametru rozmiaru. Cena: $0.0192 za obraz.
curl -sS https://llmapi.omev.be/v1beta/models/omev-image-lite:generateContent \
-H "Authorization: Bearer $OMEV_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contents": [{"parts": [{"text": "A photorealistic cat wearing sunglasses"}]}]
}'
Odpowiedź:
{
"candidates": [{
"content": {
"role": "model",
"parts": [{"inlineData": {"mimeType": "image/png", "data": "<base64 PNG>"}}]
},
"finishReason": "STOP"
}]
}
Obraz znajduje się w polu candidates[0].content.parts[0].inlineData.data, a jego typ
w sąsiednim polu mimeType.
Ustaw generationConfig.candidateCount (1–4), aby otrzymać odpowiednią
liczbę oddzielnych candidates, każdy z jednym obrazem w inlineData.
Błędy
Modele bezpośrednie (omev-image-lite, omev-image-main, omev-image-pro) używają
takiej samej struktury jak pozostała część API — zobacz Błędy i ponawianie prób.
Nieprawidłowo sformułowane ciało żądania zwraca błąd 400 z opisem problemu; odrzucony
prompt również zwraca 400, a nie pusty obraz. Wywołanie, któremu skończy się czas,
zwraca 504: w przypadku omev-image-main powtórz je z tym samym Idempotency-Key.
Zadania obrazu odpowiadają statusem HTTP 200 i kodem w ciele odpowiedzi:
code | Znaczenie |
|---|---|
200 | sukces |
401 | klucz lub nagłówki nie zostały zaakceptowane |
404 | nieznane zadanie |
422 | zamówienie zostało odrzucone; msg podaje przyczynę (nieznany model, pusty prompt, nieobsługiwany format, jakość lub rozdzielczość, zbyt wiele obrazów referencyjnych) |
455 | usługa obrazów jest chwilowo niedostępna; spróbuj ponownie później |
500 | błąd tymczasowy; ponów ograniczoną liczbę razy |
Zadanie, które zostało przyjęte, a potem się nie powiodło, raportuje to w rekordzie
zadania: state: "fail" z polami failCode i failMsg. Nieudane zadanie nie jest
rozliczane.