> ## 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 は現在、クラシックな `dall-e-3`、テキストレンダリング能力がより強力な `gpt-image-1`、最新世代の **`gpt-image-2`**、および同一インターフェースで接続される **`nano-banana` / `nano-banana-2-lite` / `nano-banana-2` / `nano-banana-pro`** シリーズモデルを含む多様な画像生成モデルをサポートしています。これらはすべて、テキストの説明に基づいて高品質な画像を生成することができます。

この文書は、OpenAI Images Generations API 操作の使用プロセスを主に紹介しており、これを利用することで OpenAI シリーズの画像生成機能を簡単に使用できます。

## 申請プロセス

OpenAI Images Generations API を使用するには、まず [Ace Data Cloud コンソール](https://platform.acedata.cloud/console/applications) にアクセスして API トークンを取得し、保管しておきます。

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

まだログインまたは登録していない場合は、自動的にログインページにリダイレクトされ、登録とログインを促されます。完了後、現在のページに自動的に戻ります。

**1つの API トークンでプラットフォームのすべてのサービスを呼び出すことができ、各サービスごとに個別に申請する必要はありません。** 初回申請時には無料のクレジットが付与され、無料で体験できます。クレジットが不足した場合は、[コンソール](https://platform.acedata.cloud/console/coin) で一般的な残高をチャージできます。

> 📘 完全な文書：[OpenAI Images Generations API →](https://platform.acedata.cloud/documents/openai-images-generations)

## GPT-Image-2 モデル

`gpt-image-2` は OpenAI が提供する新世代の画像生成モデルで、`dall-e-3` や `gpt-image-1` に比べて以下の点で明らかな向上があります：

* **指示遵守能力が向上**：複雑な構図、カウント、位置関係などの構造化された指示を正確に理解できます。
* **テキストレンダリングがより明確**：ポスター、メニュー、インフォグラフィック、ロゴなどのシーンで英語と数字がほとんど乱れることがありません。
* **スタイル表現が豊富**：映画的なポートレート、レトロポスター、子供向けイラスト、製品写真、インフォグラフィックなど、さまざまなスタイルをネイティブにサポートしています。
* **ネイティブな多比率 + 高解像度サポート**：5つの比率（1:1、4:3、3:4、16:9、9:16）をカバーし、3つの解像度（1K / 2K / 4K）を提供します。

呼び出し方法は他のモデルと完全に一致しており、`model` フィールドを `gpt-image-2` に設定するだけで済みます。返される結果の `url` は、`platform.cdn.acedata.cloud` に永続的にホスティングされている画像リンクであり、ブラウザで直接開くか、ウェブページに埋め込むことができます。

### 回線バリアント（`:official` / `:reverse`）

`gpt-image-2` はデフォルトで標準回線を使用します。モデル名のサフィックスを通じて回線を明示的に選択できます：

* **`gpt-image-2:official`**：公式チャネルで、安定しており、コンプライアンスがあります。実際の 2K / 4K 解像度をサポートし、**画像ごとに課金され、単価はデフォルトの `gpt-image-2` の 2 倍です**。回線が利用できない場合は直接エラーを返し、自動的にダウングレードされません。
* **`gpt-image-2:reverse`**：デフォルトの `gpt-image-2` と完全に同等で、コストパフォーマンスが高く、価格は変わりません。

### サポートされている `size` の値

`gpt-image-2` は `size` のフォーマットのみをチェックし、`auto` または空の文字列でない限り、`WIDTHxHEIGHT`（例：`1024x1024`、`2048x1152`、`800x600`）に一致する必要があります。他の形式は 400 を返します。**すべてのサイズ（1K / 2K / 4K / カスタム）は、単一の画像として統一的に課金され、サイズによる追加料金はありません。**

サイズ制限：カスタムサイズは幅と高さが両方とも 16 の倍数であり、長辺 ≤ 3840、総ピクセル数 ≤ 8,294,400 を満たす必要があります。範囲を超えると 4xx で返されます。

| 比率   | 1K 推奨       | 2K 推奨       | 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` |

> `size: "auto"` を渡すこともできますし、**`size` フィールドを省略することもできます**。この場合、モデルがデフォルトのサイズを自動的に選択します。
> 1K の出力は厳密なピクセル整列を保証しません——`1024x1024` を渡すと `1254x1254` を受け取る可能性があり、比率は一致します。再度それを `size` として渡すと、課金は変わりません。
> 4K の単一呼び出しは通常 4–8 分かかるため、後述の `callback_url` 非同期コールバックと併用することをお勧めします。

> **`n` パラメータについて**
> `gpt-image-2` は `n > 1`（値は 1–10）をサポートしています：1回のリクエストで対応する数の画像を返し、画像ごとに課金されます。複数の結果に差異を持たせるために、異なる `prompt` または `seed` を同時に渡すことをお勧めします。これは `gpt-image-1` / `gpt-image-1.5`、および `nano-banana` / `nano-banana-2-lite` / `nano-banana-2` / `nano-banana-pro` シリーズにも適用されます；`dall-e-3` は `n = 1` のみをサポートします。`response_format=b64_json` は `n=1` のみをサポートし、`n>1` の場合はデフォルトの URL 返却を使用してください。生成に失敗した画像があった場合、成功した部分のみが返され、課金されます。

以下に、`gpt-image-2` の能力を直感的に感じるためのいくつかの異なる方向からの実際の例を示します。

### シーン1：映画的なポートレート

プロンプトには映画用語（35mm フィルム、浅い被写界深度、ネオン光など）を使用して、雰囲気と質感を正確に制御できます。

Python サンプル呼び出しコード：

```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)
```

返される結果は以下の通りです：

```json theme={null}
{
  "success": true,
  "task_id": "ab58a5df-6f46-4874-bff6-93169e2849a3",
  "created": 1777048800,
  "data": [
    {
      "revised_prompt": "夜のコンビニエンスストアに立つ若い女性のシネマティックポートレート。窓越しに柔らかいピンクとシアンのネオン看板に照らされている。35mmフィルムで撮影、浅い被写界深度、わずかな粒子、メランコリックな雰囲気。",
      "url": "https://platform.cdn.acedata.cloud/gpt-image/ab58a5df-6f46-4874-bff6-93169e2849a3_0.png"
    }
  ]
}
```

生成された画像は以下の通りです：

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

### シーン2：レトロ旅行ポスター（テキストレンダリング付き）

`gpt-image-2` はタイポグラフィとフォントレンダリングにおいて安定したパフォーマンスを発揮し、ポスター、メニュー、グリーティングカードなどのテキストを含むデザインに非常に適しています。

```python theme={null}
payload = {
    "model": "gpt-image-2",
    "prompt": "イタリアのアマルフィ海岸のヴィンテージ旅行ポスター。崖の上にあるレモンイエローの家々がターコイズの海に向かって cascading しているアールデコスタイルのイラスト。上部には太字のタイポグラフィで AMALFI と書かれ、下部には ITALIA 1958 と書かれている。限られたカラーパレット：クリーム、海の青、レモンイエロー、テラコッタ。わずかな紙の粒子テクスチャ。",
    "size": "1024x1536"
}
```

返された結果の `url` フィールドに対応する画像は以下の通りです：

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

モデルはアールデコポスターの視覚スタイルを正確に再現し、タイトル文字 `AMALFI` と `ITALIA 1958` が明確かつ正確にレンダリングされていることがわかります。

### シーン3：複雑な構図とカウント

以下のプロンプトは、モデルが「数量」と「位置」などの構造化指示に従う能力をテストするためのものです。

```python theme={null}
payload = {
    "model": "gpt-image-2",
    "prompt": "三段の木製本棚：上段には1冊の本、2段目には3冊の本、下段には7冊の本があるべきです。柔らかい暖かい照明、フォトリアリスティック、居心地の良い図書館の雰囲気。",
    "size": "1024x1024"
}
```

生成された画像は以下の通りです：

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

三段の本棚にある本の数（1 / 3 / 7）がプロンプトと完全に一致していることがわかります。これは `dall-e-3` 時代には安定して実現するのが難しかったです。

### シーン4：イラストスタイル（横向き）

アートメディアと感情のキーワードを指定することで、モデルにスタイライズされたイラストを生成させることができます。

```python theme={null}
payload = {
    "model": "gpt-image-2",
    "prompt": "月明かりの森の中で、光るキノコの下で本を読んでいる小さな狐の柔らかく詩的な子供向け絵本のイラスト。水彩と鉛筆のテクスチャ、優しいパステルカラー、夢のような雰囲気、手描きの感触。",
    "size": "1536x1024"
}
```

生成された横向きのイラストは以下の通りです：

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

### 非同期とコールバック

`gpt-image-2` の単一呼び出しには通常60〜90秒かかります。長い接続を維持したくない場合は、本文後半で紹介する `callback_url` 非同期コールバックメカニズムを使用できます。呼び出しの流れは他のモデルと完全に一致します。

## Nano Banana シリーズモデル

`nano-banana` シリーズは Gemini に基づく画像生成モデルで、同じ `/openai/images/generations` インターフェースを通じて接続されており、エンドポイントを切り替える必要はありません。`model` を以下の表のいずれかに変更するだけで使用できます。

| モデル                  | 料金（クレジット / 回） | 適用シーン                             |
| -------------------- | ------------- | --------------------------------- |
| `nano-banana`        | 0.14          | 一般的な画像生成、最速、最低コスト                 |
| `nano-banana-2-lite` | 0.14          | Gemini 3.1 軽量画像モデル、1Kのみサポート、低遅延出力 |
| `nano-banana-2`      | 0.28          | 品質と詳細が明らかに向上                      |
| `nano-banana-pro`    | 0.35          | シリーズのフラッグシップ、構図、詳細、テキストが最良        |

> **重要：パラメータのサポート範囲**
> Nano Banana は適応層を通じて OpenAI プロトコルに接続されており、`gpt-image-*` と比較して以下のパラメータのみをサポートします：`model`、`prompt`、`size`、`n`。
>
> * `size` は以下の表に従って内部 `aspect_ratio` にマッピングされ、リストにないサイズは `1:1` に退化します：
>   * `1024x1024` / `512x512` / `256x256` → `1:1`
>   * `1792x1024` → `16:9`
>   * `1024x1792` → `9:16`
> * `quality`、`style`、`response_format`、`background`、`output_format` などのパラメータはサポートされていません；指定しても無視されます。`n > 1` はサポートされ（1–10）、対応する数の画像が返され、枚数に応じて課金されます。
> * 返される構造は OpenAI フォーマット（`data[].url`）に従いますが、`created` は固定で `0` となり、`b64_json` は返されず、`revised_prompt` は常に元の `prompt` と等しくなります。

### 基本呼び出し

```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": "白いテーブルの上にある小さな赤いリンゴ、フォトリアル",
    "size": "1024x1024"
}

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

返された結果は以下の通りです：

```json theme={null}
{
  "created": 0,
  "data": [
    {
      "url": "https://platform.cdn.acedata.cloud/nanobanana/6870b330-65c4-436c-bb80-819fdae7a7a4.png",
      "revised_prompt": "白いテーブルの上にある小さな赤いリンゴ、フォトリアル"
    }
  ]
}
```

生成された画像は返された `url` フィールドを通じて直接アクセスできます：

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

### フラッグシップモデル `nano-banana-pro` へのアップグレード

`model` を `nano-banana-pro` に変更するだけで、他のパラメータは完全に一致します：

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

返却例：

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

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

### 非同期コールバック

`callback_url` 非同期コールバックメカニズムは nano-banana にも有効で、呼び出しフローは他のモデルと完全に一致します。詳細は以下の [非同期コールバック](#非同期コールバック) セクションを参照してください。

## 基本的な使用法

次に、画面上に対応する内容を入力できます。以下の図のように：

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

このインターフェースを初めて使用する際には、少なくとも3つの内容を入力する必要があります。一つは `authorization` で、ドロップダウンリストから直接選択できます。もう一つのパラメータは `model` で、 `model` は OpenAI DALL-E の公式モデルカテゴリを選択することを意味します。ここでは主に1種類のモデルがあります。詳細は提供されたモデルを参照してください。最後のパラメータは `prompt` で、 `prompt` は生成したい画像のヒントワードを入力します。

また、右側には対応する呼び出しコードが生成されていることに注意してください。コードをコピーして直接実行することも、直接「Try」ボタンをクリックしてテストすることもできます。

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

Python サンプル呼び出しコード：

```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": "かわいい赤ちゃんアザラシ"
}

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

呼び出し後、返却結果は以下のようになります：

```json theme={null}
{
  "created": 1721626477,
  "data": [
    {
      "revised_prompt": "若いアザラシを紹介する楽しい画像で、茶色で生まれた広い魅力的な目を持っています。穏やかな海の水の中で背中を向けて楽しそうに横たわっています。その密でベルベットのような毛は濡れて輝いており、その生息地の本質を捉えています。小さな生き物は小さな前足で貝殻で好奇心を持って遊んでおり、自然な環境の中で絶対に無邪気で魅力的に見えます。",
      "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"
    }
  ]
}
```

返却結果には複数のフィールドがあり、以下のように説明します：

* `created`、今回の画像生成の ID で、今回のタスクを一意に識別するために使用されます。
* `data`、画像生成の結果情報を含みます。

その中で `data` はモデルが生成した画像の具体的な情報を含んでおり、その中の `url` は生成された画像の詳細リンクです。以下の図のように確認できます。

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

## 画像品質パラメータ `quality`

次に、画像生成結果の詳細なパラメータの設定方法を紹介します。その中で画像品質パラメータ `quality` には2種類があります。最初の `standard` は標準の画像を生成することを示し、もう一つの `hd` は生成された画像がより細かいディテールと大きな一貫性を持つことを示します。

以下のように画像品質パラメータを `standard` に設定します：

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

また、右側には対応する呼び出しコードが生成されていることに注意してください。コードをコピーして直接実行することも、直接「Try」ボタンをクリックしてテストすることもできます。

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

Python サンプル呼び出しコード：

```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": "かわいい赤ちゃんアザラシ",
    "quality": "standard"
}

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

呼び出し後、返却結果は以下のようになります：

```json theme={null}
{
  "created": 1721636023,
  "data": [
    {
      "revised_prompt": "かわいい赤ちゃんアザラシが水の中で楽しそうに背中を向けて横たわっており、その毛は光沢があり柔らかく見えます。小さな前足の一つが好奇心を持って伸びており、空を見上げる顔には純粋な喜びと温かさの表情があります。体は水の中での遊び回りからの泡に囲まれています。優しい風が毛を揺らし、より魅力的に見せています。このシーンは海洋生物の静けさと魅力を描写しています。",
      "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"
    }
  ]
}
```

返却された結果は基本的な使用内容と一致しており、画像品質パラメータが `standard` の生成画像は以下の図のようになります：

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

上記と同様の操作で、画像品質パラメータを `hd` に設定するだけで、以下の図のような画像を得ることができます：

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

`hd` は `standard` よりも生成された画像がより細かいディテールと大きな一貫性を持つことがわかります。

## 画像サイズパラメータ `size`

生成される画像のサイズを設定することもできます。以下の設定を行うことができます。
以下の設定で画像のサイズを `1024 * 1024` に設定します。具体的な設定は以下の図の通りです：

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

また、右側には対応する呼び出しコードが生成されていることに注意してください。コードをコピーして直接実行することも、直接「Try」ボタンをクリックしてテストすることもできます。

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

Pythonのサンプル呼び出しコード：

```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)
```

呼び出し後、返された結果は以下の通りです：

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

返された結果は基本的な使用内容と一致しており、画像のサイズが `1024 * 1024` の生成画像は以下の図の通りです：

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

上記と同様の操作で、画像のサイズを `1792 * 1024` に設定すると、以下の図のような画像が得られます：

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

画像のサイズが明らかに異なることがわかります。また、他のサイズも設定可能で、詳細情報は当社の公式ドキュメントを参照してください。

## 画像スタイルパラメータ `style`

画像スタイルパラメータ `style` には2つのパラメータが含まれています。1つ目の `vivid` は生成される画像がより生き生きとしたものであることを示し、2つ目の `natural` は生成される画像がより自然であることを示します。

以下の設定で画像スタイルパラメータを `vivid` に設定します。具体的な設定は以下の図の通りです：

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

また、右側には対応する呼び出しコードが生成されていることに注意してください。コードをコピーして直接実行することも、直接「Try」ボタンをクリックしてテストすることもできます。

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

Pythonのサンプル呼び出しコード：

```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)
```

呼び出し後、返された結果は以下の通りです：

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

返された結果は基本的な使用内容と一致しており、画像スタイルパラメータが `vivid` の生成画像は以下の図の通りです：

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

上記と同様の操作で、画像スタイルパラメータを `natural` に設定すると、以下の図のような画像が得られます：

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

`vivid` が `natural` よりも生き生きとしたリアルな画像を生成していることがわかります。

## 画像リンクのフォーマットパラメータ `response_format`

最後の画像リンクのフォーマットパラメータ `response_format` には2種類あります。1つ目の `b64_json` は画像リンクをBase64エンコードし、2つ目の `url` は通常の画像リンクで、直接画像を確認できます。

以下の設定で画像リンクのフォーマットパラメータを `url` に設定します。具体的な設定は以下の図の通りです：

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

また、右側には対応する呼び出しコードが生成されていることに注意してください。コードをコピーして直接実行することも、直接「Try」ボタンをクリックしてテストすることもできます。

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

Pythonのサンプル呼び出しコード：

```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)
```

呼び出し後、返された結果は以下の通りです：

```json theme={null}
{
  "created": 1721637575,
  "data": [
    {
      "revised_prompt": "魅力的な赤ちゃんアシカの描写。アシカは穏やかな青い海の波の中で、背中を向けて静かに休んでいる。赤ちゃんアシカの毛は、柔らかい灰色がかった茶色の色合いが愛らしく混ざり合い、 mutedな日光の中で微かに輝いている。小さな前足は空に向かって少し持ち上げられ、見えない物体で遊んでいるかのようだ。丸く表情豊かな目は好奇心で大きく開かれ、生命と無邪気さに満ちている。リアルなスタイルを使用して、アシカの自然な生息地とその愛らしくふわふわした外観を引き出す。",
      "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"
    }
  ]
}
```

返された結果は基本使用の内容と一致し、画像リンクの形式パラメータが `url` の生成画像のリンクは [画像 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) これは直接アクセス可能で、画像内容は以下の図の通りです：

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

上記と同様の操作を行い、画像リンクの形式パラメータを `b64_json` に設定すると、Base64エンコードされた画像リンクの結果が得られます。具体的な結果は以下の図の通りです：

```json theme={null}
{
  "created": 1721638071,
  "data": [
    {
      "b64_json": "iVBORw0..............v//AQEAAP4AAAD+AAADAQAAAwEEA/4D//8Q/Pbw64mKbVTFoQAAAABJRU5ErkJggg==",
      "revised_prompt": "若い赤ちゃんアシカの魅力的な画像。アシカは穏やかな青い海に優しく浮かび、澄んだ空から降り注ぐ温かい金色の光線を浴びている。アシカの毛はリッチなチョコレートブラウンで、非常に柔らかくふわふわしている。アシカの目は明るく表情豊かで、子供のような好奇心と喜びに満ちている。小さな立ち耳とボタンのような鼻が全体の可愛さを引き立てている。周囲の海には、日光に照らされたきらめく水滴が見え、その光景は確かに楽しいものである。"
    }
  ]
}
```

## 非同期コールバック

OpenAI Images Generations APIが画像を生成するのに時間がかかる可能性があるため、APIが長時間応答しない場合、HTTPリクエストは接続を維持し、追加のシステムリソースを消費することになります。そのため、このAPIは非同期コールバックのサポートも提供しています。

全体の流れは次の通りです：クライアントがリクエストを開始する際に、追加で `callback_url` フィールドを指定します。クライアントがAPIリクエストを開始すると、APIはすぐに結果を返し、現在のタスクIDを示す `task_id` フィールド情報を含みます。タスクが完了すると、生成された画像の結果がPOST JSON形式でクライアントが指定した `callback_url` に送信され、その中にも `task_id` フィールドが含まれます。これにより、タスクの結果をIDで関連付けることができます。

以下の例を通じて、具体的にどのように操作するかを理解しましょう。

まず、WebhookコールバックはHTTPリクエストを受信できるサービスであり、開発者は自分が構築したHTTPサーバーのURLに置き換える必要があります。ここでは、デモのために公開のWebhookサンプルサイト [https://webhook.site/](https://webhook.site/) を使用します。このサイトを開くと、Webhook URLが得られます。以下の図の通りです：

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

このURLをコピーすれば、Webhookとして使用できます。このサンプルは `https://webhook.site/3d32690d-6780-4187-a65c-870061e8c8ab` です。

次に、フィールド `callback_url` を上記のWebhook URLに設定し、以下のコードのように相応のパラメータを入力します：

```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": "かわいい赤ちゃんアシカ",
    "callback_url": "https://webhook.site/3d32690d-6780-4187-a65c-870061e8c8ab"
}

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

実行すると、すぐに結果が得られます。以下の通りです：

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

少し待つと、Webhook URLで生成された画像の結果を観察できます。内容は以下の通りです：

```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": "若いアシカを紹介する楽しい画像...",
        "url": "https://dalleprodsec.blob.core.windows.net/private/images/..."
      }
    ]
  }
}
```

結果には `task_id` フィールドが含まれており、`data` フィールドには同期呼び出しと同じ画像生成結果が含まれています。`task_id` フィールドを通じてタスクの関連付けが可能です。

## エラーハンドリング

APIを呼び出す際にエラーが発生した場合、APIは相応のエラーコードと情報を返します。例えば：

* `400 token_mismatched`：不正なリクエスト、パラメータが不足または無効である可能性があります。
* `400 api_not_implemented`：不正なリクエスト、パラメータが不足または無効である可能性があります。
* `401 invalid_token`：未認証、無効または不足している認証トークン。
* `429 too_many_requests`：リクエストが多すぎます、レート制限を超えています。
* `500 api_error`：内部サーバーエラー、サーバーで何かがうまくいかなかった。

### エラー応答の例

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

## 結論

```
この記事を通じて、OpenAI Images Generations APIを使用して公式のOpenAI DALL-Eの画像生成機能を簡単に利用する方法を理解できたことと思います。この文書が、APIの接続と使用をより良くする手助けとなることを願っています。ご不明な点がございましたら、いつでも当社の技術サポートチームにお問い合わせください。
```
