Przejdź do treści głównej

Rozwiązanie API obrazu

Twórz obrazy tymi suwakami, które model naprawdę udostępnia.

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

Uniwersalne formularze gubią to, co naprawdę się liczy

„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

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.

02

Rozmiar to pole, a nie ustawienie domyślne

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

Jedno wywołanie może zwrócić kilka obrazów

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

Przeczytaj schemat, zachowaj pola, zapisz seed

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

Co warto ustalić na starcie

API generowania obrazów: wiele modeli — Co warto ustalić na starcie
Pole lub nagłówekWartość lub limit
inputadditionalProperties: false
seed · num_outputs · aspect_ratiodeclared per endpoint
cost + settled: falsehold · final charge never exceeds it
errorCode9 stable values, content_rejected included

Przesuń w poziomie, żeby zobaczyć wszystkie kolumny.

Integracja

Od pierwszego wywołania do produkcji

  1. 01Otwórz stronę modelu i sprawdź, które z pól seed, negative_prompt, num_outputs oraz pól rozmiaru endpoint deklaruje.
  2. 02Zbuduj treść żądania z input_schema – additionalProperties jest zamknięte, więc niezadeklarowany klucz to 400, a nie ciche pominięcie.
  3. 03Wyceń, wyślij z nagłówkiem Idempotency-Key i zapisz taskId, seed oraz rozstrzygniętą wartość model obok wyniku.
  4. 04Odbierz output.assets z wywołania zwrotnego albo z recordInfo i skopiuj pliki do własnego zasobnika.

Dopasowanie

Kiedy ta droga jest właściwa

Wybierz to, gdy

  • Generujesz z tekstu i chcesz mieć kilku twórców modeli za jednym kształtem żądania, jednym saldem i jednym rachunkiem.
  • Chcesz porównywać warianty z zapisanym żądaniem i wersją modelu.

Poszukaj gdzie indziej, gdy

  • Twoi użytkownicy zaczynają od zdjęcia, które już mają. Edycja to osobne zadanie z własnym kontraktem na obraz referencyjny.
  • Chcesz jednego stylu marki we wszystkich modelach. Styl mieszka w modelu, a nie w tej warstwie.

Dowody

Co możesz sprawdzić samodzielnie

Żądanie z Playgroundu jest żądaniem produkcyjnym

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.

Niezadeklarowane pola odpadają głośno

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.

Wyniki serwujemy z magazynu platformy

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

Zachowania platformy do potwierdzenia

  • Zdecyduj przed startem, gdzie trafiają seedy – przydają się tylko wtedy, gdy zostały zapisane.
  • Ustaw dzienny limit wydatków na klucz, wymagany przy każdym nowym kluczu, a tam gdzie trzeba także miesięczny i dożywotni.
  • Traktuj zamknięty zestaw wartości errorCode, razem z content_rejected, jak zwykłe stany produktu.
  • Skopiuj pliki do własnego magazynu w ciągu 14-dniowego okna przechowywania.

FAQ

O co pytają na tej stronie

Powtórz dane wejściowe, wersję i seed, jeśli jest dostępny. Nie gwarantuje to identycznych pikseli. Pobierz i zachowaj oryginał, jeśli potrzebujesz dokładnie tego obrazu.