> ## Documentation Index
> Fetch the complete documentation index at: https://docs.xhuoapi.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# OpenAI Images Generations API – Wniosek i użytkowanie

> OpenAI generation 集成指南 - XHuoAPI

OpenAI Images Generations API obecnie obsługuje różne modele generowania obrazów, w tym klasyczny `dall-e-3`, model o silniejszych zdolnościach renderowania tekstu `gpt-image-1`, najnowszą generację **`gpt-image-2`**, a także modele z serii **`nano-banana` / `nano-banana-2` / `nano-banana-pro`**, dostępne przez ten sam interfejs. Wszystkie potrafią generować wysokiej jakości obrazy na podstawie opisu tekstowego.

Niniejsza dokumentacja opisuje głównie proces korzystania z OpenAI Images Generations API, dzięki któremu możemy łatwo korzystać z funkcji generowania obrazów serii OpenAI.

## Proces wnioskowania

Aby korzystać z OpenAI Images Generations API, najpierw można przejść na stronę [OpenAI Images Generations API](https://api.xhuoapi.ai/documents/fd932485-90c7-45d6-8394-1e14b6f07b2b) i kliknąć przycisk „Acquire”, aby uzyskać wymagane poświadczenia do żądań:

![](https://cdn.xhuoapi.ai/nyq0xz.png)

Jeśli nie jesteś jeszcze zalogowany lub zarejestrowany, zostaniesz automatycznie przekierowany do strony logowania, gdzie możesz się zarejestrować i zalogować. Po zalogowaniu zostaniesz automatycznie przeniesiony z powrotem na tę stronę.

Przy pierwszym wniosku otrzymasz darmowy limit, który pozwala na bezpłatne korzystanie z API.

## Model GPT-Image-2

`gpt-image-2` to nowa generacja modelu generowania obrazów od OpenAI, która w porównaniu do `dall-e-3` i `gpt-image-1` oferuje wyraźne ulepszenia w następujących aspektach:

* **Lepsze przestrzeganie instrukcji**: potrafi dokładnie zrozumieć złożone instrukcje dotyczące kompozycji, liczenia, relacji przestrzennych i innych struktur.
* **Czystsze renderowanie tekstu**: w scenariuszach takich jak plakaty, menu, infografiki, logotypy, tekst angielski i cyfry są niemal bezbłędnie odwzorowane.
* **Bogatsze wyrażanie stylu**: natywne wsparcie dla różnych stylów, takich jak portrety filmowe, plakaty retro, ilustracje dla dzieci, fotografia produktowa, infografiki itp.
* **Natywne wsparcie wielu proporcji i wysokiej rozdzielczości**: obsługuje 5 proporcji (1:1, 4:3, 3:4, 16:9, 9:16) i 3 poziomy rozdzielczości (1K / 2K / 4K).

Sposób wywołania jest identyczny jak w przypadku innych modeli – wystarczy ustawić pole `model` na `gpt-image-2`. W zwracanym wyniku pole `url` to trwały link do obrazu hostowany na `platform.cdn.xhuoapi.ai`, który można otworzyć bezpośrednio w przeglądarce lub osadzić na stronie.

### Obsługiwane wartości `size` i poziomy rozliczeń

`gpt-image-2` sprawdza tylko format `size` – jeśli nie jest to `auto` lub pusty ciąg, musi mieć postać `WIDTHxHEIGHT` (np. `1024x1024`, `2048x1152`, `800x600`); inne formaty zwrócą błąd 400. Rozliczenia są podzielone na dwa poziomy:

* **Standardowa cena 1K**: wejście to dowolny rozmiar 1K z tabeli poniżej lub popularne aliasy 1K z upstream (`1254x1254`, `1672x941`, `941x1672` – są to faktyczne rozmiary zwracane przez upstream dla 1K, które po ponownym przekazaniu nie powodują zmiany ceny).
* **Inne poziomy (1,5×)**: dowolne rozmiary spoza powyższej grupy 1K, w tym rekomendowane 2K / 4K oraz dowolne niestandardowe `WIDTHxHEIGHT`.

Upstream wymaga, aby szerokość i wysokość były wielokrotnościami 16, dłuższy bok ≤ 3840, a liczba pikseli ≤ 8 294 400. Przekroczenie tych limitów spowoduje odrzucenie z błędem 4xx.

| Proporcja | 1K (standard) | 2K rekomendowane (×1,5) | 4K rekomendowane (×1,5) |
| --------- | ------------- | ----------------------- | ----------------------- |
| 1:1       | `1024x1024`   | `2048x2048`             | `2880x2880`             |
| 4:3       | `1536x1024`   | `2048x1536`             | `3264x2448`             |
| 3:4       | `1024x1536`   | `1536x2048`             | `2448x3264`             |
| 16:9      | `1792x1024`   | `2048x1152`             | `3840x2160`             |
| 9:16      | `1024x1792`   | `1152x2048`             | `2160x3840`             |

> Możesz także przesłać `size: "auto"` lub **pominąć pole `size`**, wtedy model wybierze domyślny rozmiar i zostanie naliczona standardowa opłata 1K.
>
> W przypadku 1K upstream nie gwarantuje ścisłego dopasowania pikseli – np. podając `1024x1024` możesz otrzymać `1254x1254`, proporcje są zachowane. Jeśli ponownie przekażesz ten rozmiar jako `size`, nadal będzie naliczana opłata 1K.
>
> Wywołanie 4K zwykle trwa 4–8 minut, zalecane jest użycie asynchronicznego callbacku `callback_url` opisanej dalej.

> **O parametrze `n`**
>
> `gpt-image-2` **nie obsługuje `n > 1`** – parametr jest ignorowany, niezależnie czy podasz `n=1` czy `n=10`, pojedyncze wywołanie zwróci tylko 1 obraz i zostanie naliczona opłata za 1 obraz. Jeśli potrzebujesz wielu obrazów jednocześnie, wykonaj wiele równoległych wywołań (zalecane jest podanie różnych `prompt` lub `seed`, aby uniknąć bardzo podobnych obrazów). To ograniczenie dotyczy także `gpt-image-1` / `gpt-image-1.5` oraz serii `nano-banana`. Model `dall-e-2` jest jedynym natywnie wspierającym `n > 1`; `dall-e-3` obsługuje tylko `n = 1`.

Poniżej przedstawiamy kilka rzeczywistych przykładów, które obrazują możliwości `gpt-image-2`.

### Scenariusz 1: Portret filmowy

W promptach można używać terminologii filmowej (35mm film, płytka głębia ostrości, neony itp.) do precyzyjnej kontroli atmosfery i jakości.

Przykładowy kod w Python:

```python theme={null}
import requests

url = "https://api.xhuoapi.ai/v1/openai/images/generations"

headers = {
    "accept": "application/json",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "model": "gpt-image-2",
    "prompt": "A cinematic portrait of a young woman standing in a convenience store at night, illuminated by soft pink and cyan neon signs through the window. Shot on 35mm film, shallow depth of field, slight grain, melancholic mood.",
    "size": "1024x1536"
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)
```

Przykładowa odpowiedź:

```json theme={null}
{
  "success": true,
  "task_id": "ab58a5df-6f46-4874-bff6-93169e2849a3",
  "created": 1777048800,
  "data": [
    {
      "revised_prompt": "A cinematic portrait of a young woman standing in a convenience store at night, illuminated by soft pink and cyan neon signs through the window. Shot on 35mm film, shallow depth of field, slight grain, melancholic mood.",
      "url": "https://platform.cdn.xhuoapi.ai/gpt-image/ab58a5df-6f46-4874-bff6-93169e2849a3_0.png"
    }
  ]
}
```

Wygenerowany obraz:

<p>
  <img src="https://platform.cdn.xhuoapi.ai/gpt-image/ab58a5df-6f46-4874-bff6-93169e2849a3_0.png" width="500" className="m-auto" />
</p>

### Scenariusz 2: Retro plakat podróżniczy (z renderowaniem tekstu)

`gpt-image-2` jest stabilny w renderowaniu typografii i układzie, idealny do tworzenia plakatów, menu, kartek z tekstem.

```python theme={null}
payload = {
    "model": "gpt-image-2",
    "prompt": "A vintage travel poster of the Amalfi Coast, Italy. Stylized art-deco illustration of cliffside lemon-yellow houses cascading down to a turquoise sea, with a small white sailboat in the harbor. Bold typography at the top reads AMALFI and at the bottom ITALIA 1958. Limited color palette: cream, sea-blue, lemon yellow, terracotta. Slight paper-grain texture.",
    "size": "1024x1536"
}
```

Obraz z pola `url`:

<p>
  <img src="https://platform.cdn.xhuoapi.ai/gpt-image/c6061f92-3fae-498e-af8e-688e7f415ba3_0.png" width="500" className="m-auto" />
</p>

Model dokładnie odwzorował styl Art Deco, a napisy `AMALFI` i `ITALIA 1958` są czytelne i poprawne.

### Scenariusz 3: Złożona kompozycja i liczenie

Prompt testujący przestrzeganie instrukcji dotyczących liczby i rozmieszczenia elementów.

```python theme={null}
payload = {
    "model": "gpt-image-2",
    "prompt": "A wooden bookshelf consisting of three shelves: On the top shelf, there should be one book. On the second shelf, there should be three books. On the bottom shelf, there should be seven books. Soft warm lighting, photorealistic, cozy library atmosphere.",
    "size": "1024x1024"
}
```

Wygenerowany obraz:

<p>
  <img src="https://platform.cdn.xhuoapi.ai/gpt-image/64a3b932-a082-4cad-9f85-9d30474b104d_0.png" width="500" className="m-auto" />
</p>

Liczba książek na półkach (1 / 3 / 7) dokładnie odpowiada promptowi, co było trudne do osiągnięcia w erze `dall-e-3`.

### Scenariusz 4: Styl ilustracji (poziomo)

Poprzez określenie medium artystycznego i słów kluczowych nastroju można uzyskać stylizowane ilustracje.

```python theme={null}
payload = {
    "model": "gpt-image-2",
    "prompt": "A soft, poetic children's book illustration of a small fox reading a book under a glowing mushroom in a moonlit forest. Watercolor and pencil texture, gentle pastel colors, dreamy atmosphere, hand-drawn feel.",
    "size": "1536x1024"
}
```

Wygenerowana ilustracja pozioma:

![](https://platform.cdn.xhuoapi.ai/gpt-image/6cd57e69-d237-4cc1-a666-759a93964a08_0.png)

### Asynchroniczność i callback

Wywołanie `gpt-image-2` zwykle trwa 60–90 sekund. Aby uniknąć utrzymywania długiego połączenia, można użyć mechanizmu asynchronicznego callback `callback_url`, którego użycie jest identyczne jak w innych modelach.

## Modele z serii Nano Banana

Seria `nano-banana` to modele generowania obrazów oparte na Gemini, dostępne przez ten sam endpoint `/openai/images/generations`. Wystarczy zmienić pole `model` na jeden z poniższych:

| Model             | Koszt (Credits / wywołanie) | Zastosowanie                                              |
| ----------------- | --------------------------- | --------------------------------------------------------- |
| `nano-banana`     | 0.14                        | Standardowe generowanie obrazów, najszybsze i najtańsze   |
| `nano-banana-2`   | 0.28                        | Wyraźnie lepsza jakość i detale                           |
| `nano-banana-pro` | 0.35                        | Flagowy model serii, najlepsza kompozycja, detale i tekst |

> **Ważne: zakres obsługiwanych parametrów**
>
> Nano Banana działa przez warstwę adaptacyjną OpenAI i w porównaniu do `gpt-image-*` obsługuje tylko parametry: `model`, `prompt`, `size`.
>
> * `size` jest mapowane na wewnętrzny `aspect_ratio` według poniższej tabeli; nieujęte rozmiary są traktowane jako `1:1`:
>   * `1024x1024` / `512x512` / `256x256` → `1:1`
>   * `1792x1024` → `16:9`
>   * `1024x1792` → `9:16`
> * Nie obsługiwane są parametry `n`, `quality`, `style`, `response_format`, `background`, `output_format` – jeśli zostaną podane, zostaną zignorowane.
> * Struktura odpowiedzi jest zgodna z formatem OpenAI (`data[].url`), ale `created` jest zawsze `0`, nie zwracany jest `b64_json`, a `revised_prompt` jest zawsze równy oryginalnemu `prompt`.

### Podstawowe wywołanie

```python theme={null}
import requests

url = "https://api.xhuoapi.ai/v1/openai/images/generations"

headers = {
    "accept": "application/json",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "model": "nano-banana",
    "prompt": "a small red apple on a white table, photoreal",
    "size": "1024x1024"
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)
```

Przykładowa odpowiedź:

```json theme={null}
{
  "created": 0,
  "data": [
    {
      "url": "https://platform.cdn.xhuoapi.ai/nanobanana/6870b330-65c4-436c-bb80-819fdae7a7a4.png",
      "revised_prompt": "a small red apple on a white table, photoreal"
    }
  ]
}
```

Wygenerowany obraz można bezpośrednio otworzyć pod linkiem z pola `url`:

<p>
  <img src="https://platform.cdn.xhuoapi.ai/nanobanana/6870b330-65c4-436c-bb80-819fdae7a7a4.png" width="500" className="m-auto" />
</p>

### Aktualizacja do flagowego modelu `nano-banana-pro`

Wystarczy zmienić `model` na `nano-banana-pro`, pozostałe parametry pozostają bez zmian:

```python theme={null}
payload = {
    "model": "nano-banana-pro",
    "prompt": "abstract painting",
    "size": "1024x1024"
}
```

Przykładowa odpowiedź:

```json theme={null}
{
  "created": 0,
  "data": [
    {
      "url": "https://platform.cdn.xhuoapi.ai/nanobanana/6227fcc9-3442-4aa3-a76c-4a4441a99649.png",
      "revised_prompt": "abstract painting"
    }
  ]
}
```

<p>
  <img src="https://platform.cdn.xhuoapi.ai/nanobanana/6227fcc9-3442-4aa3-a76c-4a4441a99649.png" width="500" className="m-auto" />
</p>

### Asynchroniczny callback

Mechanizm `callback_url` działa również dla nano-banana, proces wywołania jest identyczny jak dla innych modeli, więcej w sekcji [Asynchroniczny callback](#asynchroniczny-callback).

## Podstawowe użytkowanie

Następnie można w interfejsie wypełnić odpowiednie pola, jak na poniższym obrazku:

<p>
  <img src="https://cdn.xhuoapi.ai/zv58ug.png" width="500" className="m-auto" />
</p>

Przy pierwszym użyciu tego interfejsu należy wypełnić co najmniej trzy pola: `authorization` – wybierane z listy rozwijanej, `model` – wybór modelu OpenAI DALL-E, szczegóły dostępnych modeli znajdują się w naszej dokumentacji, oraz `prompt` – tekstowy opis obrazu do wygenerowania.

Po prawej stronie pojawia się wygenerowany kod wywołania, który można skopiować i uruchomić, lub kliknąć przycisk „Try” do testu.

<p>
  <img src="https://cdn.xhuoapi.ai/pbss4f.png" width="500" className="m-auto" />
</p>

Przykładowy kod w Python:

```python theme={null}
import requests

url = "https://api.xhuoapi.ai/v1/openai/images/generations"

headers = {
    "accept": "application/json",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "model": "dall-e-3",
    "prompt": "A cute baby sea otter"
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)
```

Przykładowa odpowiedź:

```json theme={null}
{
  "created": 1721626477,
  "data": [
    {
      "revised_prompt": "A delightful image showcasing a young sea otter, who is born brown, with wide charming eyes. It is delightfully lying on its back, paddling in the calm sea waters. Its dense, velvety fur appears wet and shimmering, capturing the essence of its habitat. The small creature curiously plays with a sea shell with its small paws, looking absolutely innocent and charming in its natural environment.",
      "url": "https://dalleprodsec.blob.core.windows.net/private/images/5d98aa7c-80c6-4523-b571-fc606ad455b9/generated_00.png?se=2024-07-23T05%3A34%3A48Z&sig=GAz%2Bi3%2BkHOQwAMhxcv22tBM%2FaexrxPgT9V0DbNrL4ik%3D&ske=2024-07-23T08%3A41%3A10Z&skoid=e52d5ed7-0657-4f62-bc12-7e5dbb260a96&sks=b&skt=2024-07-16T08%3A41%3A10Z&sktid=33e01921-4d64-4f8c-a055-5bdaffd5e33d&skv=2020-10-02&sp=r&spr=https&sr=b&sv=2020-10-02"
    }
  ]
}
```

Wynik zawiera kilka pól:

* `created` – unikalny identyfikator wygenerowanego obrazu, służący do identyfikacji zadania.
* `data` – zawiera informacje o wygenerowanym obrazie.

W polu `data` znajduje się szczegółowy link do wygenerowanego obrazu w `url`, jak pokazano poniżej:

<p>
  <img src="https://cdn.xhuoapi.ai/dz7u0x.png" width="500" className="m-auto" />
</p>

## Parametr jakości obrazu `quality`

Możemy ustawić szczegółowe parametry generowania obrazu, w tym jakość. Parametr `quality` ma dwie wartości: `standard` – generuje obraz o standardowej jakości, oraz `hd` – generuje obraz z większą szczegółowością i spójnością.

Przykład ustawienia `quality` na `standard`:

<p>
  <img src="https://cdn.xhuoapi.ai/1q303w.png" width="500" className="m-auto" />
</p>

Po prawej stronie pojawia się wygenerowany kod do skopiowania lub przycisk „Try” do testu.

<p>
  <img src="https://cdn.xhuoapi.ai/c0ps6i.png" width="500" className="m-auto" />
</p>

Przykładowy kod:

```python theme={null}
import requests

url = "https://api.xhuoapi.ai/v1/openai/images/generations"

headers = {
    "accept": "application/json",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "model": "dall-e-3",
    "prompt": "A cute baby sea otter",
    "quality": "standard"
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)
```

Przykładowa odpowiedź:

```json theme={null}
{
  "created": 1721636023,
  "data": [
    {
      "revised_prompt": "A cute baby sea otter is lying playfully on its back in the water, with its fur looking glossy and soft. One of its tiny paws is reaching out curiously, and it has an expression of pure joy and warmth on its face as it looks up to the sky. Its body is surrounded by bubbles from its playful twirling in the water. A gentle breeze is playing with its fur making it look more charming. The scene portrays the tranquility and charm of marine life.",
      "url": "https://dalleprodsec.blob.core.windows.net/private/images/a93ee5e7-3abd-4923-8d79-dc9ef126da46/generated_00.png?se=2024-07-23T08%3A13%3A55Z&sig=wTXGYvUOwUIkaB2CxjK9ww%2FHjS8OwYUWcYInXYKwcAM%3D&ske=2024-07-23T11%3A32%3A05Z&skoid=e52d5ed7-0657-4f62-bc12-7e5dbb260a96&sks=b&skt=2024-07-16T11%3A32%3A05Z&sktid=33e01921-4d64-4f8c-a055-5bdaffd5e33d&skv=2020-10-02&sp=r&spr=https&sr=b&sv=2020-10-02"
    }
  ]
}
```

Obraz wygenerowany z parametrem `quality` ustawionym na `standard`:

<p>
  <img src="https://cdn.xhuoapi.ai/j5v15b.png" width="500" className="m-auto" />
</p>

Analogicznie, ustawiając `quality` na `hd`, otrzymamy obraz z większą szczegółowością i spójnością:

<p>
  <img src="https://cdn.xhuoapi.ai/vjpbqr.png" width="500" className="m-auto" />
</p>

## Parametr rozmiaru obrazu `size`

Możemy ustawić rozmiar generowanego obrazu.

Przykład ustawienia rozmiaru na `1024x1024`:

<p>
  <img src="https://cdn.xhuoapi.ai/dx5rwh.png" width="500" className="m-auto" />
</p>

Po prawej stronie pojawia się wygenerowany kod lub przycisk „Try” do testu.

<p>
  <img src="https://cdn.xhuoapi.ai/0sbybl.png" width="500" className="m-auto" />
</p>

Przykładowy kod:

```python theme={null}
import requests

url = "https://api.xhuoapi.ai/v1/openai/images/generations"

headers = {
    "accept": "application/json",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "model": "dall-e-3",
    "prompt": "A cute baby sea otter",
    "size": "1024x1024"
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)
```

Przykładowa odpowiedź:

```json theme={null}
{
  "created": 1721636652,
  "data": [
    {
      "revised_prompt": "A delightful depiction of a baby sea otter. The small mammal is captured in its natural habitat in the ocean, floating on its back. It has thick brown fur that is sleek and wet from the sea water. Its eyes are closed as if it is enjoying a moment of deep relaxation. The water around it is calm, reflecting the peacefulness of the scene. The background should hint at a diverse marine ecosystem, with visible strands of kelp floating on the surface, suggesting the baby otter's preferred environment.",
      "url": "https://dalleprodsec.blob.core.windows.net/private/images/9d625ac6-fd2b-42a9-84a6-8c99eb357ccf/generated_00.png?se=2024-07-23T08%3A24%3A24Z&sig=AXtYXowEakGxfRp8LhC2DwqL%2F07LhEDW40oCP%2BdTO8s%3D&ske=2024-07-23T18%3A00%3A45Z&skoid=e52d5ed7-0657-4f62-bc12-7e5dbb260a96&sks=b&skt=2024-07-16T18%3A00%3A45Z&sktid=33e01921-4d64-4f8c-a055-5bdaffd5e33d&skv=2020-10-02&sp=r&spr=https&sr=b&sv=2020-10-02"
    }
  ]
}
```

Obraz o rozmiarze `1024x1024`:

<p>
  <img src="https://cdn.xhuoapi.ai/o4pvvx.png" width="500" className="m-auto" />
</p>

Analogicznie, ustawiając rozmiar na `1792x1024`, otrzymamy obraz o innym rozmiarze:

![](https://cdn.xhuoapi.ai/4pilae.png)

Można ustawić także inne rozmiary – szczegóły dostępne w dokumentacji na stronie.

## Parametr stylu obrazu `style`

Parametr `style` ma dwie wartości: `vivid` – obraz bardziej żywy, oraz `natural` – bardziej naturalny.

Przykład ustawienia `style` na `vivid`:

<p>
  <img src="https://cdn.xhuoapi.ai/609l9i.png" width="500" className="m-auto" />
</p>

Po prawej stronie wygenerowany kod lub przycisk „Try”:

<p>
  <img src="https://cdn.xhuoapi.ai/ee3u9o.png" width="500" className="m-auto" />
</p>

Przykładowy kod:

```python theme={null}
import requests

url = "https://api.xhuoapi.ai/v1/openai/images/generations"

headers = {
    "accept": "application/json",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "model": "dall-e-3",
    "prompt": "A cute baby sea otter",
    "style": "vivid"
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)
```

Przykładowa odpowiedź:

```json theme={null}
{
  "created": 1721637086,
  "data": [
    {
      "revised_prompt": "A baby sea otter with soft, shiny fur and sparkling eyes floating playfully on calm ocean waters. This adorable creature is trippingly frolicking amidst small, gentle waves under a bright, clear, sunny sky. The tranquility of the sea contrasts subtly with the delightful energy of this young otter. The critter gamely clings to a tiny piece of driftwood, its small paws adorably enveloping the floating object.",
      "url": "https://dalleprodsec.blob.core.windows.net/private/images/6e48f701-7fd3-4356-839e-a2f6f0fe82d9/generated_00.png?se=2024-07-23T08%3A31%3A37Z&sig=4percxqTbUR1j3BQmkhvj%2FAhHzInKI%2FqiTo1MP69coI%3D&ske=2024-07-27T10%3A39%3A55Z&skoid=e52d5ed7-0657-4f62-bc12-7e5dbb260a96&sks=b&skt=2024-07-20T10%3A39%3A55Z&sktid=33e01921-4d64-4f8c-a055-5bdaffd5e33d&skv=2020-10-02&sp=r&spr=https&sr=b&sv=2020-10-02"
    }
  ]
}
```

Obraz wygenerowany z parametrem `style` ustawionym na `vivid`:

<p>
  <img src="https://cdn.xhuoapi.ai/e0rpc3.png" width="500" className="m-auto" />
</p>

Analogicznie, ustawiając `style` na `natural`, otrzymamy obraz bardziej naturalny:

<p>
  <img src="https://cdn.xhuoapi.ai/q9tqwu.png" width="500" className="m-auto" />
</p>

Obrazy z `vivid` są bardziej żywe i realistyczne niż z `natural`.

## Parametr formatu odpowiedzi `response_format`

Parametr `response_format` ma dwie wartości: `b64_json` – link do obrazu zakodowany w Base64, oraz `url` – zwykły link do obrazu, który można bezpośrednio otworzyć.

Przykład ustawienia `response_format` na `url`:

<p>
  <img src="https://cdn.xhuoapi.ai/2zbgrg.png" width="500" className="m-auto" />
</p>

Po prawej stronie wygenerowany kod lub przycisk „Try”:

<p>
  <img src="https://cdn.xhuoapi.ai/a9exmp.png" width="500" className="m-auto" />
</p>

Przykładowy kod:

```python theme={null}
import requests

url = "https://api.xhuoapi.ai/v1/openai/images/generations"

headers = {
    "accept": "application/json",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "model": "dall-e-3",
    "prompt": "A cute baby sea otter",
    "response_format": "url"
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)
```

Przykładowa odpowiedź:

```json theme={null}
{
  "created": 1721637575,
  "data": [
    {
      "revised_prompt": "A charming depiction of a baby sea otter. The otter is seen resting serenely on its back amidst the gentle, blue ocean waves. The baby otter's fur is an endearing mix of soft greyish brown shades, glinting subtly in the muted sunlight. Its small paws are touching, lifted slightly towards the sky as if playing with an unseen object. Its round, expressive eyes are wide in curiosity, sparking with life and innocence. Use a realistic style to evoke the otter's natural habitat and its adorably fluffy exterior.",
      "url": "https://dalleprodsec.blob.core.windows.net/private/images/87792c5f-8b6d-412e-81dd-f1a1baa19bd2/generated_00.png?se=2024-07-23T08%3A39%3A47Z&sig=zzRAn30TqIKHdLVqZPUUuSJdjCYpoJdaGU6BeoA76Jo%3D&ske=2024-07-23T13%3A32%3A13Z&skoid=e52d5ed7-0657-4f62-bc12-7e5dbb260a96&sks=b&skt=2024-07-16T13%3A32%3A13Z&sktid=33e01921-4d64-4f8c-a055-5bdaffd5e33d&skv=2020-10-02&sp=r&spr=https&sr=b&sv=2020-10-02"
    }
  ]
}
```

Link do obrazu z parametrem `url` można bezpośrednio otworzyć, obraz wygląda tak:

<p>
  <img src="https://cdn.xhuoapi.ai/33hs4z.png" width="500" className="m-auto" />
</p>

Analogicznie, ustawiając `response_format` na `b64_json`, otrzymamy zakodowany w Base64 obraz:

```json theme={null}
{
  "created": 1721638071,
  "data": [
    {
      "b64_json": "iVBORw0..............v//AQEAAP4AAAD+AAADAQAAAwEEA/4D//8Q/Pbw64mKbVTFoQAAAABJRU5ErkJggg==",
      "revised_prompt": "A charming image of a young baby sea otter. The otter is gently floating on a calm blue sea, basking in the warm, golden rays of sunlight streaming down from a clear sky above. The otter's fur is a rich chocolate brown, and it looks incredibly soft and fluffy. The otter's eyes are bright and expressive, filled with childlike curiosity and joy. It has small, pricked ears and a button-like nose which adds to its overall cuteness. In the sea around it, twinkling droplets of water can be seen, pepped up by the sunlight, the sight is certainly a delightful one."
    }
  ]
}
```

## Asynchroniczny callback

Ponieważ generowanie obrazów przez OpenAI Images Generations API może trwać stosunkowo długo, a długie utrzymywanie połączenia HTTP powoduje dodatkowe obciążenie systemu, API oferuje wsparcie dla asynchronicznego callbacku.

Proces jest następujący: klient wysyła żądanie z dodatkowym polem `callback_url`. API natychmiast zwraca odpowiedź zawierającą `task_id` – identyfikator zadania. Po zakończeniu generowania obraz zostanie przesłany metodą POST w formacie JSON na wskazany `callback_url`, zawierając również `task_id`, co pozwala powiązać wynik z zadaniem.

Przykład:

Webhook callback to usługa HTTP, którą programista powinien zastąpić własnym serwerem HTTP. Dla demonstracji można użyć publicznego serwisu [https://webhook.site/](https://webhook.site/), gdzie po wejściu na stronę otrzymujemy unikalny URL webhooka, np.:

![](https://cdn.xhuoapi.ai/cjjfly.png)

Skopiuj ten URL, np. `https://webhook.site/3d32690d-6780-4187-a65c-870061e8c8ab`.

Następnie ustaw pole `callback_url` na ten URL i wyślij żądanie:

```python theme={null}
import requests

url = "https://api.xhuoapi.ai/v1/openai/images/generations"

headers = {
    "accept": "application/json",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "model": "dall-e-3",
    "prompt": "A cute baby sea otter",
    "callback_url": "https://webhook.site/3d32690d-6780-4187-a65c-870061e8c8ab"
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)
```

Otrzymasz natychmiast odpowiedź:

```json theme={null}
{
  "task_id": "6a97bf49-df50-4129-9e46-119aa9fca73c"
}
```

Po chwili na stronie webhooka zobaczysz wynik generowania obrazu:

```json theme={null}
{
  "success": true,
  "task_id": "6a97bf49-df50-4129-9e46-119aa9fca73c",
  "trace_id": "9b4b1ff3-90f2-470f-b082-1061ec2948cc",
  "data": {
    "created": 1721626477,
    "data": [
      {
        "revised_prompt": "A delightful image showcasing a young sea otter...",
        "url": "https://dalleprodsec.blob.core.windows.net/private/images/..."
      }
    ]
  }
}
```

Wynik zawiera `task_id` oraz pole `data` z wygenerowanym obrazem, co pozwala powiązać odpowiedź z zadaniem.

## Obsługa błędów

W przypadku błędów API zwraca odpowiedni kod i komunikat, np.:

* `400 token_mismatched`: Nieprawidłowe żądanie, brak lub błędne parametry.
* `400 api_not_implemented`: Nieprawidłowe żądanie, brak lub błędne parametry.
* `401 invalid_token`: Nieautoryzowany, nieprawidłowy lub brakujący token autoryzacji.
* `429 too_many_requests`: Zbyt wiele żądań, przekroczony limit.
* `500 api_error`: Błąd wewnętrzny serwera.

### Przykład odpowiedzi błędu

```json theme={null}
{
  "success": false,
  "error": {
    "code": "api_error",
    "message": "fetch failed"
  },
  "trace_id": "2cf86e86-22a4-46e1-ac2f-032c0f2a4e89"
}
```

## Podsumowanie

Dzięki tej dokumentacji nauczyłeś się, jak łatwo korzystać z OpenAI Images Generations API, aby korzystać z oficjalnych funkcji generowania obrazów OpenAI DALL-E. Mamy nadzieję, że dokumentacja pomoże Ci lepiej integrować i używać tego API. W razie pytań prosimy o kontakt z naszym zespołem wsparcia technicznego.
