01
Seed pomaga porównywać, ale nie gwarantuje identycznych pikseli
Jeśli model obsługuje seed, zapisz go z promptem, wersją, rozmiarem i referencjami. Niektóre endpointy dają różne obrazy mimo tego samego seed.
Rozwiązanie API obrazu
Każdy endpoint obrazu deklaruje własne pola. Jeden przyjmuje negatywny prompt, drugi seed, a jeszcze inny zwraca cztery propozycje na wywołanie. Uniwersalny formularz ukrywa dokładnie te suwaki, dzięki którym wynik da się powtórzyć.

Wyzwanie
„Wpisz prompt, wyjdzie obraz” wystarcza na jakieś dziesięć sekund. Potem potrzebna jest ta sama postać drugi raz, kadr 3:2 zamiast kwadratu, cztery propozycje na wywołanie i seed, który da się zapisać.
01
Jeśli model obsługuje seed, zapisz go z promptem, wersją, rozmiarem i referencjami. Niektóre endpointy dają różne obrazy mimo tego samego seed.
02
Jedne endpointy przyjmują resolution albo aspect_ratio, inne width i height w pikselach. Wysłanie niewłaściwego pola to 400, a na endpointach rozliczanych za megapiksel wybrany rozmiar jest zarazem ceną.
03
Tam, gdzie istnieje num_outputs, opłata idzie za liczbą obrazów, a nie za liczbą żądań. Wartość domyślna 4 kosztuje cztery razy tyle co 1, a wycena to jedyne miejsce, w którym tę różnicę widać przed wysłaniem.
Podejście
Twórz dane według schematu endpointu. Zapisz dokładne żądanie, kolejność referencji i wersję z wynikiem, aby porównywać warianty. Zachowaj oryginał: identyczna regeneracja nie jest gwarantowana.
Zadania obrazu korzystają z tego samego kontraktu „utwórz i śledź” co wideo. Cała różnica mieści się w input.
POST /api/v1/jobs/createTask
POST /api/v1/jobs/createTask
Authorization: Bearer $SPICY_API_KEY
Idempotency-Key: 7b1f0c2e-9a4d-4f31-8c67-2b5e0d9a1c44
Content-Type: application/json
{
"model": "<publisher>/<model>/text-to-image",
"input": {
"prompt": "A ceramic teapot on linen, soft window light, muted palette",
"aspect_ratio": "3:2",
"num_outputs": 2,
"seed": 1337
}
}GET /api/v1/jobs/recordInfo?taskId=…
{
"code": 200,
"msg": "success",
"request_id": "req_example_record",
"data": {
"taskId": "job_01k3m8x9q2z4v7n5p6r8s0t1w3",
"state": "succeeded",
"output": {
"assets": [
{
"mime": "image/png",
"url": "https://…/result.png?X-Amz-Signature=…",
"expiresAt": "2026-09-12T12:20:08Z"
}
]
},
"cost": "0.040000",
"settled": true
}
}Kontrakt
| Pole lub nagłówek | Wartość lub limit |
|---|---|
| input | additionalProperties: false |
| seed · num_outputs · aspect_ratio | declared per endpoint |
| cost + settled: false | hold · final charge never exceeds it |
| errorCode | 9 stable values, content_rejected included |
Przesuń w poziomie, żeby zobaczyć wszystkie kolumny.
Integracja
Dopasowanie
Dowody
Treść złożona na stronie modelu to ta sama treść, którą wysyłasz ze swojego serwera: te same pola, ta sama walidacja, ta sama wycena. Nie ma uproszczonego trybu podglądu, który rozjedzie się później.
Wejście jest walidowane według schematu endpointu przy zamkniętym additionalProperties. Parametr, którego model nie deklaruje, zwraca 400 ze stabilnym errorCode, zamiast zostać po cichu zignorowany.
Wracają jako output.assets z kluczem, typem MIME, podpisanym url i expiresAt. Nic nie linkuje wprost do miejsca, w którym wykonał się model.
Przed startem
FAQ
Modele
Każdy odnośnik prowadzi na stronę danej rodziny modeli: wejścia, limity, zasady dotyczące treści i aktualna cena za jednostkę.
Co dalej
Porównaj endpointy obrazu pod kątem wejść, sterowania rozmiarem i seedem, liczby wyników i ceny za obraz, a potem użyj sprawdzonego żądania.