GPT Image 2.5 APIの使い方:Pythonで画像を生成・編集する

FlareとSunburstをPythonから呼び出し、画像保存や参照画像の編集を実装。透明PNG、対応サイズ、Responses APIで画像モデルを指定する場所も確認します。

暖かいベージュの背景と淡い紙に描かれた鍵と2本のひもの線画。タイトルはGPT Image 2.5 API。

GPT Image 2.5にはFlareとSunburstの2つのモデルがあり、テキストからの画像生成と参照画像の編集に対応しています。初めて試すなら、商品画像の生成、指定した文字の描画、被写体を残した背景変更のいずれか1つを選ぶと、結果を確認しやすくなります。

OpenAIのImages APIでは、gpt-image-2.5-flareまたはgpt-image-2.5-sunburstを選び、client.images.generate()またはclient.images.edit()を呼び出します。 返されたdata[0].b64_jsonをデコードすると画像を保存できます。

GPT Image 2.5はOfoxでも利用できます。FlareとSunburstのモデルページで、現在の料金とAPIの呼び出し例を確認できます。

以下のOpenAI直結コードは公式画像生成ガイドに基づく例です。2026年9月16日に文書と照合しましたが、有料のAPI呼び出しによる実行検証はしていません。OpenAIを直接呼ぶ例なので、ゲートウェイではモデルID、エンドポイント対応、料金を別途確認してください。

目的に合う手順から始める

やりたいこと確認する点次に読む箇所
日本語の文字を正確に載せる原稿と画像内の文字が一致するか、数字や濁点が欠けていないか日本語の文字が崩れるときの確認手順
最初の画像を生成するファイルが開けるか、被写体が欠けていないか、余計な物がないか下のPythonによる生成例
商品画像を編集するラベルの文字、形状、切り取り範囲が保たれているか下の参照画像の編集例
FlareとSunburstのどちらを使うか決める同じ課題で、設定を明示して比較するモデル比較
まとめて生成する費用を見積もる実際のusageと採用できた画像数を記録する料金と予算の計算方法

以下はAPIでの利用手順です。ChatGPTのサブスクリプションとは利用権限・請求が別なので、選んだ提供元でモデルへのアクセス、料金、対応する操作を確認してください。

最初の1枚ができるまでの確認順

  1. 接続先を決める。 下のコードはOpenAI直結です。Ofoxではモデルページの呼び出し例に従い、キー・ベースURL・モデルIDを同じ提供元にそろえます。
  2. 生成だけを試す。 まずは参照画像なし、1024x1024、quality="medium"の例を使います。編集や複数枚の処理は、1枚保存できてから追加します。
  3. APIの成功と成果物の合格を分ける。 応答が成功しても、空のデータや保存エラーは別に確認します。画像を開き、構図・文字・寸法をチェックします。
  4. 次の用途へ進む。 商品の背景変更は編集例へ、日本語の誤字は文字の校正手順へ進んでください。

Ofoxで実際に生成した商品画像

2026年9月13日、Ofoxのhttps://api.ofox.run/v1/images/generationsでopenai/gpt-image-2.5-flareを実行しました。1024x1024、quality="medium"、n=1で、HTTP 200、再試行なし。クライアント計測は19.519秒、管理画面で確認した実際の請求額は$0.013460でした。時間はHTTP応答の転送を含み、画像のデコード・保存は含みません。これは以下のOpenAI直結コードとは別のOfox実測です。全6回の画像と比較条件も確認できます。

Flare — 商品画像

モデルを選ぶ

モデルID公式の位置付け最初に試す用途
gpt-image-2.5-flare高速な日常的画像生成を重視するモデル構図の試行や応答時間を重視する生成
gpt-image-2.5-sunburst高品質な画像生成と精密な編集を重視するモデル細部が重要な完成画像や参照画像の編集

これは出発点であり、出力の保証ではありません。FlareとSunburstの比較で判断基準を確認できます。モデルファミリー名だけをAPIのIDとして使わないでください。

Pythonで生成して保存する

最新のSDKをインストールし、環境変数OPENAI_API_KEYにキーを設定します。ソースコードには書き込みません。

python -m pip install --upgrade openai
import base64
from pathlib import Path
from openai import OpenAI

client = OpenAI()

result = client.images.generate(
    model="gpt-image-2.5-flare",
    prompt=(
        "Create a clean product photograph of a ceramic tea cup on a "
        "warm gray background. Soft natural light, no text or watermark."
    ),
    size="1024x1024",
    quality="medium",
    output_format="png",
)

if not result.data or not result.data[0].b64_json:
    raise RuntimeError("画像データがありません。応答とエラーを確認してください。")

image_bytes = base64.b64decode(result.data[0].b64_json, validate=True)
Path("tea-cup.png").write_bytes(image_bytes)
print(result.usage)

PNGを要求し、返されたバイト列をPNGとして保存します。費用を評価する際はusageも保持してください。画像が生成されたという事実だけでは消費量は分かりません。

参照画像を編集する

images.edit()に入力ファイルを渡し、変更点と保持する部分を明示します。product.pngは事前に用意したローカル画像です。

import base64
from pathlib import Path
from openai import OpenAI

client = OpenAI()

with open("product.png", "rb") as reference:
    result = client.images.edit(
        model="gpt-image-2.5-sunburst",
        image=reference,
        prompt=(
            "Remove the background from this product photograph. "
            "Preserve the product shape, colors, and label text. "
            "Use a fully transparent background, with no checkerboard."
        ),
        size="1024x1024",
        quality="high",
        background="transparent",
        output_format="png",
    )

if not result.data or not result.data[0].b64_json:
    raise RuntimeError("画像データがありません。応答とエラーを確認してください。")

Path("product-cutout.png").write_bytes(
    base64.b64decode(result.data[0].b64_json, validate=True)
)

この例は商品の形、色、ラベルを保ちながら背景を透明にする指示です。原寸でラベル、形状、アルファチャンネルを確認してください。画像に描かれた市松模様は透明ではありません。プロンプトガイドには部分編集や商品の細部を保つ編集の例もあります。

寸法と画質を明示する

両モデルはauto、low、medium、high、xhigh、maxに対応します。比較時は明示的な設定を使うと条件をそろえやすくなります。

推奨寸法には1024x1024、1536x1024、1024x1536があります。カスタム寸法は次をすべて満たす必要があります。

  • 幅と高さが16の倍数。
  • どちらの辺も3,840ピクセル以下。
  • 縦横比が1:3〜3:1。
  • 総画素数が655,360〜8,294,400。

OpenAIは総画素数が3,686,400(2560x1440相当)を超える出力を実験的対応としています。「4K対応」は任意の4K寸法の受け付けや、同じ信頼性を保証しません。

透明出力にはPNGまたはWebPを使います。output_compressionはJPEGとWebP用で、PNGには使いません。画質設定を上げてもすべての画像が改善するとは限らないため、実際の入力で比較します。

Responses APIではツール内に画像モデルを指定する

Images APIは画像モデルを直接選びます。一方、Responsesでは外側の言語モデルと画像生成ツールを分けます。

response = client.responses.create(
    model="gpt-6-astra",
    input="Generate a product photo of a ceramic tea cup on a gray background.",
    tools=[{
        "type": "image_generation",
        "model": "gpt-image-2.5-sunburst",
        "output_format": "png",
    }],
)

for index, item in enumerate(response.output):
    if item.type == "image_generation_call":
        Path(f"response-image-{index}.png").write_bytes(
            base64.b64decode(item.result)
        )

上のimportとclientを引き継ぐコードです。外側のmodelは処理を進める言語モデルを、ツール内のmodelは画像モデルを選びます。これはOpenAIの文書に示された構成です。

Responsesでは言語モデルのトークン料金も加わり得ます。直接Imagesを呼ぶ場合との比較では料金ガイドを参照してください。

エラーと画像の不具合を分ける

症状最初に確認すること次の操作
401キーの提供元と接続先が一致するかキーを公開せず、認証設定を確認する
403・モデルへのアクセス拒否選んだモデルにアカウントの権限があるか提供元のアクセス条件を確認する
404・model_not_found正確なモデルIDとURLファミリー名ではなく、提供元が示すIDを使う
400・パラメータエラー応答本文で指摘された項目まず生成の最小例に戻し、編集や任意パラメータを1つずつ足す
429応答の制限理由、利用枠、同時実行数原因を確認してから再試行する。連打しない
タイムアウトリクエストが受理されたか、提供元の履歴結果が不明なまま即再送せず、重複生成を避ける
保存は成功したが文字が違う原稿と原寸画像日本語の文字校正を行う

HTTPコードだけで原因を確定せず、応答本文と提供元の履歴を併せて確認してください。一般的なコードの意味はOpenAIのエラーガイドで確認できます。

透明化は、ビューアーの見た目だけで判断しません。市松模様自体が描かれた画像と、アルファチャンネルで透過している画像は別です。保存ファイルを画像編集ソフトで開き、色の違う背景の上に置いて、輪郭と透過部分を確認します。

本番接続前の確認

実際に使うアカウントとプロバイダーのアクセス権を確認します。SDKの更新だけでモデルへのアクセス権が付くわけではありません。OpenAIのコード例だけでは、他のプロバイダーが同じルートに対応しているかは分かりません。

モデル、プロンプト、画質、寸法、usage、応答時間、保存ファイルを記録します。編集では文字の正確さや意図しない変更も確認します。既存のGPT Image 2環境を置き換える場合は、全トラフィックを移す前に移行チェックリストを使ってください。

よくある質問

GPT Image 2.5のモデルIDは?
gpt-image-2.5-flareまたはgpt-image-2.5-sunburstです。実際のプロバイダーが文書化した正確なIDを使ってください。
透明PNGを生成できる?
はい。backgroundをtransparent、output_formatをpngまたはwebpに設定し、保存後にアルファチャンネルを確認します。JPEGは透明度を保持しません。
Responsesの画像モデルはどこに設定する?
image_generationツール定義内です。外側のmodelは処理を進める言語モデルを選びます。