> ## Documentation Index
> Fetch the complete documentation index at: https://germeytechnology-docs-remove-4o-image-nav.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# OpenAI Images Generations API — Wniosek i użycie

> OpenAI generation 集成指南 - Ace Data Cloud

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 serię modeli **`nano-banana` / `nano-banana-2` / `nano-banana-pro`** dostępnych 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 z serii OpenAI.

## Proces wnioskowania

Aby korzystać z OpenAI Images Generations API, najpierw można przejść na stronę [OpenAI Images Generations API](https://platform.acedata.cloud/documents/openai-images-generations) i kliknąć przycisk „Acquire”, aby uzyskać niezbędne poświadczenia do żądań:

![](https://cdn.acedata.cloud/nyq0xz.png)

Jeśli nie jesteś zalogowany lub zarejestrowany, zostaniesz automatycznie przekierowany na stronę 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, znaki tekst i cyfry w języku angielskim są niemal bezbłędne.
* **Bogatsze wyrażanie stylu**: natywne wsparcie dla wielu 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) oraz 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`. Pole `url` w zwracanym wyniku to trwały link do obrazu hostowany na `platform.cdn.acedata.cloud`, który można otworzyć bezpośrednio w przeglądarce lub osadzić na stronie.

### Obsługiwane wartości `size`

`gpt-image-2` sprawdza tylko format `size` — jeśli nie jest `auto` ani pustym ciągiem, musi odpowiadać wzorcowi `WIDTHxHEIGHT` (np. `1024x1024`, `2048x1152`, `800x600`); inne formaty zwrócą błąd 400. **Wszystkie rozmiary (1K / 2K / 4K / niestandardowe) są rozliczane jednolicie za pojedynczy obraz, bez dodatkowych opłat za rozmiar.**

Ograniczenia nałożone przez backend dotyczące niestandardowych rozmiarów: szerokość i wysokość muszą być wielokrotnością 16, dłuższy bok ≤ 3840, całkowita liczba pikseli ≤ 8 294 400. Przekroczenie tych limitów spowoduje odrzucenie przez backend i zwrócenie błędu 4xx.

| Proporcja | Zalecane 1K | Zalecane 2K | Zalecane 4K |
| --------- | ----------- | ----------- | ----------- |
| 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 przekazać `size: "auto"` lub **pominąć pole `size`**, wtedy model wybierze domyślny rozmiar.
>
> Przy rozdzielczości 1K backend nie gwarantuje ścisłego dopasowania pikseli — np. podając `1024x1024` możesz otrzymać obraz `1254x1254`, proporcje będą zachowane. Jeśli ponownie przekażesz taki rozmiar jako `size`, opłata pozostanie bez zmian.
>
> Pojedyncze wywołanie 4K zwykle zajmuje 4–8 minut, zaleca się użycie mechanizmu asynchronicznego `callback_url` opisanym dalej.

> **O parametrze `n`**
>
> `gpt-image-2` obecnie **nie obsługuje `n > 1`** — parametr jest ignorowany, niezależnie czy podasz `n=1` czy `n=10`, zwrócony zostanie tylko jeden obraz i naliczona opłata za jeden obraz. Jeśli potrzebujesz wielu obrazów, wykonaj wiele równoległych żądań (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 obsługującym `n > 1`; `dall-e-3` obsługuje tylko `n = 1`.

Poniżej przedstawiamy kilka rzeczywistych przykładów, które pokazują 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 tekstury.

Przykład wywołania w Pythonie:

```python theme={null}
import requests

url = "https://api.acedata.cloud/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.acedata.cloud/gpt-image/ab58a5df-6f46-4874-bff6-93169e2849a3_0.png"
    }
  ]
}
```

Wygenerowany obraz:

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

### Scenariusz 2: Plakat podróżniczy w stylu retro (z renderowaniem tekstu)

`gpt-image-2` jest stabilny w kwestii typografii i układu, idealny do generowania 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` w odpowiedzi:

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

Model dokładnie odwzorował styl Art Deco, a tekst `AMALFI` i `ITALIA 1958` jest wyraźny i poprawny.

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

Prompt testujący przestrzeganie instrukcji dotyczących liczby i położenia 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.acedata.cloud/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ś, co było trudne do osiągnięcia w erze `dall-e-3`.

### Scenariusz 4: Styl ilustracji (orientacja pozioma)

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.acedata.cloud/gpt-image/6cd57e69-d237-4cc1-a666-759a93964a08_0.png)

### Asynchroniczność i callback

Pojedyncze wywołanie `gpt-image-2` zwykle trwa 60–90 sekund. Jeśli nie chcesz utrzymywać długiego połączenia, możesz użyć mechanizmu asynchronicznego callback opisanego dalej. Proces wywołania jest identyczny jak w przypadku innych modeli.

## Modele 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ć `model` na dowolny z poniższej tabeli.

| Model             | Koszt (Credits / wywołanie) | Scenariusz użycia                                         |
| ----------------- | --------------------------- | --------------------------------------------------------- |
| `nano-banana`     | 0.14                        | Standardowe generowanie obrazów, najszybsze i najtańsze   |
| `nano-banana-2`   | 0.28                        | Znacznie lepsza jakość i szczegóły                        |
| `nano-banana-pro` | 0.35                        | Flagowy model serii, najlepsza kompozycja, detale i tekst |

> **Zakres obsługiwanych parametrów**
>
> Nano Banana korzysta z warstwy adaptacyjnej do protokołu OpenAI i w porównaniu do `gpt-image-*` obsługuje tylko: `model`, `prompt`, `size`.
>
> * `size` jest mapowane na wewnętrzny `aspect_ratio` według tabeli:
>   * `1024x1024` / `512x512` / `256x256` → `1:1`
>   * `1792x1024` → `16:9`
>   * `1024x1792` → `9:16`
> * Nie obsługuje parametrów `n`, `quality`, `style`, `response_format`, `background`, `output_format` — są ignorowane.
> * Struktura odpowiedzi jest zgodna z formatem OpenAI (`data[].url`), ale `created` zawsze 0, nie zwraca `b64_json`, a `revised_prompt` zawsze równe oryginalnemu `prompt`.

### Podstawowe wywołanie

```python theme={null}
import requests

url = "https://api.acedata.cloud/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.acedata.cloud/nanobanana/6870b330-65c4-436c-bb80-819fdae7a7a4.png",
      "revised_prompt": "a small red apple on a white table, photoreal"
    }
  ]
}
```

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

<p>
  <img src="https://platform.cdn.acedata.cloud/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.acedata.cloud/nanobanana/6227fcc9-3442-4aa3-a76c-4a4441a99649.png",
      "revised_prompt": "abstract painting"
    }
  ]
}
```

<p>
  <img src="https://platform.cdn.acedata.cloud/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 taki sam jak dla innych modeli, opisany w sekcji [Asynchroniczny callback](#asynchroniczny-callback).

## Podstawowe użycie

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

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

Przy pierwszym użyciu tego interfejsu musisz podać co najmniej trzy wartości: `authorization` — wybierz z listy rozwijanej, `model` — wybierz model OpenAI DALL-E (tutaj dostępny jest jeden model, szczegóły w dokumentacji modeli) oraz `prompt` — tekstowy opis obrazu do wygenerowania.

Po prawej stronie zobaczysz wygenerowany kod wywołania, który możesz skopiować i uruchomić lub kliknąć przycisk „Try” aby przetestować.

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

Przykład wywołania w Pythonie:

```python theme={null}
import requests

url = "https://api.acedata.cloud/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` — ID wygenerowanego obrazu, unikalny identyfikator zadania.
* `data` — zawiera informacje o wygenerowanym obrazie.

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

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

## Parametr jakości obrazu `quality`

Możesz ustawić szczegółowe parametry generowania obrazu, w tym parametr jakości `quality`, który ma dwie wartości: `standard` — generuje obraz standardowej jakości, oraz `hd` — generuje obraz z większą ilością detali i spójnością.

Poniżej ustawiamy `quality` na `standard`:

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

Po prawej stronie pojawi się wygenerowany kod, który możesz skopiować lub kliknąć „Try” aby przetestować.

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

Przykład wywołania w Pythonie:

```python theme={null}
import requests

url = "https://api.acedata.cloud/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` wygląda tak:

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

Analogicznie, ustawiając `quality` na `hd`, otrzymasz obraz z większą ilością detali i spójnością:

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

## Parametr rozmiaru obrazu `size`

Możesz także ustawić rozmiar generowanego obrazu.

Przykład ustawienia rozmiaru na `1024x1024`:

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

Po prawej stronie pojawi się kod do wywołania, który można skopiować lub przetestować:

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

Przykład wywołania w Pythonie:

```python theme={null}
import requests

url = "https://api.acedata.cloud/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` wygląda tak:

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

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

![](https://cdn.acedata.cloud/4pilae.png)

Możesz ustawić także inne rozmiary, szczegóły znajdziesz w dokumentacji na stronie.

## Parametr stylu obrazu `style`

Parametr stylu `style` ma dwie wartości: `vivid` — generuje bardziej żywe obrazy, oraz `natural` — generuje obrazy bardziej naturalne.

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

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

Po prawej stronie pojawi się kod do wywołania, który można skopiować lub przetestować:

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

Przykład wywołania w Pythonie:

```python theme={null}
import requests

url = "https://api.acedata.cloud/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.acedata.cloud/e0rpc3.png" width="500" className="m-auto" />
</p>

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

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

`vivid` generuje obrazy bardziej żywe i realistyczne niż `natural`.

## Parametr formatu odpowiedzi `response_format`

Parametr `response_format` ma dwie wartości: `b64_json` — kodowanie linku do obrazu 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.acedata.cloud/2zbgrg.png" width="500" className="m-auto" />
</p>

Po prawej stronie pojawi się kod do wywołania, który można skopiować lub przetestować:

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

Przykład wywołania w Pythonie:

```python theme={null}
import requests

url = "https://api.acedata.cloud/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"
    }
  ]
}
```

Obraz można bezpośrednio otworzyć pod tym linkiem: [Obraz 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).

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

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

```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 zająć stosunkowo dużo czasu, długie oczekiwanie na odpowiedź HTTP powoduje utrzymywanie połączenia, co zwiększa zużycie zasobów systemowych. Dlatego API oferuje wsparcie dla asynchronicznego callback.

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

Poniżej przykład, jak to zrobić.

Webhook callback to usługa HTTP, która odbiera żądania. Programista powinien podać adres własnego serwera HTTP. Dla demonstracji można użyć publicznej strony [https://webhook.site/](https://webhook.site/), która generuje unikalny URL webhooka, jak na obrazku:

![](https://cdn.acedata.cloud/cjjfly.png)

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

Następnie ustaw pole `callback_url` na ten adres i wywołaj API, np.:

```python theme={null}
import requests

url = "https://api.acedata.cloud/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)
```

Po wywołaniu 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` i pole `data` z tymi samymi danymi co wywołanie synchroniczne, co pozwala powiązać zadania.

## Obsługa błędów

W przypadku błędów API zwraca odpowiedni kod i komunikat. Przykładowe kody:

* `400 token_mismatched`: Niepoprawne żądanie, np. brak lub błędne parametry.
* `400 api_not_implemented`: Niepoprawne żądanie, np. brak lub błędne parametry.
* `401 invalid_token`: Brak autoryzacji, nieprawidłowy lub brakujący token.
* `429 too_many_requests`: Zbyt wiele żądań, przekroczono limit.
* `500 api_error`: Błąd 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 do generowania obrazów za pomocą oficjalnego modelu OpenAI DALL-E. Mamy nadzieję, że dokumentacja pomoże Ci w integracji i użyciu API. W razie pytań prosimy o kontakt z naszym zespołem wsparcia technicznego.
