For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
メインナビゲーション
Theme

画像生成

画像を生成・編集する方法を学びます。

概要

API では、gpt-image-2.5-sunburst と gpt-image-2.5-flare を使って、テキストプロンプトから画像を生成・編集できます。編集の精度を最優先する場合は Sunburst を、日常的な用途で高品質の画像をすばやく生成したい場合は Flare を選びます。画像生成機能は次の 2 つの API から利用できます。

Image API

Image API には、用途の異なる 2 つのエンドポイントがあります。

Responses API

Responses API では、会話や複数ステップの処理の中で画像を生成できます。画像生成を組み込みツールとして利用でき、入力画像と出力画像をコンテキストに含められます。

Image API の機能に加え、次のことができます。

  • 複数ターンでの編集:プロンプトで指示を重ねながら、元の画像の細部を保って編集
  • 柔軟な入力:バイトデータに加え、画像の File ID を使って入力画像を指定

画像生成ツールを呼び出せるメインモデルについては、対応モデルを参照してください。

API の選び方

  • 1 つのプロンプトで 1 枚の画像を生成または編集するだけなら、Image API が適しています。
  • GPT Image を使って、ユーザーが対話しながら画像を生成・編集できる機能を構築する場合は、Responses API を選びます。

Image API では、model に gpt-image-2.5-sunburst または gpt-image-2.5-flare を直接指定します。Responses API では、トップレベルで対応するメインモデルを選び、gpt-image-2.5-sunburst または gpt-image-2.5-flare を画像生成ツールの model フィールドに指定します。

どちらの API でも、品質、サイズ、形式、圧縮率を調整して出力をカスタマイズできます。

モデルの責任ある利用を確保するため、GPT Image モデルを利用する前に、API 組織認証を開発者コンソールで完了する必要がある場合があります。

GPT Image 2.6

GPT Image 2.6 には、細部まで作り込む作業に適した Sunburst と、短時間で試行を重ねたい場合に適した Flare があります。どちらのモデルも、Image API で複雑度の調整、マークアップによる編集指示、SVG 出力、アニメーション GIF 出力に対応しています。以下の従来のサンプルでは GPT Image 2.5 を使用しています。

画像の複雑度の設定

リクエストの complexity フィールドで、画像モデルが描画前の計画にどの程度時間をかけるかを調整できます。背景や看板だけを変えるような限定的な編集には、低い複雑度が適している場合があります。文字量が多い画像や複雑なレイアウト、複数の物体の位置関係を表現したい場合は、複雑度を上げると効果的です。ただし、レイテンシが増えたり、意図しない箇所まで変わったりすることがあるため、実際の用途に合わせて結果を比較してください。

Sunburst と Flare が対応する複雑度は low、medium、high です。complexity を省略すると、どちらも high を使用します。描画品質は、これとは別に quality で設定します。

複雑度の調整に追加料金はかかりません。

以下は、同じプロンプトを使い、品質を中に固定して Sunburst が生成した切り絵風のサッカーの場面です。複雑度によって、トロフィーやユニフォームの描写、「CHAMPIONS」と書かれた看板の位置がどう変わるかを比較してください。

複雑度:低

複雑度:中

複雑度:高

安全性識別子

個々のエンドユーザーにサービスを提供するアプリケーションでは、ユーザーごとに一貫した値を使い、プライバシーを保護できる safety_identifier を各画像生成リクエストまたは画像編集リクエストに含めてください。個人を特定できる情報をそのまま送信せず、ユーザー名またはメールアドレスをハッシュ化し、識別子は 128 文字以内にしてください。安全性識別子の使用は推奨されますが、必須ではありません。

Images API の user パラメータは非推奨です。代わりに、同じ識別子を safety_identifier として送信してください。user を使う既存のリクエストには引き続き対応しています。空でない safety_identifier は user より優先されます。safety_identifier が省略されている場合、null の場合、または空文字列の場合、API は user が指定されていればその値を使用します。

木製のテーブルに置かれたベージュのコーヒーマグ

画像の生成

画像生成エンドポイントを使うと、テキストプロンプトをもとに画像を作成できます。Responses API の画像生成ツールを使うと、会話の中で画像を生成できます。

出力のサイズ、品質、形式、圧縮率の設定方法については、後述の画像出力のカスタマイズを参照してください。

n パラメータを設定すると、1 回のリクエストで複数の画像をまとめて生成できます。デフォルトでは、API は画像を 1 枚返します。

画像の生成
from openai import OpenAI
import base64

client = OpenAI()

prompt = """
A children's book drawing of a veterinarian using a stethoscope to
listen to the heartbeat of a baby otter.
"""

result = client.images.generate(model="gpt-image-2.5-sunburst", prompt=prompt)

image_base64 = result.data[0].b64_json
image_bytes = base64.b64decode(image_base64)

# Save the image to a file
with open("otter.png", "wb") as f:
    f.write(image_bytes)

複数ターンでの画像生成

Responses API では、画像生成ツールの呼び出し結果をコンテキストに含めるか(画像 ID だけでもかまいません)、previous_response_id パラメータを使うことで、複数ターンにわたる会話の中で画像を生成できます。 会話を続けながらプロンプトを調整したり、新しい指示を加えたりして、画像を段階的に仕上げられます。

Responses API の画像生成ツールでは、対応するツールモデルが、画像を新しく生成するか、会話内の既存の画像を編集するかを判断できます。この動作は任意の action パラメータで指定できます。action: "auto" のままにするとモデルが判断します。常に新しい画像を生成するには action: "generate" を、コンテキストに画像がある場合に必ず編集するには action: "edit" を指定します。

action で画像を必ず新規生成する例
from openai import OpenAI
import base64

client = OpenAI()

response = client.responses.create(
    model="gpt-6-astra",
    input="Generate an image of gray tabby cat hugging an otter with an orange scarf",
    tools=[
        {"type": "image_generation", "model": "gpt-image-2.5-sunburst", "action": "generate"}
    ],
)

# Save the image to a file
image_data = [
    output.result
    for output in response.output
    if output.type == "image_generation_call"
]

if image_data:
    image_base64 = image_data[0]
    with open("otter.png", "wb") as f:
        f.write(base64.b64decode(image_base64))

コンテキストに画像がない状態で edit を指定すると、呼び出しはエラーを返します。生成と編集の判断をモデルに任せるには、action を auto のままにします。

複数ターンでの画像生成
from openai import OpenAI
import base64

client = OpenAI()

response = client.responses.create(
    model="gpt-6-astra",
    input="Generate an image of gray tabby cat hugging an otter with an orange scarf",
    tools=[{"type": "image_generation", "model": "gpt-image-2.5-sunburst"}],
)

image_data = [
    output.result
    for output in response.output
    if output.type == "image_generation_call"
]

if image_data:
    image_base64 = image_data[0]

    with open("cat_and_otter.png", "wb") as f:
        f.write(base64.b64decode(image_base64))


# Follow up

response_fwup = client.responses.create(
    model="gpt-6-astra",
    previous_response_id=response.id,
    input="Now make it look realistic",
    tools=[{"type": "image_generation", "model": "gpt-image-2.5-sunburst"}],
)

image_data_fwup = [
    output.result
    for output in response_fwup.output
    if output.type == "image_generation_call"
]

if image_data_fwup:
    image_base64 = image_data_fwup[0]
    with open("cat_and_otter_realistic.png", "wb") as f:
        f.write(base64.b64decode(image_base64))

結果

「オレンジ色のマフラーを巻いたカワウソを、灰色のトラ猫が抱きしめている画像を生成してください」

猫とカワウソ

「今度は写実的にしてください」

猫とカワウソ

ストリーミング

Responses API と Image API は、画像生成のストリーミングに対応しています。生成途中の画像を順次配信できるため、ユーザーは生成の進み具合を見ながら操作できます。

partial_images パラメータで、受け取る途中画像の枚数を 0〜3 枚に設定できます。

  • partial_images を 0 に設定すると、最終画像だけを受け取ります。
  • 0 より大きい値を指定しても、最終画像が先に完成すると、受け取る途中画像が指定した枚数より少なくなることがあります。
画像のストリーミング
from openai import OpenAI
import base64

client = OpenAI()


def save_base64_image(filename, image_base64):
    image_bytes = base64.b64decode(image_base64)
    with open(filename, "wb") as f:
        f.write(image_bytes)


stream = client.responses.create(
    model="gpt-6-astra",
    input="Draw a gorgeous image of a river made of white owl feathers, snaking its way through a serene winter landscape",
    stream=True,
    tools=[
        {"type": "image_generation", "model": "gpt-image-2.5-sunburst", "partial_images": 2}
    ],
)

for event in stream:
    if event.type == "response.image_generation_call.partial_image":
        idx = event.partial_image_index
        save_base64_image(f"river-partial-{idx}.png", event.partial_image_b64)
    elif event.type == "response.completed":
        image_data = [
            output.result
            for output in event.response.output
            if output.type == "image_generation_call"
        ]

        if image_data:
            save_base64_image("river-final.png", image_data[0])

結果

途中画像 1 途中画像 2 最終画像
1 枚目の途中画像 2 枚目の途中画像 最終画像

プロンプト:フクロウの白い羽でできた川が、静かな冬景色の中を蛇行して流れる美しい絵を描いてください。

修正後のプロンプト

Responses API で画像生成ツールを使うと、メインモデル(例:gpt-5.5)が、より良い生成結果を得られるようにプロンプトを自動で修正します。

修正後のプロンプトは、画像生成ツールの呼び出し結果の revised_prompt フィールドで確認できます。

修正後のプロンプトを含むレスポンス
{
  "id": "ig_123",
  "type": "image_generation_call",
  "status": "completed",
  "revised_prompt": "A gray tabby cat hugging an otter. The otter is wearing an orange scarf. Both animals are cute and friendly, depicted in a warm, heartwarming style.",
  "result": "..."
}

画像の編集

画像編集エンドポイントでは、次のことができます。

  • 既存の画像の編集
  • 他の画像を参考にした新しい画像の生成
  • 画像と、置き換える範囲を示すマスクをアップロードして行う部分編集

参照画像を使った新しい画像の生成

1 枚以上の画像を参照して、新しい画像を生成できます。

この例では、4 枚の画像を入力し、それぞれに写っている品物を詰め合わせたギフトバスケットの画像を生成します。

ボディローション石けんお香のセットバスボム
バス用品のギフトセット

Responses API では、次の 3 通りの方法で入力画像を指定できます。

  • 画像の完全修飾 URL を指定する
  • Base64 でエンコードした画像をデータ URL として渡す
  • Files API で作成したファイルの ID を指定する

ファイルの作成

ファイルの作成
from openai import OpenAI

client = OpenAI()


def create_file(file_path):
    with open(file_path, "rb") as file_content:
        result = client.files.create(
            file=file_content,
            purpose="vision",
        )
        return result.id

Base64 でエンコードした画像の作成

Base64 でエンコードした画像の作成
import base64


def encode_image(file_path):
    with open(file_path, "rb") as f:
        base64_image = base64.b64encode(f.read()).decode("utf-8")
    return base64_image
画像の編集
from openai import OpenAI
import base64

client = OpenAI()


def encode_image(file_path):
    with open(file_path, "rb") as image_file:
        return base64.b64encode(image_file.read()).decode("utf-8")


def create_file(file_path):
    with open(file_path, "rb") as file_content:
        result = client.files.create(file=file_content, purpose="vision")
    return result.id


prompt = """Generate a photorealistic image of a gift basket on a white background
labeled 'Relax & Unwind' with a ribbon and handwriting-like font,
containing all the items in the reference pictures."""

base64_image1 = encode_image("body-lotion.png")
base64_image2 = encode_image("soap.png")
file_id1 = create_file("bath-bomb.png")
file_id2 = create_file("incense-kit.png")

response = client.responses.create(
    model="gpt-6-astra",
    input=[
        {
            "role": "user",
            "content": [
                {"type": "input_text", "text": prompt},
                {
                    "type": "input_image",
                    "image_url": f"data:image/png;base64,{base64_image1}",
                },
                {
                    "type": "input_image",
                    "image_url": f"data:image/png;base64,{base64_image2}",
                },
                {
                    "type": "input_image",
                    "file_id": file_id1,
                },
                {
                    "type": "input_image",
                    "file_id": file_id2,
                },
            ],
        }
    ],
    tools=[{"type": "image_generation", "model": "gpt-image-2.5-sunburst"}],
)

image_generation_calls = [
    output for output in response.output if output.type == "image_generation_call"
]

image_data = [output.result for output in image_generation_calls]

if image_data:
    image_base64 = image_data[0]
    with open("gift-basket.png", "wb") as f:
        f.write(base64.b64decode(image_base64))
else:
    print(response.output_text)

マークアップによる編集指示

GPT Image 2.5 と 2.6 の対応モデルでマークアップを使って編集するには、Image API の POST /v1/images/edits エンドポイントを使います。Responses API で画像の一部を編集する場合は、マスクを使ってください。マークアップでは、注釈レイヤーで変更箇所を示し、prompt に変更内容を記述します。

この例を試すには、キッチンの写真と透明なオーバーレイを同じディレクトリにダウンロードしてください。オーバーレイには、色を変える花瓶を囲む円が描かれています。

Image API を使った円内の花瓶の編集
import base64
from pathlib import Path

from openai import OpenAI

client = OpenAI()
overlay = Path("markup-vase-overlay-gpt-image-2-6.png")
with open("kitchen.webp", "rb") as image, overlay.open("rb") as markup:
    result = client.images.edit(
        model="gpt-image-2.6-flare",
        image=("kitchen.webp", image, "image/webp"),
        markup=(overlay.name, markup, "image/png"),
        quality="medium",
        prompt=(
            "Recolor the striped vase inside the red circle to solid cobalt blue ceramic. "
            "Keep its shape, the dried stems, and the rest of the kitchen unchanged. "
            "Remove the red circle from the finished photo."
        ),
    )

Path("vase.png").write_bytes(base64.b64decode(result.data[0].b64_json))

オーバーレイを重ねた写真

Flare の出力

  1. 元の画像を最初の入力画像にします。
  2. 円やスケッチなどの注釈を描いた透明な PNG を別ファイルとして作成します。画像の向きを反映した後の幅と高さが、注釈レイヤーと最初の画像でそれぞれ一致する必要があります。PNG には透明なピクセルを残し、元の画像と統合しないでください。
  3. 注釈レイヤーを markup として送信します。マルチパートリクエストではファイルをアップロードできます。JSON リクエストでは、image_url または file_id のどちらか一方だけを含むオブジェクトを指定します。image_url には HTTPS URL または Base64 のデータ URL を指定できます。JSON 形式の編集リクエストでは、入力画像の配列を images に指定します。
  4. 変更したい内容と、保持したい細部を記述します。編集結果を使用する前に確認してください。

マークアップは最初の入力画像に適用され、それ以降の画像は参照画像として使われます。最初の入力画像と注釈レイヤーの画素数は、それぞれ最大 16,777,216 ピクセルです。注釈ファイルのサイズには 50 MB の上限もあります。markup は mask と併用しないでください。

マスクを使った画像の編集

マスクを指定すると、画像のどの部分を編集するかを示せます。

GPT Image でマスクを使うと、指定した範囲に沿って編集するための追加指示がモデルに送られます。

GPT Image でのマスク処理は、すべてプロンプトを通じて行われます。モデルはマスクを目安に編集するため、編集範囲がマスクの形状と完全には一致しない場合があります。

入力画像を複数指定すると、マスクは最初の画像に適用されます。

マスクを使った画像の編集
from openai import OpenAI
import base64

client = OpenAI()


def create_file(file_path):
    with open(file_path, "rb") as file_content:
        result = client.files.create(file=file_content, purpose="vision")
    return result.id


fileId = create_file("sunlit_lounge.png")
maskId = create_file("mask.png")

response = client.responses.create(
    model="gpt-6-astra",
    input=[
        {
            "role": "user",
            "content": [
                {
                    "type": "input_text",
                    "text": "generate an image of the same sunlit indoor lounge area with a pool but the pool should contain a flamingo",
                },
                {
                    "type": "input_image",
                    "file_id": fileId,
                },
            ],
        },
    ],
    tools=[
        {
            "type": "image_generation",
            "model": "gpt-image-2.5-sunburst",
            "quality": "high",
            "input_image_mask": {
                "file_id": maskId,
            },
        },
    ],
)

image_data = [
    output.result
    for output in response.output
    if output.type == "image_generation_call"
]

if image_data:
    image_base64 = image_data[0]
    with open("lounge.png", "wb") as f:
        f.write(base64.b64decode(image_base64))
画像 マスク 出力
プールのあるピンク色の部屋 プールの一部を覆うマスク 元のプールのマスクで覆った位置にフラミンゴ型の浮き輪を配置した画像

プロンプト:日光が差し込む屋内ラウンジ。プールにはフラミンゴが浮かんでいる。

マスクの要件

編集対象の画像とマスクは、ファイル形式と画像の寸法を揃え、ファイルサイズをそれぞれ 50 MB 未満にする必要があります。

マスク画像にはアルファチャンネルも必要です。画像編集ツールでマスクを作成する場合は、アルファチャンネルを含めて保存してください。

白黒画像にプログラムでアルファチャンネルを追加することもできます。

白黒のマスクへのアルファチャンネルの追加
from PIL import Image
from io import BytesIO

# 1. Load your black & white mask as a grayscale image
mask = Image.open("mask.png").convert("L")

# 2. Convert it to RGBA so it has space for an alpha channel
mask_rgba = mask.convert("RGBA")

# 3. Then use the mask itself to fill that alpha channel
mask_rgba.putalpha(mask)

# 4. Convert the mask into bytes
buf = BytesIO()
mask_rgba.save(buf, format="PNG")
mask_bytes = buf.getvalue()

# 5. Save the resulting file
img_path_mask_alpha = "mask_alpha.png"
with open(img_path_mask_alpha, "wb") as f:
    f.write(mask_bytes)

画像出力のカスタマイズ

次の出力オプションを設定できます。

  • サイズ:画像の寸法(例:1024x1024、1024x1536)
  • 品質:描画品質(例:low、medium、high)
  • 形式:出力ファイルの形式
  • 圧縮:JPEG 形式と WebP 形式の圧縮率(0〜100%)
  • 背景:透明、不透明、または自動

size、quality、background は auto に対応しています。指定すると、モデルがプロンプトに応じて最適な設定を選びます。

サイズと品質のオプション

gpt-image-2.5-sunburst と gpt-image-2.5-flare では、品質設定に xhigh と max が加わりました。どちらのモデルもデフォルトは auto です。以前の GPT Image モデルで指定できる品質は high までです。

設定 オプション
推奨サイズ 1024x1024(正方形)、1536x1024(横長)、1024x1536(縦長)
品質 low、medium、high、xhigh、max、auto

どちらのモデルでも、WIDTHxHEIGHT 形式の文字列で 1536x864 のように任意の寸法を指定できます。幅と高さはそれぞれ 16 の倍数、アスペクト比は 1:3 から 3:1 の範囲で、各辺は 3840 ピクセル以下にしてください。総画素数は 655,360 以上、8,294,400(4K)以下である必要があります。2560x1440 を超える解像度への対応は実験段階です。

どちらのモデルでも、背景を透明にするには background: "transparent" を設定し、output_format: "png" または "webp" を指定します。

下書きをすばやく生成するには quality: "low" を使います。最終版を作成する際は、より高い品質設定を比較し、細部の再現度、レイテンシ、コストのバランスが取れる設定を選んでください。

出力形式

Image API は、Base64 でエンコードした画像データを返します。 デフォルトの形式は png ですが、jpeg または webp も指定できます。

jpeg または webp を使う場合は、output_compression パラメータで圧縮率(0〜100%)も指定できます。たとえば、output_compression=50 を指定すると、画像を 50% 圧縮します。

jpeg は png よりも処理が速いため、レイテンシを重視する場合は JPEG 形式を優先してください。

SVG の生成

output_format: "svg" を POST /v1/images/generations のリクエストに指定します。アイコンやイラストなど、後からパス、図形、色を編集したい画像には SVG が適しています。

n は 1 に設定してください。SVG 出力では、ストリーミング、途中画像、output_compression は使用できません。画像編集エンドポイントは SVG 出力に対応しておらず、編集用のラスター画像として SVG を入力することもできません。

API は参照画像を作成し、それをもとに SVG を生成します。quality で設定するのは参照画像の品質です。data[0].b64_json を Base64 としてデコードし、得られた UTF-8 の XML バイト列を拡張子 .svg のファイルに保存します。返される文書には静的なベクター要素が含まれます。スクリプト、外部リソース、埋め込みのラスター画像には対応していません。

以下は、ベーカリー「Field & Flour」のロゴを作る同じプロンプトから、Flare と Sunburst がそれぞれ生成した SVG です。

GPT Image 2.6 Flare

GPT Image 2.6 Sunburst

アニメーション GIF の生成

output_format: "gif" を POST /v1/images/generations または POST /v1/images/edits のリクエストに指定します。プロンプトには、何を描くか、どのように動かすか、どのようにループさせるかを記述してください。静止画を参考にしてアニメーションを生成する場合は、その静止画を画像編集エンドポイントに送信してください。

どちらのエンドポイントでも、GIF 出力には次のリクエストフィールドを使用できます。

フィールド 値 デフォルト
frame_count 2〜16 フレーム 9
frame_duration_ms 1 フレームあたり 20〜2000 ミリ秒(10 ミリ秒単位に丸められます) 200
size auto、または WIDTHxHEIGHT 形式で指定した寸法(幅と高さはそれぞれ 16 の正の倍数) auto

size は出力される各フレームの寸法を表します。フレーム数、各フレームの寸法、生成するアニメーションの数は、モデルのサイズ制限とリクエスト全体の総画素数の上限に収まるように設定してください。上限を超える場合は、frame_count を減らすか、フレームの寸法を小さくするか、n を減らしてください。auto を指定すると、API がモデルの制限内でフレームの寸法を選びます。

レスポンスには完成したアニメーションが含まれます。各結果の b64_json の値を Base64 としてデコードし、得られたバイト列を拡張子 .gif のファイルに保存してください。GIF 出力では、ストリーミング、途中画像、output_compression の個別指定は使用できません。frame_count と frame_duration_ms は GIF 出力でのみ使用してください。

以下は、frame_count=9 と frame_duration_ms=200 を指定して Sunburst が生成したランタンのアニメーションです。サルは 1.8 秒後に最初のポーズに戻ります。

制限事項

GPT Image は多様な用途に対応する高性能な画像生成モデルですが、次の制限事項があります。

  • レイテンシ: 複雑なプロンプトは処理に最大 2 分かかる場合があります。
  • 文字の描画: 大幅に改善されていますが、文字を正確に配置したり、鮮明に描画したりすることが難しい場合があります。
  • 一貫性: 統一感のある画像を生成できますが、複数回に分けて生成すると、繰り返し登場するキャラクターやブランド要素の見た目が揃わないことがあります。
  • 構図の制御: 指示に従う能力は向上していますが、構造やレイアウトが厳密に決まっている構図では、各要素を正確な位置に配置できないことがあります。

コンテンツモデレーション

すべてのプロンプトと生成画像は、OpenAI のコンテンツポリシーに従ってフィルタリングされます。

GPT Image モデルで画像を生成する場合は、moderation パラメータでモデレーションの厳しさを調整できます。指定できる値は次の 2 つです。

  • auto(デフォルト):年齢によっては不適切となりうる特定のカテゴリのコンテンツの生成を制限するための標準フィルタリング
  • low:制限を緩めたフィルタリング

リクエストのブロックとその他のエラーへの対処

画像生成が失敗した場合は、他の API エラーと同様に、HTTP ステータスまたは SDK の例外型を確認し、リクエスト ID をログに記録してください。認証、クォータ、レート制限、サーバーに関するエラーについては、エラーコードガイドを参照してください。一時的なレート制限やサーバーエラーの場合は、バックオフを使って再試行します。クォータエラーや、リクエストの変更が必要な画像生成のユーザーエラーの場合は、自動で再試行しないでください。

画像生成のエラーには、ユーザーが入力を修正すれば解消できるものがあり、その場合は error.type = "image_generation_user_error" が返ることがあります。プロンプトや入力画像を変更せずに、これらのエラーを自動で再試行しないでください。プログラムでエラーの種類を判別するには、値が安定している error.code を使います。

error.code = "moderation_blocked" の場合、エラーには error.moderation_details オブジェクトも含まれることがあります。

{
  "error": {
    "type": "image_generation_user_error",
    "code": "moderation_blocked",
    "moderation_details": {
      "moderation_stage": "input",
      "categories": ["harassment"]
    }
  }
}

moderation_details オブジェクトには、デバッグに使える大まかな情報が含まれます。内部の分類器が使うラベルやスコアは公開されません。

moderation_stage の値は次のいずれかです。

  • input:プロンプトまたはリクエストの入力が原因でブロックされました。
  • output:生成画像が原因でブロックされたか、後続の出力モデレーションの段階でブロックされました。
  • unknown:ブロックがどの段階で発生したかを特定しにくい場合に使われます。この値が返るのはまれです。

categories には、公開用の大まかなカテゴリラベルが含まれます。たとえば、harassment、self-harm、sexual、violence などの値が返ります。

ほとんどのアプリでは、エンドユーザーに表示する主なメッセージは一般的な内容にとどめてください。moderation_details は、開発者向けログ、サポート対応、分析、簡単な修正方法の案内に活用できます。

モデレーションで画像生成がブロックされた場合のエラー処理
import OpenAI from "openai";

const openai = new OpenAI();

try {
  // The same error handling pattern applies to image generation requests,
  // image edits, and Responses API tool calls that generate images.
  await openai.images.generate({
    model: "gpt-image-2.5-sunburst",
    prompt: "Create a poster humiliating my coworker with insulting captions",
  });
} catch (error) {
  if (error?.code !== "moderation_blocked") {
    throw error;
  }

  const moderationDetails = error.error?.moderation_details;
  const categories = moderationDetails?.categories ?? [];
  const stage = moderationDetails?.moderation_stage;

  let hint =
    "This request could not be completed because it did not meet safety requirements.";

  if (categories.includes("harassment")) {
    hint =
      "Try removing abusive or targeting language and focus on neutral visual details instead.";
  } else if (stage === "input") {
    hint =
      "Try revising the prompt or input images and submit the request again.";
  } else if (stage === "output") {
    hint =
      "The generated result was blocked by a safety check. Try changing the prompt and generating again.";
  }

  console.error("Image generation blocked", {
    request_id: error?.requestID,
    code: error?.code,
    moderation_details: moderationDetails,
  });

  console.log(hint);
}

対応モデル

Responses API では、gpt-5 以降のモデルは基本的に画像生成ツールに対応しています。使用したいモデルで画像生成ツールを利用できるかは、モデルの詳細ページで確認してください。

コストとレイテンシ

GPT Image 2.6 の料金

画像出力の料金は、課金対象の 100 万トークンあたり 30 ドルです。画像 1 枚あたりの出力料金は料金計算ツールで見積もれます。

テキストと画像の 100 万トークンあたりの料金は、画像生成の料金表を参照してください。

マークアップを使った編集のトークン単価は他の編集と同じで、追加料金はかかりません。SVG 出力では、参照画像の生成には画像モデルの単価が適用され、SVG の作成に使ったトークンには、SVG を作成したモデルの単価が適用されます。総額は各モデルが使用したトークン数によって決まります。

GPT Image 2.5 の料金

Responses API のリクエストでは、画像生成の料金に加えて、メインモデルのトークン使用量に応じた料金がかかります。

2 つの GPT Image 2.5 モデルのトークン単価は共通です。100 万トークンあたり、画像入力は 8 ドル、キャッシュ済み画像入力は 2 ドル、画像出力は 30 ドル、テキスト入力は 5 ドル、キャッシュ済みテキスト入力は 1.25 ドルです。料金表を参照してください。

指定したプロンプト、サイズ、品質設定で消費したトークン数は、レスポンスの usage で確認できます。トークン単価は同じでも、モデルや品質設定によって消費トークン数が変わるため、画像 1 枚あたりの料金は異なる場合があります。旧モデルの料金例については、以前の GPT Image モデルを参照してください。

キャッシュ済み入力の料金

GPT Image 2 と GPT Image 2.5 では、キャッシュ済み入力の料金は Responses API の画像生成ツールにのみ適用されます。/v1/images/edits など、Images API に直接送信するリクエストには適用されません。

画像生成でキャッシュが使われた入力は請求に反映されますが、Responses API の出力にはキャッシュ済みトークン数が含まれません。そのため、レスポンスの usage からはキャッシュヒットを確認できません。

料金の計算

モデル、品質、サイズを選ぶと、出力トークン数と画像出力の料金を見積もれます。 GPT Image 2.6 と 2.5 の Sunburst および Flare で選べる品質は low、medium、high、xhigh、max です。 gpt-image-2 では low、medium、high を選べます。 画像出力トークンの単価は共通ですが、同じ品質設定でもモデルによって使用トークン数が異なる場合があります。 見積もりには、品質とサイズを明示的に指定してください。auto の場合は生成される画像によって値が変わります。

モデル
品質
出力トークン数
823
画像出力の推定コスト
$0.02469

画像 1 枚あたりのコストは、画像出力 100 万トークンあたり 30 USD として計算しています。テキストと画像の入力トークンのコストや、ストリーミングで返される生成途中の画像のコストは含みません。

途中画像の料金

画像生成をストリーミングする際に partial_images パラメータを使うと、途中画像 1 枚につき画像出力トークンが 100 トークン追加されます。

以前の GPT Image モデル

以下は旧モデル向けの情報で、Sunburst と Flare は対象外です。新しく組み込む場合は、前述の GPT Image 2.5 モデルのいずれかを使ってください。

GPT Image 2 の設定と入力画像の忠実度

gpt-image-2 では、以下の条件を満たす解像度であれば、size パラメータに任意の解像度を指定できます。通常、正方形の画像が最も短時間で生成できます。

よく使われるサイズ
  • 1024x1024(正方形)

  • 1536x1024(横長)

  • 1024x1536(縦長)

  • 2048x2048(2K、正方形)

  • 2048x1152(2K、横長)

  • 3840x2160(4K、横長)

  • 2160x3840(4K、縦長)

  • auto(デフォルト)

サイズの制約
  • 最も長い辺は 3840px 以下

  • 両辺とも 16px の倍数

  • 長辺と短辺の比は 3:1 以下

  • 総画素数は 655,360 以上、 8,294,400 以下

品質のオプション
  • low
  • medium
  • high
  • auto(デフォルト)

入力画像の忠実度

input_fidelity パラメータは、画像の編集や参照画像を使った生成で、モデルが入力画像の細部をどの程度保持するかを制御します。gpt-image-2 では、このパラメータを省略してください。すべての入力画像が自動的に高い忠実度で処理されるため、API ではこの設定を変更できません。

gpt-image-2 は入力画像を常に高い忠実度で処理するため、参照画像を含む編集リクエストでは画像入力トークン数が多くなる場合があります。料金への影響については、画像認識のコストを参照してください。

旧モデルの料金例

gpt-image-2 より前のモデル

gpt-image-2 より前の GPT Image モデルは、まず専用の画像トークンを生成し、それをもとに画像を生成します。レイテンシと最終的な料金は、どちらも画像の描画に必要なトークン数に比例します。画像サイズが大きいほど、また品質設定が高いほど、必要なトークン数は増えます。

生成されるトークン数は、画像の寸法と品質によって次のように変わります。

品質 正方形(1024×1024) 縦長(1024×1536) 横長(1536×1024)
低 272 トークン 408 トークン 400 トークン
中 1056 トークン 1584 トークン 1568 トークン
高 4160 トークン 6240 トークン 6208 トークン

料金を見積もる際は、入力トークンも考慮してください。プロンプトにはテキストトークンが必要で、画像を編集する場合は入力画像の画像トークンも必要です。 gpt-image-2 は入力画像を常に高い忠実度で処理するため、参照画像を含む編集リクエストでは入力トークンを多く消費する場合があります。

テキストトークンと画像トークンの最新の単価は料金ページで確認できます。画像出力の料金を見積もるには、料金の計算を参照してください。

最終的な料金は、次のトークンにかかる料金の合計です。

  • テキスト入力トークン
  • 画像入力トークン(編集エンドポイントを使う場合)
  • 画像出力トークン

過去の画像出力料金

gpt-image-2 は数千通りの解像度に対応しています。比較しやすいように、下表では以前の GPT Image モデルと同じサイズを掲載しています。GPT Image 1.5、GPT Image 1、GPT Image 1 Mini については、従来の画像 1 枚あたりの出力料金も示しています。リクエストの総額を見積もる際は、テキストと画像の入力トークンの料金も加えてください。

gpt-image-1 は 2026 年 10 月 23 日に提供を終了しました。以下の料金は過去の料金との比較用です。代替モデルについては、提供終了のお知らせを参照してください。

同じ品質設定でも、解像度の高い長方形の画像の方が、解像度の低い画像や正方形の画像より出力トークン数が少なくなる場合があります。

モデル

品質

1024 × 10241024 × 15361536 × 1024

GPT Image 2


他のサイズにも対応
低$0.006$0.005$0.005
中$0.053$0.041$0.041
高$0.211$0.165$0.165

GPT Image 1.5

低$0.009$0.013$0.013
中$0.034$0.05$0.05
高$0.133$0.2$0.2

GPT Image 1

低$0.011$0.016$0.016
中$0.042$0.063$0.063
高$0.167$0.25$0.25

GPT Image 1 Mini

低$0.005$0.006$0.006
中$0.011$0.015$0.015
高$0.036$0.052$0.052