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

# OpenAI Images Generations API 申请及使用

> OpenAI generation API guide - Ace Data Cloud

OpenAI Images Generations API obecnie wspiera wiele modeli generacji obrazów, w tym klasyczny `dall-e-3`, model o silniejszych zdolnościach renderowania tekstu `gpt-image-1`, najnowszą generację **`gpt-image-2`**, oraz serię modeli **`nano-banana` / `nano-banana-2-lite` / `nano-banana-2` / `nano-banana-pro`**, które są dostępne przez ten sam interfejs. Wszystkie te modele potrafią generować wysokiej jakości obrazy na podstawie opisów tekstowych.

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

## Proces aplikacji

Aby korzystać z OpenAI Images Generations API, najpierw przejdź do [Ace Data Cloud Console](https://platform.acedata.cloud/console/applications), aby uzyskać swój token API, który należy zachować na przyszłość.

![](https://cdn.acedata.cloud/5hmkdg.jpg)

Jeśli nie jesteś zalogowany lub zarejestrowany, automatycznie zostaniesz przekierowany na stronę logowania, aby zarejestrować się i zalogować, a po zakończeniu zostaniesz automatycznie przekierowany z powrotem na bieżącą stronę.

**Jeden token API wystarczy do korzystania ze wszystkich usług platformy, nie ma potrzeby składania osobnych wniosków dla każdej usługi.** Pierwszy wniosek daje darmowy limit, który można wykorzystać bezpłatnie; w przypadku niewystarczającego limitu można doładować saldo ogólne w [konsoli](https://platform.acedata.cloud/console/coin).

> 📘 Pełna dokumentacja: [OpenAI Images Generations API →](https://platform.acedata.cloud/documents/openai-images-generations)

## Model GPT-Image-2

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

* **Silniejsza zdolność do przestrzegania instrukcji**: potrafi dokładnie zrozumieć złożone kompozycje, liczenie, relacje przestrzenne i inne złożone instrukcje.
* **Wyraźniejsze renderowanie tekstu**: w scenach takich jak plakaty, menu, infografiki, logotypy angielski i cyfry prawie nigdy nie są zniekształcone.
* **Bogatsze wyrażenie stylu**: natywne wsparcie dla różnych stylów, takich jak filmowe portrety, retro plakaty, ilustracje dla dzieci, fotografia produktowa, infografiki itp.
* **Natywne wsparcie dla wielu proporcji + wysokiej rozdzielczości**: obejmuje 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 całkowicie zgodny z innymi modelami, wystarczy ustawić pole `model` na `gpt-image-2`. W zwróconym wyniku `url` to link do obrazu, który jest trwale hostowany na `platform.cdn.acedata.cloud`, można go otworzyć bezpośrednio w przeglądarce lub osadzić na stronie internetowej.

### Oficjalny pośrednik / Odwrócona wersja (`:official` / `:reverse`)

`gpt-image-2` domyślnie korzysta z odwróconej trasy. Można jawnie wybrać trasę za pomocą sufiksu nazwy modelu:

* **`gpt-image-2:official`**: oficjalna trasa pośrednia. Wspiera `n > 1` (zwraca wiele obrazów jednocześnie) oraz prawdziwe rozdzielczości 2K / 4K, **opłata za każdą obrazek, cena jednostkowa to 2-krotność domyślnego `gpt-image-2`**. Obecnie dostępne tylko przez kanał openai-hk, w przypadku braku dostępności trasy zwraca bezpośrednio błąd, nie przechodzi na trasę odwróconą.
* **`gpt-image-2:reverse`**: całkowicie równoważne z domyślnym `gpt-image-2` (odwrócona trasa), używane do jawnego zadeklarowania korzystania z odwróconej trasy, cena pozostaje bez zmian.

> Ograniczenia dotyczące parametru `n` w dalszej części odnoszą się tylko do domyślnej / odwróconej trasy; `gpt-image-2:official` wspiera `n > 1` i rozlicza na podstawie obrazków.

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

`gpt-image-2` sprawdza tylko format `size`, o ile nie jest `auto` lub pustym ciągiem, musi pasować do formatu `WIDTHxHEIGHT` (np. `1024x1024`, `2048x1152`, `800x600`); wszelkie inne formy zwrócą 400. **Wszystkie rozmiary (1K / 2K / 4K / niestandardowe) są rozliczane na podstawie pojedynczego obrazka, nie ma dodatkowych opłat za rozmiar.**

Górne ograniczenia 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 wartości spowoduje odrzucenie przez górny poziom i zwrócenie 4xx.

| Proporcja | 1K rekomendowane | 2K rekomendowane | 4K rekomendowane |
| --------- | ---------------- | ---------------- | ---------------- |
| 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 również przekazać `size: "auto"` lub **pominąć pole `size`**, w takim przypadku model sam wybierze domyślny rozmiar.
> W przypadku 1K górny poziom nie gwarantuje ścisłego dopasowania pikseli — możesz przekazać `1024x1024`, a otrzymać `1254x1254`, proporcje pozostaną zgodne. Jeśli ponownie przekażesz to jako `size`, opłata pozostaje bez zmian.
> Jedno wywołanie 4K zazwyczaj wymaga 4–8 minut, zaleca się użycie asynchronicznego wywołania `callback_url` w dalszej części.

> **O parametrach `n`**
> `gpt-image-2` obecnie **nie wspiera `n > 1`**: ten parametr będzie cicho ignorowany, niezależnie od tego, czy przekażesz `n=1`, czy `n=10`, pojedyncze żądanie zawsze zwróci 1 obrazek i będzie rozliczane tylko za 1 obrazek. Jeśli potrzebujesz uzyskać wiele obrazów kandydatów jednocześnie, proszę **samodzielnie uruchomić wiele równoległych żądań** (zaleca się jednoczesne przekazywanie różnych `prompt` lub różnych `seed`, w przeciwnym razie uzyskane obrazy mogą być bardzo podobne). To ograniczenie dotyczy również `gpt-image-1` / `gpt-image-1.5`, a także serii `nano-banana` / `nano-banana-2-lite` / `nano-banana-2` / `nano-banana-pro`. `dall-e-2` jest obecnie jedynym modelem, który natywnie wspiera `n > 1`; `dall-e-3` wspiera tylko `n = 1`.

Poniżej przedstawiamy kilka różnych rzeczywistych przykładów, aby intuicyjnie poczuć możliwości `gpt-image-2`.

### Scena 1: Filmowy portret

W podpowiedziach można używać terminów filmowych (35mm film, płytka głębia, neonowe światło itp.), aby precyzyjnie kontrolować atmosferę i jakość.

Przykładowy kod 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": "Kinematograficzny portret młodej kobiety stojącej w sklepie spożywczym w nocy, oświetlonej miękkimi różowymi i cyjanowymi neonami przez okno. Zdjęcie na filmie 35mm, płytka głębia ostrości, lekka ziarnistość, melancholijna atmosfera.",
    "size": "1024x1536"
}

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

Wynik zwrócony jest następujący:

```json theme={null}
{
  "success": true,
  "task_id": "ab58a5df-6f46-4874-bff6-93169e2849a3",
  "created": 1777048800,
  "data": [
    {
      "revised_prompt": "Kinematograficzny portret młodej kobiety stojącej w sklepie spożywczym w nocy, oświetlonej miękkimi różowymi i cyjanowymi neonami przez okno. Zdjęcie na filmie 35mm, płytka głębia ostrości, lekka ziarnistość, melancholijna atmosfera.",
      "url": "https://platform.cdn.acedata.cloud/gpt-image/ab58a5df-6f46-4874-bff6-93169e2849a3_0.png"
    }
  ]
}
```

Wygenerowany obrazek wygląda następująco:

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

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

`gpt-image-2` wykazuje stabilność w typografii i renderowaniu czcionek, co czyni go idealnym do generowania plakatów, menu, kart okolicznościowych i innych projektów z tekstem.

```python theme={null}
payload = {
    "model": "gpt-image-2",
    "prompt": "Retro plakat podróżniczy wybrzeża Amalfi, Włochy. Stylizowana ilustracja art-deco przedstawiająca żółte domy na klifie opadające w kierunku turkusowego morza, z małym białym żaglowcem w porcie. Odważna typografia na górze z napisem AMALFI, a na dole ITALIA 1958. Ograniczona paleta kolorów: kremowy, morski niebieski, żółty cytrynowy, terakota. Lekka tekstura papieru.",
    "size": "1024x1536"
}
```

Wynik zwrócony w polu `url` odpowiada obrazkowi poniżej:

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

Można zauważyć, że model nie tylko dokładnie odwzorował wizualny styl plakatu Art Deco, ale także tytułowe napisy `AMALFI` i `ITALIA 1958` zostały wyraźnie i poprawnie wyrenderowane.

### Scena 3: Złożona kompozycja i liczba

Poniższy prompt służy do testowania zdolności modelu do przestrzegania zorganizowanych instrukcji dotyczących „ilości” i „lokalizacji”.

```python theme={null}
payload = {
    "model": "gpt-image-2",
    "prompt": "Drewniana półka na książki składająca się z trzech półek: Na górnej półce powinien być jeden książka. Na drugiej półce powinny być trzy książki. Na dolnej półce powinno być siedem książek. Miękkie ciepłe oświetlenie, fotorealistyczne, przytulna atmosfera biblioteki.",
    "size": "1024x1024"
}
```

Wygenerowany obrazek wygląda następująco:

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

Można zauważyć, że liczba książek na trzech półkach (1 / 3 / 7) jest całkowicie zgodna z promptem, co było trudne do stabilnego osiągnięcia w erze `dall-e-3`.

### Scena 4: Styl ilustracji (poziomo)

Poprzez określenie medium artystycznego i słów kluczowych dotyczących emocji, można skierować model do produkcji stylizowanej ilustracji.

```python theme={null}
payload = {
    "model": "gpt-image-2",
    "prompt": "Miękka, poetycka ilustracja książki dla dzieci przedstawiająca małego lisa czytającego książkę pod świecącym grzybem w lesie oświetlonym księżycem. Tekstura akwareli i ołówka, delikatne pastelowe kolory, marzycielska atmosfera, ręcznie rysowany styl.",
    "size": "1536x1024"
}
```

Wygenerowana pozioma ilustracja wygląda następująco:

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

### Asynchroniczność i wywołania zwrotne

`gpt-image-2` zazwyczaj wymaga 60-90 sekund na pojedyncze wywołanie. Jeśli nie chcesz utrzymywać długiego połączenia, możesz skorzystać z mechanizmu asynchronicznego wywołania zwrotnego `callback_url`, którego proces wywołania jest całkowicie zgodny z innymi modelami.

## Seria modeli Nano Banana

Seria `nano-banana` to modele generowania obrazów oparte na Gemini, które zostały zintegrowane przez ten sam interfejs `/openai/images/generations`, bez potrzeby zmiany punktu końcowego, wystarczy zmienić `model` na dowolny z poniższej tabeli.

| Model                | Koszt (Kredyty / raz) | Zastosowanie                                                          |
| -------------------- | --------------------- | --------------------------------------------------------------------- |
| `nano-banana`        | 0.14                  | Zwykłe generowanie obrazów, najszybsze, najtańsze                     |
| `nano-banana-2-lite` | 0.14                  | Lekki model obrazów Gemini 3.1, obsługuje tylko 1K, niskie opóźnienie |
| `nano-banana-2`      | 0.28                  | Wyraźna poprawa jakości i szczegółowości                              |
| `nano-banana-pro`    | 0.35                  | Flagowy model w serii, najlepsza kompozycja, szczegóły, tekst         |

> **Ważne: Zakres obsługiwanych parametrów**
> Nano Banana łączy się z protokołem OpenAI przez warstwę adaptacyjną, w porównaniu do `gpt-image-*` obsługuje tylko następujące parametry: `model`, `prompt`, `size`.
>
> * `size` będzie mapowane na wewnętrzny `aspect_ratio`, a nie wymienione rozmiary będą degradujące do `1:1`:
>   * `1024x1024` / `512x512` / `256x256` → `1:1`
>   * `1792x1024` → `16:9`
>   * `1024x1792` → `9:16`
> * Nie obsługuje parametrów `n`, `quality`, `style`, `response_format`, `background`, `output_format` itp.; wypełnione będą ignorowane.
> * Struktura zwrotna przestrzega formatu OpenAI (`data[].url`), ale `created` jest stałe na `0`, a `b64_json` nie będzie zwracane, `revised_prompt` zawsze równa się 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": "małe czerwone jabłko na białym stole, fotorealistyczne",
    "size": "1024x1024"
}

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

Wynik zwrócony jest następujący:

```json theme={null}
{
  "created": 0,
  "data": [
    {
      "url": "https://platform.cdn.acedata.cloud/nanobanana/6870b330-65c4-436c-bb80-819fdae7a7a4.png",
      "revised_prompt": "małe czerwone jabłko na białym stole, fotorealistyczne"
    }
  ]
}
```

Generowane obrazy można bezpośrednio uzyskać za pomocą zwróconego pola `url`:

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

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

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

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

Przykład odpowiedzi:

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

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

### Asynchroniczny callback

Mechanizm asynchronicznego callbacku `callback_url` działa również w przypadku nano-banana, proces wywołania jest całkowicie zgodny z innymi modelami, szczegóły znajdują się w sekcji [Asynchroniczny callback](#asynchroniczny-callback).

## Podstawowe użycie

Następnie można wypełnić odpowiednie treści w interfejsie, jak pokazano na obrazku:

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

Podczas pierwszego użycia tego interfejsu musimy wypełnić przynajmniej trzy pola, jedno to `authorization`, które można wybrać bezpośrednio z rozwijanej listy. Kolejny parametr to `model`, `model` to kategoria modelu, którą wybieramy do użycia z oficjalnej strony OpenAI DALL-E, tutaj mamy głównie 1 model, szczegóły można zobaczyć w dostarczonym modelu. Ostatni parametr to `prompt`, `prompt` to słowo kluczowe, które wprowadzamy, aby wygenerować obraz.

Można również zauważyć, że po prawej stronie znajduje się odpowiedni kod wywołania, który można skopiować i uruchomić, lub można bezpośrednio kliknąć przycisk „Try”, aby przetestować.

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

Przykładowy kod 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": "Uroczy mały wydrzyk morski"
}

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

Po wywołaniu zauważamy, że zwrócony wynik wygląda następująco:

```json theme={null}
{
  "created": 1721626477,
  "data": [
    {
      "revised_prompt": "Uroczy obraz przedstawiający młodego wydrzyka morskiego, który urodził się brązowy, z szerokimi, urokliwymi oczami. Leży uroczo na plecach, pływając w spokojnych wodach morza. Jego gęste, aksamitne futro wygląda na mokre i błyszczące, uchwycając istotę jego siedliska. Małe stworzenie ciekawie bawi się muszlą swoimi małymi łapkami, wyglądając absolutnie niewinnie i uroczo w swoim naturalnym środowisku.",
      "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"
    }
  ]
}
```

Zwrócone wyniki zawierają wiele pól, które są opisane poniżej:

* `created`, ID generacji obrazu, używane do unikalnej identyfikacji tego zadania.
* `data`, zawiera informacje o wynikach generacji obrazu.

W tym przypadku `data` zawiera szczegółowe informacje o wygenerowanym obrazie, a `url` to link do szczegółów wygenerowanego obrazu, co można zobaczyć na obrazku.

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

## Parametr jakości obrazu `quality`

Następnie przedstawimy, jak ustawić niektóre szczegółowe parametry wyników generacji obrazu, w tym parametr jakości obrazu `quality`, który zawiera dwa rodzaje: pierwszy `standard` oznacza generowanie standardowego obrazu, a drugi `hd` oznacza, że tworzony obraz ma bardziej szczegółowe detale i większą spójność.

Poniżej ustawiamy parametr jakości obrazu na `standard`, szczegóły ustawienia przedstawione są na poniższym obrazku:

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

Można również zauważyć, że po prawej stronie znajduje się odpowiedni kod wywołania, który można skopiować i uruchomić, lub można bezpośrednio kliknąć przycisk „Try”, aby przetestować.

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

Przykładowy kod 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": "Uroczy mały wydrzyk morski",
    "quality": "standard"
}

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

Po wywołaniu zauważamy, że zwrócony wynik wygląda następująco:

```json theme={null}
{
  "created": 1721636023,
  "data": [
    {
      "revised_prompt": "Uroczy mały wydrzyk morski leży zabawnie na plecach w wodzie, z futrem wyglądającym na błyszczące i miękkie. Jedna z jego małych łapek sięga ciekawie, a na jego twarzy widać czystą radość i ciepło, gdy patrzy w niebo. Jego ciało otoczone jest bąbelkami z powodu jego zabawnego kręcenia się w wodzie. Łagodny wiatr bawi się jego futrem, sprawiając, że wygląda jeszcze bardziej uroczo. Scena przedstawia spokój i urok życia morskiego.",
      "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"
    }
  ]
}
```

Zwrócone wyniki są zgodne z treścią podstawowego użycia, można zobaczyć, że obraz o parametrze jakości `standard` wygląda jak na poniższym obrazku:

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

Wykonując te same operacje, wystarczy ustawić parametr jakości obrazu na `hd`, aby uzyskać obraz przedstawiony na poniższym zdjęciu:

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

Można zauważyć, że `hd` generuje obrazy z bardziej szczegółowymi detalami i większą spójnością niż `standard`.

## Parametr rozmiaru obrazu `size`

Możemy również ustawić rozmiar generowanego obrazu, możemy dokonać poniższych ustawień.

Ustawiamy rozmiar obrazu na `1024 * 1024`, konkretne ustawienie przedstawione na poniższym zdjęciu:

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

Jednocześnie można zauważyć, że po prawej stronie znajduje się odpowiedni kod wywołania, który można skopiować i uruchomić, lub po prostu kliknąć przycisk „Try”, aby przetestować.

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

Przykładowy kod 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)
```

Po wywołaniu odkrywamy, że zwrócony wynik wygląda następująco:

```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"
    }
  ]
}
```

Zwrócony wynik jest zgodny z podstawowym użyciem, można zauważyć, że rozmiar wygenerowanego obrazu wynosi `1024 * 1024`, jak pokazano na poniższym zdjęciu:

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

Wykonując te same operacje, wystarczy ustawić rozmiar obrazu na `1792 * 1024`, aby uzyskać obraz przedstawiony na poniższym zdjęciu:

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

Można zauważyć, że rozmiar obrazu jest wyraźnie inny, można również ustawić więcej rozmiarów, szczegóły można znaleźć w dokumentacji na naszej stronie internetowej.

## Parametr stylu obrazu `style`

Parametr stylu obrazu `style` zawiera dwa parametry, pierwszy `vivid` oznacza, że generowany obraz jest bardziej żywy, a drugi `natural` oznacza, że generowany obraz jest bardziej naturalny.

Ustawiamy parametr stylu obrazu na `vivid`, konkretne ustawienie przedstawione na poniższym zdjęciu:

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

Jednocześnie można zauważyć, że po prawej stronie znajduje się odpowiedni kod wywołania, który można skopiować i uruchomić, lub po prostu kliknąć przycisk „Try”, aby przetestować.

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

Przykładowy kod 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)
```

Po wywołaniu odkrywamy, że zwrócony wynik wygląda następująco:

```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"
    }
  ]
}
```

Zwrócony wynik jest zgodny z podstawowym użyciem, można zauważyć, że styl obrazu ustawiony na `vivid` generuje obraz przedstawiony na poniższym zdjęciu:

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

Wykonując te same operacje, wystarczy ustawić parametr stylu obrazu na `natural`, aby uzyskać obraz przedstawiony na poniższym zdjęciu:

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

Można zauważyć, że `vivid` generuje obrazy, które są bardziej żywe i realistyczne niż `natural`.

## Parametr formatu linku obrazu `response_format`

Ostatni parametr formatu linku obrazu `response_format` ma również dwa rodzaje, pierwszy `b64_json` to kodowanie linku obrazu w Base64, a drugi `url` to zwykły link do obrazu, który można bezpośrednio zobaczyć.

Ustawiamy parametr formatu linku obrazu na `url`, konkretne ustawienie przedstawione na poniższym zdjęciu:

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

Jednocześnie można zauważyć, że po prawej stronie znajduje się odpowiedni kod wywołania, który można skopiować i uruchomić, lub po prostu kliknąć przycisk „Try”, aby przetestować.

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

Przykładowy kod 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": "Uroczy mały wydrzyk morski",
    "response_format": "url"
}

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

Po wywołaniu, otrzymaliśmy następujący wynik:

```json theme={null}
{
  "created": 1721637575,
  "data": [
    {
      "revised_prompt": "Urocze przedstawienie małego wydrzyka morskiego. Wydrzyk leży spokojnie na plecach wśród łagodnych, niebieskich fal oceanu. Futro małego wydrzyka to urocza mieszanka miękkich odcieni szaro-brązowych, subtelnie błyszczących w przytłumionym świetle słonecznym. Jego małe łapki są urocze, lekko uniesione w stronę nieba, jakby bawiły się z niewidzialnym obiektem. Jego okrągłe, wyraziste oczy są szerokie z ciekawości, iskrzące życiem i niewinnością. Użyj realistycznego stylu, aby oddać naturalne środowisko wydrzyka i jego uroczo puszystą powierzchnię.",
      "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"
    }
  ]
}
```

Zwrócony wynik jest zgodny z podstawowym użyciem, można zauważyć, że link do obrazu w formacie parametru `url` generuje link do obrazu [URL obrazu](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), który można bezpośrednio odwiedzić, a zawartość obrazu przedstawia się jak na poniższym obrazku:

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

Wykonując tę samą operację, wystarczy ustawić parametr formatu linku do obrazu na `b64_json`, aby uzyskać wynik z linkiem do obrazu zakodowanym w Base64, szczegółowy wynik przedstawia się jak na poniższym obrazku:

```json theme={null}
{
  "created": 1721638071,
  "data": [
    {
      "b64_json": "iVBORw0..............v//AQEAAP4AAAD+AAADAQAAAwEEA/4D//8Q/Pbw64mKbVTFoQAAAABJRU5ErkJggg==",
      "revised_prompt": "Uroczy obraz młodego małego wydrzyka morskiego. Wydrzyk delikatnie unosi się na spokojnym niebieskim morzu, wygrzewając się w ciepłych, złotych promieniach słońca spływających z czystego nieba powyżej. Futro wydrzyka ma bogaty czekoladowy brąz, a wygląda niezwykle miękko i puszyście. Oczy wydrzyka są jasne i wyraziste, pełne dziecięcej ciekawości i radości. Małe, sterczące uszy i nos w kształcie guzika dodają mu ogólnej słodkości. W morzu wokół niego widać migoczące krople wody, ożywione przez światło słoneczne, widok jest z pewnością zachwycający."
    }
  ]
}
```

## Asynchroniczny callback

Ponieważ czas generowania obrazów przez OpenAI Images Generations API może być stosunkowo długi, jeśli API nie odpowiada przez dłuższy czas, żądanie HTTP będzie utrzymywać połączenie, co prowadzi do dodatkowego zużycia zasobów systemowych, dlatego to API oferuje również wsparcie dla asynchronicznych callbacków.

Cały proces wygląda następująco: klient inicjuje żądanie, dodatkowo określając pole `callback_url`, po wysłaniu żądania API natychmiast zwraca wynik, zawierający pole `task_id`, które reprezentuje aktualny identyfikator zadania. Po zakończeniu zadania, wynik generowania obrazu zostanie wysłany do określonego przez klienta `callback_url` w formie POST JSON, który również zawiera pole `task_id`, dzięki czemu wyniki zadania można powiązać za pomocą identyfikatora.

Poniżej przedstawiamy przykład, aby zrozumieć, jak dokładnie to działa.

Najpierw, Webhook callback to usługa, która może odbierać żądania HTTP, deweloperzy powinni zastąpić to URL swojego własnego serwera HTTP. W tym celu, dla wygody demonstracji, użyjemy publicznej strony przykładowej Webhook [https://webhook.site/](https://webhook.site/), otwierając tę stronę, można uzyskać URL Webhook, jak pokazano na obrazku:

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

Skopiuj ten URL, aby użyć go jako Webhook, przykładowy URL to `https://webhook.site/3d32690d-6780-4187-a65c-870061e8c8ab`.

Następnie możemy ustawić pole `callback_url` na powyższy URL Webhook, a także wypełnić odpowiednie parametry, jak pokazano w poniższym kodzie:

```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": "Uroczy mały wydrzyk morski",
    "callback_url": "https://webhook.site/3d32690d-6780-4187-a65c-870061e8c8ab"
}

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

Po kliknięciu uruchomienia, można zauważyć, że natychmiast otrzymujemy wynik, jak poniżej:

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

Po chwili możemy zaobserwować wyniki generowania obrazu na URL Webhook, treść jest następująca:

```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": "Zachwycający obraz przedstawiający młodego wydrzyka morskiego...",
        "url": "https://dalleprodsec.blob.core.windows.net/private/images/..."
      }
    ]
  }
}
```

Można zauważyć, że wynik zawiera pole `task_id`, a pole `data` zawiera wyniki generowania obrazu takie same jak w przypadku wywołania synchronicznego, dzięki polu `task_id` można powiązać zadanie.

## Obsługa błędów

Podczas wywoływania API, jeśli wystąpią błędy, API zwróci odpowiedni kod błędu i informacje. Na przykład:

* `400 token_mismatched`：Zły wniosek, prawdopodobnie z powodu brakujących lub nieprawidłowych parametrów.
* `400 api_not_implemented`：Zły wniosek, prawdopodobnie z powodu brakujących lub nieprawidłowych parametrów.
* `401 invalid_token`：Nieautoryzowany, nieprawidłowy lub brakujący token autoryzacyjny.
* `429 too_many_requests`：Zbyt wiele żądań, przekroczyłeś limit szybkości.
* `500 api_error`：Błąd wewnętrzny serwera, coś poszło nie tak na serwerze.

### Przykład odpowiedzi błędu

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

## Wnioski

Dzięki temu dokumentowi zrozumiałeś, jak łatwo korzystać z funkcji generowania obrazów OpenAI DALL-E za pomocą OpenAI Images Generations API. Mamy nadzieję, że ten dokument pomoże Ci lepiej zintegrować i korzystać z tego API. W razie jakichkolwiek pytań, skontaktuj się z naszym zespołem wsparcia technicznego.
