画像生成APIの「品質ティア」は等間隔ではない — 移行時に静かに一段下がる話
画像生成APIを本番に載せていると、quality パラメータは「とりあえず high」で
固定されがちです。読み物としては地味ですが、この一行がモデルを乗り換えた瞬間に
意味を変えることがあります。しかも、エラーにも警告にもなりません。
この記事は特定のモデルの宣伝ではなく、ティア名という文字列を跨いで運ぶと何が起きるか
という一般論です。最後に実例として GPT Image 2.5 の数字を置きます。
1. ティア名は「相対的なラベル」であって「絶対的な品質」ではない
多くの画像生成APIは low / medium / high のような列挙型で品質を指定します。
ここで見落としやすいのは、この列挙型はモデルごとに再定義されるという点です。
high が指しているのは「このモデルの中で上から数えて何番目か」であって、
「何ピクセル相当の計算量を使うか」ではありません。だからモデルが世代交代して
ティアが5段階に増えると、同じ high という文字列が前の世代の medium の
計算予算に対応する、ということが普通に起きます。
# 世代をまたいでこの一行を持ち越すと、名前は同じでも中身が変わりうる
resp = client.images.generate(model=MODEL, prompt=p, quality="high")
型は通ります。バリデーションも通ります。請求額だけが下がり、出力品質も下がる。
気づくきっかけが「なんとなく絵が甘くなった」しかないのが、この問題の厄介なところです。
2. 段差は等間隔ではない — ここが投資判断の本体
もうひとつの誤解が「ティアを1つ上げれば、品質も価格も1段ぶん上がる」という
線形イメージです。実際には段差の幅はバラバラで、費用対効果が最も高い一段と、
ほとんど無意味な一段が混在します。
一般化すると、だいたいこういう形になります。
| 区間 | ありがちな実態 |
|---|---|
| 最下位 → 中位 | 解像感が明確に変わる。ここをケチると用途が限られる |
| 中位 → 上位 | 段差が最大。価格も跳ねるが、見た目の改善も一番大きい |
| 上位 → 最上位付近 | 価格差は小さいのに、差が出る題材が限られる |
| 最上位 | 特定の題材(細かい文字、緻密なテクスチャ)でのみ効く |
つまり「予算が許すから最上位」は、たいてい払い過ぎです。
面白いことに、OpenAI自身のプロンプトガイドにも
「高い設定にすれば必ず良い結果になるとは限らない」という趣旨の注意書きがあります。
ベンダー側が「常に最上位を使え」と言っていないのに、実装側が固定で最上位を
選んでいる、という構図はわりとよく見ます。
3. 実務としてどう決めるか
私が勧める順番はシンプルです。
(a) 用途を2つに割る。 画面表示(サムネイル、SNS、ブログ挿絵)と、
印刷・拡大前提(ポスター、商品画像の拡大表示)。前者は中位で十分なことが多く、
後者だけ上位に倒す。全部を一律で上げる必要はありません。
(b) 自分のプロンプト集で実測する。 ベンチマークの平均値ではなく、
自分が実際に投げている10本で比較してください。ティアの効きは題材依存です。
人物のクローズアップと、細い文字が入った図版では、効く段が違います。
(c) 1枚あたりの単価に直してから比較する。 トークン課金のAPIは
「1枚いくら」を公式には出しません(出せません、というほうが正確です)。
解像度・ティア・出力枚数でトークン数が変わるので、自分で割り算して表を作る
必要があります。これをやらないまま「上位ティアは高い」と体感で語ると、
だいたい間違えます。
# 最低限これだけ記録しておけば、あとから単価表が作れる
log = {
"model": resp.model, # 実際に走ったモデルID(指定値ではなく応答値)
"quality": quality,
"size": size,
"input_tokens": resp.usage.input_tokens,
"output_tokens": resp.usage.output_tokens,
"elapsed_ms": elapsed,
}
ポイントは resp.model を応答から取ること。
リクエストに書いた文字列ではなく、実際に応答したモデルIDを記録します。
エイリアスやルーティングが挟まると、この2つは一致しないことがあります。
4. 実例:GPT Image 2.5 の場合
2026年9月に出た GPT Image 2.5 は、前世代の3つの価格帯を維持したまま、
そのあいだに2段挿し込んで5段にしました。結果として:
- 段差が最も急なのは
medium→high - 逆に
high→xhighは、5段の中で最も安い一段 - そして前世代から
quality: "high"をそのまま持ち越すと、
新しいhighは旧medium相当の予算に落ちる。旧highは今のmax
つまり冒頭の「静かに一段下がる」が、実際に起きる構成になっています。
移行時にやるべきことは一つで、ティア名ではなく予算で対応表を作り直すことです。
この5段の内訳と、どの段が払う価値のある段なのかは
xhigh と max の比較ページ
に整理してあります。1枚あたりの実測コストは
ティアごとの実測コストを並べた表
のほうにあります。公式ドキュメントがトークン単位でしか書けない部分を、
こちらで割り算して埋めた、という位置づけの表です。
なお、これらのページを置いている
GPT Image 2.5 Image Generator は
OpenAIとは無関係の第三者インターフェースです(OpenAI公式ではありません)。
出力ごとに実際に走ったモデルID・ティア・サイズ・所要時間を表示する、
という点だけがこのサイトの存在理由で、本記事の趣旨もそこから来ています。
まとめ
- ティア名はモデル内の相対ラベル。世代を跨ぐと同じ文字列の意味が変わる
- 段差は等間隔ではない。一番高い段が一番お得とは限らない
- 判断は自分のプロンプト10本の実測で。単価表は自分で作るしかない
- 記録するのは応答に入っていたモデルID。リクエストの指定値ではない
移行のときに quality を機械的にコピーしていないか、一度だけ確認する価値はあります。
落ちても誰も教えてくれない種類の変更なので。