curl、Python、Nodeでgpt-image-2.5 API (FlareとSunburst)を使う方法

curl、Python、Nodeでgpt-image-2.5 API(FlareおよびSunburst)を呼び出す:生成、参照画像付きマルチパート編集、ストリーミング、実費用

INEZA Felin-Michel

INEZA Felin-Michel

9 9月 2026

curl、Python、Nodeでgpt-image-2.5 API (FlareとSunburst)を使う方法

Apidog エンタープライズ

オンプレミスデプロイ

SSO & RBAC

SOC 2 準拠

Apidog Enterpriseを見る

OpenAIは2026年9月8日にChatGPT Images 2.5を出荷し、gpt-image-2.5-flaregpt-image-2.5-sunburstの2つの新しいAPIモデルを発表しました。どちらもgpt-image-2と同じエンドポイントの背後にあり、弊社のgpt-image-2 APIガイドに従っていれば、ほとんどのコードはモデルIDの交換だけで済みます。変更されたのは、品質ラダーと、Responses APIがツール呼び出しごとにモデルを選択できるようになった点です。

このガイドでは、開発者向けのパスのみを扱います。生成、参照画像とマスクを使用したマルチパート編集、Responses APIツール、ストリーミング、そして実際のコストを把握するためのusageの読み取りについてです。このリリースがChatGPTユーザーにとって何を意味するかについては、弊社のChatGPT Images 2.5概要をご覧ください。OpenAIのローンチポストには製品の枠組みが記されています。以下のすべての数値は、2026年9月9日時点のOpenAIのドキュメント、料金ページ、または計算機から得られたものです。

gpt-image-2.5 APIの概要

項目 値 (OpenAIドキュメント)
モデルID gpt-image-2.5-flare, gpt-image-2.5-sunburst (スナップショット -2026-09-08)
エンドポイント POST /v1/images/generations, POST /v1/images/edits, Responses API image_generation ツール
入力 / 出力 テキストと画像を入力、画像のみを出力
品質 low, medium, high, xhigh, max, auto (デフォルト)。xhighmaxは新規
サイズ 推奨1024x1024, 1536x1024, 1024x1536。16の倍数でカスタムサイズ、アスペクト比1:3から3:1、合計4Kピクセルまで
出力 data[].b64_json; output_format png, jpeg, webp; background: "transparent"にはpngまたはwebpが必要
ストリーミング partial_images 0-3、各部分画像は追加で100出力トークン
料金 (両モデル) 100万画像出力トークンあたり$30、100万画像入力トークンあたり$8、100万テキスト入力トークンあたり$5

トークンあたりのレートはgpt-image-2と一致しますが、品質レベルごとのトークン数が変更されたため、画像あたりのコストは変動します。

前提条件

キーを一度エクスポートします。

export OPENAI_API_KEY="sk-proj-..."

curlで画像を生成する

まずFlareを使用してください。OpenAIのモデルページでは、「ほとんどのアプリケーションにとってデフォルトの選択肢」とされています。

curl https://api.openai.com/v1/images/generations \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-image-2.5-flare",
    "prompt": "Product photo of a matte black mechanical keyboard, studio lighting, no text",
    "size": "1536x1024",
    "quality": "medium",
    "output_format": "webp",
    "background": "transparent"
  }'

レスポンスには、各画像に対応するb64_jsonが1つずつ含まれたdata配列と、input_tokensおよびoutput_tokensを含むusageオブジェクトが含まれます。usageは、得られる唯一の正確なコストシグナルなので保持してください。画像生成ガイドからのパラメータに関する注意事項:output_formatのデフォルトはpngで、OpenAIは「jpegの使用はpngよりも高速です」と述べています。output_compression (0-100) はjpegとwebpのみに適用されます。background: "transparent"はjpegでは失敗します。

Python: 生成、次に参照画像で編集

SDK呼び出しはcurlのボディをミラーリングします。b64_jsonをデコードしてバイトを書き込みます。

import base64
from openai import OpenAI

client = OpenAI()

gen = client.images.generate(
    model="gpt-image-2.5-flare",
    prompt="Clean API analytics dashboard mockup, dark theme, latency chart top right",
    size="1536x1024",
    quality="high",
    output_format="png",
)
open("dashboard.png", "wb").write(base64.b64decode(gen.data[0].b64_json))
print(gen.usage.output_tokens, "output tokens")

編集は2.5モデルが本領を発揮するところです。ローンチポストによると、「他の詳細をそのままに保ちながら、要求されたものだけを編集する能力が向上した」とあり、OpenAIはSunburstを「編集においてより厳密な制御」のために位置付けています。編集エンドポイントはマルチパートです。参照画像、オプションのマスク、そしてプロンプトが含まれます。マスクが透明な部分ではモデルが画像を再描画し、それ以外の部分は元の画像を保持します。

edit = client.images.edit(
    model="gpt-image-2.5-sunburst",
    image=open("dashboard.png", "rb"),
    mask=open("chart-area-mask.png", "rb"),
    prompt="Replace the latency chart with a bar chart of error rates per endpoint; keep everything else",
    size="1536x1024",
    quality="high",
)
open("dashboard-v2.png", "wb").write(base64.b64decode(edit.data[0].b64_json))
print(edit.usage.input_tokens, "input tokens (includes the reference image)")

maskを省略すると、モデルはプロンプトのみから変更すべき箇所を決定します。参照画像は、1Mあたり8ドルの画像入力トークンとして課金されます。OpenAIは画像あたりの入力トークン数を公開していないため、usage.input_tokensを読み取ってください。

NodeおよびTypeScript: b64_jsonをディスクに書き込む

import fs from "node:fs/promises";
import OpenAI from "openai";

const client = new OpenAI();

const res = await client.images.generate({
  model: "gpt-image-2.5-flare",
  prompt: "Hero image for API docs: floating JSON cards over a teal gradient, no text",
  size: "1536x1024",
  quality: "medium",
  output_format: "jpeg",
  output_compression: 80,
});

const b64 = res.data?.[0]?.b64_json;
if (!b64) throw new Error("no image returned");
await fs.writeFile("hero.jpg", Buffer.from(b64, "base64"));

エイリアスが移動しても出力の安定性を保つために、本番環境ではgpt-image-2.5-flare-2026-09-08を固定してください。

Responses API: ツールとしての画像生成

ここでは、メインラインモデルがプロンプトを読み取り、それを修正し、image_generationツールを呼び出します。画像モデルは、ツール定義内でmodelを設定することで選択します。トップレベルのmodelはメインラインモデルである必要があり、OpenAIのツールに関するドキュメントではgpt-6-astraを使用しています。弊社のResponses APIガイドでは、リクエストの形式について説明しています。actionフィールドはauto (デフォルト)、generate、またはeditを受け入れます。参照画像を渡し、それを再解釈ではなく変更したい場合はeditを設定します。

import base64

with open("product.png", "rb") as f:
    ref = base64.b64encode(f.read()).decode()

first = client.responses.create(
    model="gpt-6-astra",
    input=[{"role": "user", "content": [
        {"type": "input_text", "text": "Put this bottle on a white marble surface with soft daylight"},
        {"type": "input_image", "image_url": f"data:image/png;base64,{ref}"},
    ]}],
    tools=[{"type": "image_generation", "model": "gpt-image-2.5-sunburst", "action": "edit"}],
)
calls = [o for o in first.output if o.type == "image_generation_call"]
open("bottle-marble.png", "wb").write(base64.b64decode(calls[0].result))

second = client.responses.create(
    model="gpt-6-astra",
    previous_response_id=first.id,
    input="Same scene, but add a second bottle behind it, slightly out of focus",
    tools=[{"type": "image_generation", "model": "gpt-image-2.5-sunburst", "action": "edit"}],
)

previous_response_idによるフォローアップは、最初の画像をコンテキストに保持するため、「同じシーン」はファイルを再アップロードすることなく解決されます。メインラインモデルのトークンは画像トークンに加えて課金され、プロンプトの書き換えはプロンプトテキストだけでは出力を再現できないことを意味します。

部分画像のストリーミング

両方のAPIはpartial_images (0から3) を受け入れます。各部分画像は追加で100出力トークンを消費するため、3つで300トークン、または画像あたり$0.009の追加コストがかかります。進捗状況を表示するUIには価値がありますが、バッチジョブでは無駄になります。

stream = client.images.generate(
    model="gpt-image-2.5-flare",
    prompt="Isometric illustration of an API gateway routing requests to three services",
    size="1024x1024",
    quality="medium",
    stream=True,
    partial_images=2,
)
for event in stream:
    if event.type.endswith("partial_image"):
        open(f"gateway-partial-{event.partial_image_index}.png", "wb").write(
            base64.b64decode(event.b64_json))
    elif event.type.endswith("completed"):
        open("gateway.png", "wb").write(base64.b64decode(event.b64_json))

正確なイベントタイプ文字列は画像生成ガイドに記載されており、サフィックスチェックにより両方のAPIバリアントでループが機能します。コード外でストリーミングイベントを検査するには、AI APIからのSSEレスポンスのテストに関するガイドをご覧ください。

使用状況を読み取り、トークンをドルに変換する

OpenAI自身の注意点:「同じトークンレートでも画像あたりのコストは同じではありません。トークン消費量はモデルと品質設定によって異なります。」画像生成ガイドの計算機は、料金ページにある1Mあたり30ドルのレートで、画像出力トークンのみの以下の見積もりを示しています。

品質 1024x1024 1536x1024
low 196トークン, $0.0059 158トークン, $0.0047
medium 439トークン, $0.0132 343トークン, $0.0103
high 1,756トークン, $0.0527 1,372トークン, $0.0412
xhigh 3,122トークン, $0.0937 2,459トークン, $0.0738
max 7,024トークン, $0.2107 5,488トークン, $0.1646

再ラベル付けに注意してください。2.5のhighは1,756トークンを使用し、これはgpt-image-2の以前のmedium予算に相当します。maxは7,024トークンを使用し、これは以前のhigh予算に相当します。移行後もquality: "high"を維持すると、各画像のコストは以前のmedium予算で約4分の1になります。以前のhigh予算を使用する場合は、maxに移行してください。弊社のFlare vs Sunburst vs gpt-image-2比較では、月間全体コストを算出しています。

計算機の数値は見積もりです。実際のコストはレスポンスから得られます。

OUTPUT_RATE = 30 / 1_000_000  # dollars per image output token
usd = gen.usage.output_tokens * OUTPUT_RATE
print(f"{gen.usage.output_tokens} tokens = ${usd:.4f}")

リクエストごとにログに記録してください。OpenAIによると、正方形ではない大きなサイズの方が、小さな正方形のサイズよりも少ないトークンを生成する場合があります。未解決の疑問が1つあります。料金ページのBatchタブにはgpt-image-2のみがリストされているため、2.5のBatch APIサポートは未確認と見なしてください。

エラー、レート制限、およびタイムアウト

ApidogでFlareとSunburstを並べてテストする

画像プロンプトのターミナルでの反復は、出力が見えないため遅く、誤ったquality値は送信ごとに実際の費用を発生させます。ApidogはAPIクライアントでありテストプラットフォームです。Apidogが呼び出しを送信し、レスポンスをチェックし、OpenAIのサーバーがレンダリングを実行します。

  1. キーを一度だけ保存します。OPENAI_API_KEYを環境変数として追加し、AuthorizationヘッダーでBearer {{OPENAI_API_KEY}}として参照してください。キーは保存されたリクエストには残りません。
  2. 2つの環境、1つのリクエスト。flaresunburstという名前の環境を作成し、それぞれにMODEL変数を設定し、ボディ内で"model": "{{MODEL}}"を設定します。切り替えて再送信し、画像とusageを並べて比較します。編集の場合、imagemaskをファイルフィールドとして含むフォームデータボディを使用します。
  3. ポストプロセッサでb64_jsonをデコードします。短いスクリプトでdata[0].b64_jsonを抽出し、デコードしてファイルを保存するため、送信ごとに生JSONの横に表示可能な画像が生成されます。
  4. コストをアサートし、次にスケジュールします。usage.output_tokensが予算、例えばhighな1536x1024レンダリングで2,000トークン以下であることをアサートし、そのリクエストを時間指定回帰テストとして実行します。もし誰かが品質をmaxに上げた場合や、スナップショットがトークン数を変更した場合、請求書が届く前にテストが失敗します。

Apidogをダウンロードし、OpenAIキーをApidogに指定すれば、コストガードレール付きの共有プロンプトライブラリが手に入ります。

よくある質問

gpt-image-2のコードを2.5に対応させるには変更が必要ですか?モデルIDを交換し、qualityを再確認してください。エンドポイント、認証、およびレスポンスの形式は変更されていませんが、highはより少ないトークン予算にマッピングされるようになりました。gpt-image-2 APIガイドは引き続き古いモデルを対象としています。

APIにはFlareとSunburstのどちらを使うべきですか?まずはFlareから始めてください。OpenAIは、トークンあたりの価格が同じでgpt-image-2よりも「50%低いレイテンシ」を持つデフォルトとして位置付けています。参照写真から製品画像を構築するなど、速度よりも編集の精度が重要になる場合はSunburstに移行してください。両方とも同じ計算機トークン数を使用するため、トレードオフは時間であり、費用ではありません。

これらのモデルをChat Completionsで使用できますか?いいえ。画像生成はImage APIとResponses APIのimage_generationツールに存在します。Chat Completionsでは公開されていません。

APIを通じて2.5を無料で試す方法はありますか?永続的な無料APIティアはなく、画像エンドポイントにはティア1が必要です。最も安価な実際の方法は、1024x1024画像あたり約$0.006で、196トークンのquality: "low"です。消費者向けアプリは別の話です。ChatGPT Images 2.5を無料で使う方法をご覧ください。

次に行うこと

まずcurl呼び出しから始め、計算機テーブルとusage.output_tokensを比較して確認し、その後リクエストを画像を表示できるクライアントに移行してください。Simon Willisonの解説では、Sunburstがグラフをそのままに保ちながら被写体を追加する方法が示されています。コミットする前に、ご自身の参照画像でその編集動作をテストしてください。

button

ApidogでAPIデザイン中心のアプローチを取る

APIの開発と利用をよりシンプルなことにする方法を発見できる