Przejdź do głównej zawartości

Generowanie obrazów

Dostęp jest włączany na życzenie

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.

ProduktJakośćCena za obraz
omev-image-jobslow (domyślnie, także auto)$0.021
omev-image-jobsmedium$0.024
omev-image-jobshigh$0.039
omev-image-litejeden stały poziom$0.0192
omev-image-mainlow (domyślnie, także auto)$0.021
omev-image-prolow (domyślnie, także auto)$0.024
omev-image-promedium$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"}}
PoleWymaganeWartości
modeltakomev-image-jobs
input.prompttakdowolny tekst; zapisz słownie każde słowo, które musi pojawić się na obrazie
input.aspect_rationieauto (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.resolutionnie1K — jedyny oferowany poziom
input.qualitynielow (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.backgroundnieauto (domyślnie), transparent lub opaque
input.enhancenietrue (domyślnie) pozwala OmevAI dopracować prompt; false wysyła prompt dokładnie w takiej postaci, w jakiej go napisano
input.input_urlsnie1–9 publicznych adresów http(s) obrazów referencyjnych (zobacz niżej)
callBackUrlniepubliczny 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 low i kosztują tyle samo co inne zamówienia low.

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"
}'
PoleWymaganeWartości
prompttakdowolny tekst
sizenie1024x1024 (domyślnie), 1536x1024, 1024x1536, auto
qualitynielow (domyślnie) lub auto; medium/high zwraca 400
nnietylko 1
response_formatnietylko 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"
}'
PoleWymaganeWartości
prompttakdowolny tekst; zapisz słownie każde słowo, które musi pojawić się na obrazie
sizenie1024x1024 (domyślnie), auto lub dowolny WxH do 1024 na każdej krawędzi
qualitynielow, medium, auto; high zwraca 400
nniedo 4 obrazów
response_formatnietylko b64_json
backgroundnietransparent, opaque, auto
output_formatniepng, 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:

codeZnaczenie
200sukces
401klucz lub nagłówki nie zostały zaakceptowane
404nieznane zadanie
422zamówienie zostało odrzucone; msg podaje przyczynę (nieznany model, pusty prompt, nieobsługiwany format, jakość lub rozdzielczość, zbyt wiele obrazów referencyjnych)
455usługa obrazów jest chwilowo niedostępna; spróbuj ponownie później
500błą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.