0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GPT Image 2.5 vs GPT Image 2 ─ highが2段ズレた話

0
Last updated at Posted at 2026-09-12

はじめに

画像生成の見積もり表を更新しようとして、手が止まりました。

2026年9月8日に OpenAI が GPT Image 2.5 を出したので、いつもどおり「新モデルの単価」を料金ページから拾って表に入れるだけのはずでした。ところがレートが1セントも動いていない。動いていないのに、社内で先に試した人の請求額は明らかに下がっている。値下げしていないのに安くなる、という状態がしばらく理解できませんでした。

手が止まる.png

答えは料金ページになく、quality パラメータの側にありました。レートではなく、ラベルの中身が移動していたのです。

私はふだん、クリエイティブまわりの素材づくりで画像生成 API をバッチで回しています。1日に数百枚、多い日は数千枚。この規模だと、1枚あたり数セントの差が月末に効いてきますし、「モデル名だけ差し替えて様子を見る」という運用が一番危ない領域でもあります。今回まさにその罠がありました。

この記事で読者に考えてほしいのは、料金表の数字は請求額を予測しないということです。トークン単価が同じでも、同じパラメータが同じ量のトークンを使うとは限らない。今回はそれが極端な形で出ました。

この記事を読むと明日から決められること

移行後に quality へ何を指定すべきか、そして Flare と Sunburst のどちらに本番トラフィックを流すかを、自分のワークロードの数字で決められるようになります。

具体的には次の3つです。

  • 現行の見た目を保つための quality の読み替え規則
  • Flare と Sunburst の使い分け基準と、その根拠になる数字
  • 月間生成枚数から請求額を先に出しておくための計算手順

対象読者

すでに gpt-image-2 を API から呼んでいて、2.5 系への移行を検討している人。画像生成 API を使ったことがなくても、料金体系の話として読めるようにしてあります。

この記事で扱わないこと

ChatGPT 側の新機能、プロンプトの書き方、他社モデルとの横断比較は扱いません。API の費用・速度・品質の3点に絞ります。

数字の出どころについて

本記事の数値は3種類に分かれます。混ぜると危険なので、毎回どれなのかを明示します。

種別 内容 扱い
一次情報 OpenAI の発表・ドキュメント・料金ページ そのまま引用
第三者計測 外部媒体が自腹で API を叩いた値 出典を明記して引用
自前計算 上記から私が再計算した値 計算コードを本文に掲載

レイテンシと品質は私の手元では計測していません。計測したのは費用のほうだけです。


9月8日に出たのは「1つのモデル」ではなかった

前節で、レートが動いていないのに請求額が下がったという話をしました。原因の切り分けに入る前に、まず何がリリースされたのかを正確に押さえます。ここを曖昧にしたまま数字を比べると、後の節が全部ズレます。

このセクションで分かること: API に増えたモデルIDと、公式ドキュメント内に存在する記述の食い違い。

製品名は ChatGPT Images 2.5 ですが、API に生えたモデルIDは2つです。OpenAI は発表記事で、Flare を「ほとんどのアプリケーションにとって既定の選択肢であり、GPT-Image-2 より高品質な画像を50%低いレイテンシで提供する」と位置づけ、Sunburst を「編集をまたいだより厳密なコントロールが利く、プレミアムなビジュアル制作向け」としています。

項目 gpt-image-2 gpt-image-2.5-flare gpt-image-2.5-sunburst
位置づけ 前世代 既定・速度優先 品質・編集精度優先
quality low / medium / high / auto low / medium / high / xhigh / max / auto 同左
最大解像度 2K 3840px まで 同左
想定用途 継続運用 大量生成・試行錯誤 仕上げ・本番素材

gpt-image-2.5 というIDは存在しません。サフィックス必須です。

名前と速度の対応が直感と逆です。Flare が速いほう、Sunburst が遅いほう。私は初回のテストでこれを取り違えて、タイムアウト設定を丸ごと間違えました。

公式ドキュメント内でも記述が割れている

ここは移行判断に直結するので、先に出しておきます。

発表記事は上記のとおり「Flare は GPT-Image-2 より高品質」と書いていますが、開発者ドキュメントのプロンプティングガイドは別のことを書いています。そちらでは Flare を「速度に最適化された小さいモデルで、画質は GPT Image 2 と同等」、Sunburst を「品質に最適化されたベースモデルで、GPT Image 2 より高画質」と説明しています。

同じ会社の、同じ日付の文書で、Flare の画質が「上」と「同等」に割れています。どちらを信じるかではなく、自分のプロンプトで確かめるべき論点だと扱ってください。実際ドキュメント側は「応答時間と品質は自分のワークロードで測ること。あるワークロードでの速度改善は、別のワークロードでの固定的な改善を意味しない」と釘を刺しています。


料金レートは1セントも動いていない

前節で、Flare が既定・Sunburst が精度向上版という位置づけを確認しました。ふつう上位モデルが出れば単価が上がるはずで、私の混乱もそこから始まっています。ここで料金ページを実際に読みます。

このセクションで分かること: 3モデルの公開レートが完全に同じであることと、「2.5は2倍」という誤情報がどこから生まれたか。

OpenAI の料金ページに載っている Standard ティアのレートは次のとおりです。モデルページ側にも「トークンレートは GPT Image 2 と一致する」と明記されています。

種別 gpt-image-2 2.5-flare 2.5-sunburst
画像入力 $8.00 $8.00 $8.00
画像入力(キャッシュ) $2.00 $2.00 $2.00
画像出力 $30.00 $30.00 $30.00
テキスト入力 $5.00 $5.00 $5.00

いずれも100万トークンあたり。Flare と Sunburst の単価差はゼロです。Sunburst に払う対価は金額ではなく時間でした。

「2.5 は GPT Image 2 の2倍の価格」と書いている解説がいくつか流通しています。これは料金ページの Batch タブに載っている gpt-image-2 の値と、Standard タブの 2.5 の値を並べた結果です。Batch は50%引きなので、比べれば当然2倍に見えます。Standard 同士で並べれば全レートが据え置きです。

単価はレートではなくトークン数で決まる

画像生成の請求は、出力画像が何トークン換算になるか、つまり画像出力トークンで決まります。つまり「1枚いくら」は導出値です。ここを計算するモデルを書きました。

from dataclasses import dataclass

RATE_IMAGE_OUT = 30.0 / 1_000_000   # USD / 画像出力トークン
RATE_IMAGE_IN  = 8.0 / 1_000_000
RATE_TEXT_IN   = 5.0 / 1_000_000

@dataclass(frozen=True)
class Request:
    """1リクエストの請求額を組み立てるだけの責務を持つ"""
    output_tokens: int
    ref_image_tokens: int = 0
    prompt_text_tokens: int = 0

    @property
    def usd(self) -> float:
        return (self.output_tokens * RATE_IMAGE_OUT
                + self.ref_image_tokens * RATE_IMAGE_IN
                + self.prompt_text_tokens * RATE_TEXT_IN)

# OpenAI のコスト計算機が表示する 1024x1024 の出力トークン数
TOKENS_1024 = {
    "gpt-image-2":   {"low": 196, "medium": 1756, "high": 7024},
    "gpt-image-2.5": {"low": 196, "medium": 439, "high": 1756,
                      "xhigh": 3122, "max": 7024},
}

for model, rungs in TOKENS_1024.items():
    print(model, {q: f"${Request(t).usd:.5f}" for q, t in rungs.items()})

実行結果です。

gpt-image-2   {'low': '$0.00588', 'medium': '$0.05268', 'high': '$0.21072'}
gpt-image-2.5 {'low': '$0.00588', 'medium': '$0.01317', 'high': '$0.05268',
               'xhigh': '$0.09366', 'max': '$0.21072'}

fig2_cost_per_image.png

quality gpt-image-2 gpt-image-2.5 倍率
low $0.00588 $0.00588 1.00
medium $0.05268 $0.01317 0.25
high $0.21072 $0.05268 0.25
xhigh 非対応 $0.09366
max 非対応 $0.21072

ここで手が止まりました。mediumhigh がきれいに4分の1になっている。レートが同じなのに単価が4分の1になるということは、消費トークン数が4分の1になったということです。

なお gpt-image-2 側のトークン数は公開されていないので、公開単価を $30 per 1M で割り戻しています。$0.053 ÷ 0.00003 = 1766、$0.211 ÷ 0.00003 = 7033。四捨五入の幅を考えると、2.5 の 1,756 と 7,024 に一致します。この一致が次節の伏線でした。


highが2段ズレていた

前節で、mediumhigh の単価がきれいに4分の1になり、割り戻したトークン数が 2.5 側の別の設定と一致することを見ました。偶然の一致ではありません。同じ名前のラベルが別の予算を指しているのです。この段階構造を本記事ではquality ラダーと呼びます。ここが今回いちばん重要な変更で、発表記事には一行も書かれていません。

このセクションで分かること: quality ラベルの対応関係と、モデル名だけ差し替えたときに何が起きるか。

外部媒体の Tosea.ai が公式 API に41回リクエストを投げて、設定ごとの出力トークン数を計測しています。2048x1152 の同一プロンプトでの値です。

fig1_quality_ladder.png

quality gpt-image-2 gpt-image-2.5
low 157 157
medium 1,413 367
high 5,650 1,413
xhigh 非対応 2,511
max 非対応 5,650

GPT Image 2.5 の high は、gpt-image-2 の medium が使っていた予算を使います。max は gpt-image-2 の high が使っていた予算を使います。新しい2段は上に足されたのではなく、下に差し込まれました。その結果、既存のラベルが2段ずつ押し下げられています。意味を保ったのは low だけです。

モデル名だけ差し替えて quality: "medium" を据え置くと、1,413トークンの描画が367トークンに落ちます。約3.8分の1です。請求額は半分以下になるので、ダッシュボード上は成功に見えます。劣化が出るのは画像の中だけで、しかも文字が壊れるような派手な壊れ方ではなく、レイアウトが素朴になる方向に出ます。気づきにくい。

読み替えは単純な写像なので、設定ファイル側で一度だけ潰します。

"""gpt-image-2 の quality を 2.5 で同じ描画予算になる値へ写像する"""

QUALITY_REMAP = {"low": "low", "medium": "high", "high": "max"}

def migrate(params: dict) -> dict:
    """モデルIDと quality をまとめて 2.5 系に移す。呼び出し側は触らない"""
    out = dict(params)
    out["model"] = "gpt-image-2.5-flare"
    out["quality"] = QUALITY_REMAP[params.get("quality", "medium")]
    return out

legacy = {"model": "gpt-image-2", "quality": "medium", "size": "1024x1024"}
print(migrate(legacy))
# {'model': 'gpt-image-2.5-flare', 'quality': 'high', 'size': '1024x1024'}

auto に逃げるのは避けてください。計測では同一条件のはずの呼び出しが違うトークン予算に着地した例が報告されています。課金を顧客に転嫁しているなら、quality は明示指定が安全です。


速度 ─ 「7倍速い」は予算をそろえていない

前節で、同じラベルが別の予算を指すことが分かりました。この事実は費用だけでなく、速度の比較記事の読み方も変えます。予算が違う2つを並べて「速い」と言っても意味がないからです。

このセクションで分かること: トークン予算をそろえたときの実際の短縮率と、そこから逆算できるスループット。

出回っている数字には幅があります。OpenAI 自身は「最大50%のレイテンシ削減」と書き、早期顧客の Manus は「GPT-Image-2 の2倍から4倍の速度」とコメントしています。一方で別の第三者計測では、1024x1024 を quality=high で回して Flare が中央値16.7秒、gpt-image-2 が117.8秒、つまり7倍という結果が出ています。

7倍のほうは、前節を読んだあとなら理由が分かります。両方 high を指定しているので、Flare は1,756トークン、gpt-image-2 は7,024トークンを描いている。4倍重い仕事と比べれば7倍速くて当然です。

予算をそろえた比較が Tosea.ai の計測にあります。請求額が同一になる組み合わせです。

fig3_latency.png

LATENCY = {  # 2048x1152・5ページ平均・秒
    "1413トークン": {"gpt-image-2 medium": 37.3, "Sunburst high": 27.7, "Flare high": 19.7},
    "5650トークン": {"gpt-image-2 high": 82.9, "Sunburst max": 59.8, "Flare max": 33.7},
}

for budget, row in LATENCY.items():
    base = next(iter(row.values()))
    for name, sec in row.items():
        print(f"{budget} {name:20s} {sec:5.1f}s "
              f"短縮{(1 - sec / base) * 100:5.1f}%  逐次{3600 / sec:5.1f}枚/時")
1413トークン gpt-image-2 medium    37.3s 短縮  0.0%  逐次 96.5枚/時
1413トークン Sunburst high         27.7s 短縮 25.7%  逐次130.0枚/時
1413トークン Flare high            19.7s 短縮 47.2%  逐次182.7枚/時
5650トークン gpt-image-2 high      82.9s 短縮  0.0%  逐次 43.4枚/時
5650トークン Sunburst max          59.8s 短縮 27.9%  逐次 60.2枚/時
5650トークン Flare max             33.7s 短縮 59.3%  逐次106.8枚/時

そろえて比べると、Flare の短縮率は47%でした。OpenAI の「最大50%」とほぼ一致します。発表資料の数字が実測と合うのは珍しいので、ここは素直に評価していいと思います。Sunburst は26%で、Flare より4割ほど遅い。

逐次処理での1時間あたり枚数に直すと、96.5枚が182.7枚になります。1枚あたりのコストは1セントも変わらないまま、同じ時間で倍近くさばけるという意味です。私の用途だと、ここが一番効きます。

ここまでのまとめ

  • レートは3モデルとも同一。Sunburst に価格プレミアムはない
  • quality のラベルが2段下にズレた。mediumhighhighmax で読み替える
  • 読み替えずに移行すると、描画予算が約4分の1に落ちる
  • 予算をそろえた比較で Flare は約47%短縮、Sunburst は約26%短縮
  • 「4分の1のコスト」「7倍高速」はどちらも予算をそろえていない比較

ここまでが費用と速度です。残る論点は品質で、ここだけは客観的な数字が最も薄い領域です。


品質 ─ 選好スコアと、編集を重ねたときのズレ

前節までで、費用と速度は数字が出そろいました。しかし「同じ予算で速い」が成立しても、絵が劣化していれば意味がありません。品質を確かめない限り移行判断は下せない、というのがこの節を書く理由です。

このセクションで分かること: 公開されている選好スコアの読み方と、Sunburst の存在意義が数字として出る唯一の領域。

まず選好スコアです。Arena のコミュニティ投票による Elo が公開されています。

fig4_arena_elo.png

text-to-image では Sunburst が1421、Flare が1399、gpt-image-2 の medium が1381。image-edit では Sunburst が1520、Flare が1491、gpt-image-2 が1461です。

ただしこのスコアは扱いに注意が必要です。人間の投票であって OpenAI のベンチマークではなく、スナップショット時点で 2.5 側の投票数は gpt-image-2 より大幅に少ない状態でした。順位が今後入れ替わっても不思議ではありません。生成側の差が22点、編集側の差が29点という開き方だけを見ておけば十分です。編集のほうが差が大きい、という方向性が Sunburst の売り文句と一致しています。

編集を3回重ねたときに何%が動くか

Sunburst を選ぶ理由が数字として出るのは、ここだけです。1枚の画像に「見出しを書き換える」「数値を1つ変える」といった単一指示を3回連続で与え、指示していない部分の画素がどれだけ動いたか、つまりドリフトを計測したデータがあります。

fig6_edit_drift.png

# 各値は「元画像に対して」動いた画素の割合。ターン間の差分ではない
DRIFT = {"gpt-image-2": [5.6, 8.1, 11.4], "Sunburst": [4.1, 6.8, 9.9],
         "Flare": [3.8, 6.7, 9.2]}
base = DRIFT["gpt-image-2"]

for name, cum in DRIFT.items():
    gain = (1 - cum[-1] / base[-1]) * 100
    print(f"{name:12s} 1回後{cum[0]:5.1f}%  3回後{cum[-1]:5.1f}%  "
          f"基準比 {cum[-1] / base[-1]:.2f}  3回後で基準より{gain:4.1f}%小さい")
gpt-image-2  1回後  5.6%  3回後 11.4%  基準比 1.00  3回後で基準より 0.0%小さい
Sunburst     1回後  4.1%  3回後  9.9%  基準比 0.87  3回後で基準より13.2%小さい
Flare        1回後  3.8%  3回後  9.2%  基準比 0.81  3回後で基準より19.3%小さい

3回編集後のズレは、2.5 系のほうが13〜19%小さい。方向としては公式の主張どおりです。ただし正直に言えば段違いではありません。9.2%と11.4%の差で救われるワークフローは、そう多くない気がします。

そして計測元は、3モデルとも9回中9回すべての編集指示を正しく反映したと報告しています。つまり編集の成否そのものは gpt-image-2 でもできていた。ここは移行の理由にならない、と読むべきところです。

意外だったのは、ドリフトが最小だったのが Sunburst ではなく Flare だったことです。1つのワークロードでの計測なので一般化はできませんが、「編集精度なら Sunburst」という前提を無検証で信じるのは危ういと分かりました。私の手元のプロンプトでも、まず両方投げて比べるつもりです。

マスクなしの編集は、毎回キャンバス全体が描き直されます。背景の写真は微妙に再レンダリングされ続けるので、絶対に動かしたくない領域があるなら mask を渡すしかありません。丁寧なプロンプトでは代替になりません。


移行手順と、月額がどう変わるか

前節までで、費用・速度・品質の材料がそろいました。あとは自分のワークロードに当てはめて決めるだけです。この節では判断の順序と、決めたあとの請求額を出します。

このセクションで分かること: どのモデルと quality を選ぶかの分岐と、月1万枚のときの金額差。

実務では次のように呼びます。参照画像を添える編集リクエストの形です。

from openai import OpenAI

client = OpenAI()

result = client.images.edit(
    model="gpt-image-2.5-flare",
    image=[open("base.png", "rb"), open("logo.png", "rb")],
    prompt="見出しだけを差し替える。ほかの要素は一切変更しない",
    size="1536x1024",
    quality="high",          # 旧 medium 相当
)

usage = result.usage         # 見積もりではなく実績を残す
print(usage.output_tokens, usage.input_tokens)

usage を必ずログに落としてください。計算機の値は見積もりであって、請求の根拠は応答に入っている実績値です。

月1万枚での差

1024x1024 を月1万枚生成する前提で、先ほどの Request を使って金額を出します。

VOLUME = 10_000
PLANS = [
    ("gpt-image-2 medium",        TOKENS_1024["gpt-image-2"]["medium"]),
    ("2.5 high 見た目そのまま",    TOKENS_1024["gpt-image-2.5"]["high"]),
    ("gpt-image-2 high",          TOKENS_1024["gpt-image-2"]["high"]),
    ("2.5 max 見た目そのまま",     TOKENS_1024["gpt-image-2.5"]["max"]),
    ("2.5 medium 読み替え忘れ",    TOKENS_1024["gpt-image-2.5"]["medium"]),
]
for label, tok in PLANS:
    print(f"{label:26s} ${Request(tok).usd * VOLUME:9,.2f}")
gpt-image-2 medium         $  526.80
2.5 high 見た目そのまま     $  526.80
gpt-image-2 high           $2,107.20
2.5 max 見た目そのまま      $2,107.20
2.5 medium 読み替え忘れ     $  131.70

fig5.png

見た目をそろえると、請求額は1セントも変わりません。今回の移行で得られるのは値下げではなく、同じ金額での待ち時間短縮です。安くしたいなら意図的に1段下げる。そのときは画質が落ちることを承知のうえで下げる。読み替え忘れで下がった $131.70 は、節約ではなく事故です。


トラブルシューティング

前節で移行の判断と金額を確定させました。あとは実際に切り替えたときに踏む地雷を先に潰しておきます。ここに挙げたのは、ラダーのズレとモデルIDの仕様から機械的に導ける失敗です。

症状 原因 対処
The model 'gpt-image-2.5' does not exist サフィックスがない -flare または -sunburst を付ける
請求額が半分以下に落ちた quality を読み替えていない mediumhighhighmax
構図が急に素朴になった 同上 同上
quality 'xhigh' is not supported gpt-image-2 に 2.5 の設定を渡した モデルIDを先に切り替える
呼び出しごとに請求額がばらつく quality: "auto" を使っている 明示指定に変える
タイムアウトが頻発しない代わりに待ちが長い 旧モデル基準の長いタイムアウト 実測レイテンシに合わせて短縮する
編集したら背景まで変わった マスクなしで全面再生成されている mask を渡す
Sunburst にしたのに品質が上がらない 生成のみの工程で使っている 編集工程だけに限定する

用語集

トラブルシューティング表で使った言い回しのうち、この分野に固有のものをまとめます。本文の初出箇所からここに戻ってこられるようにしてあります。

用語 意味
画像出力トークン 生成した画像の課金単位。解像度と quality で決まる
quality ラダー low から max までの描画予算の段階。今回2段ズレた
Flare 2.5 系の速度優先モデル。既定の選択肢
Sunburst 2.5 系の精度優先モデル。単価は同じで生成が遅い
ドリフト 編集時に指示していない領域まで変化してしまう現象
Batch タブ 料金ページの非同期処理用の価格。Standard の50%引き
usage 応答に含まれる実績トークン数。請求の根拠

まとめ

料金表を見ているだけでは、今回の変更は見えませんでした。見えたのは usage のトークン数を並べたときです。値下げも値上げもしていないのに請求額が動くとき、動いているのはたいていパラメータの意味のほうでした。

決めることは2つだけです。qualitymediumhighhighmax に読み替えること。そして Flare を既定にして、編集を重ねる工程だけ Sunburst と比べること。これで今日から移行できます。

学習ロードマップ

参考文献

  • Introducing ChatGPT Images 2.5 ─ OpenAI 公式発表、2026年9月8日。邦題訳: ChatGPT Images 2.5 のご紹介。レイテンシ最大50%削減と2モデルの位置づけの一次情報
  • Image prompting ─ OpenAI 開発者ドキュメント。邦題訳: 画像プロンプティング。Flare を小型モデル、Sunburst をベースモデルと説明している箇所
  • Pricing ─ OpenAI 料金ページ。邦題訳: 料金。Standard と Batch のタブが分かれている点に注意
  • How to Use GPT Image 2.5 ─ Tosea.ai による第三者計測、41リクエスト。邦題訳: GPT Image 2.5 の使い方。quality ラダーのズレとレイテンシ・ドリフトの計測元
  • GPT-Image-2.5 Flare vs Sunburst vs gpt-image-2 ─ API ツール企業 Apidog の解説。邦題訳: Flare と Sunburst と gpt-image-2 の比較。Batch タブ誤読の指摘と Arena スコアの引用元

関連記事


図の生成と金額計算に使ったスクリプトは記事内のコードで完結しています。手元の枚数を VOLUME に入れ替えれば、そのまま自分の見積もりになります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?