Simon WillisonがChatGPT Images 2.0を検証した記事を読んで、正直「これは自分のコードに関係がある話だ」と思った。
OpenAIがgpt-image-2をリリースした。Sam Altmanはライブストリームで「gpt-image-1からgpt-image-2へのジャンプは、GPT-3からGPT-5へのジャンプに相当する」と言い切った。かなり強気な発言だけど、実際の検証を見ると納得感がある。
検証方法がちょっと面白くて、「ハム無線を持ったアライグマを探せ」というWhere's Waldoスタイルの画像を各モデルに生成させている。複雑なイラストにテキストと細部を同時に盛り込む必要があるから、モデルの総合力が出やすい。
gpt-image-1の結果はアライグマが見つけられないレベルで混入している。Claude Opus 4.7に画像を解析させても「いるはずだけど見つけられない」と言わせてしまうほど。一方でGeminiのNano Banana 2は「Amateur Radio Club」ブースにアライグマを堂々と配置していて、すぐ見つかる。難易度が低すぎる。
gpt-image-2はどうか。通常品質では逆にアライグマが不在という結果だった。ただ、outputQualityをhighにして解像度を3840x2160に上げると、かなり密度の高いWhere's Waldo画像が生成された。左下に見つけやすいアライグマがいる。
ここが自分として一番気になった部分。高品質・最大解像度で1枚生成したとき、13,342 output tokensを消費した。料金は$30/1Mトークンなので、1枚あたり約40セント(約60円)かかっている。
自分が今関わっているプロダクトにも画像生成を組み込む話があって、そのコスト感覚を掴んでおきたかった。40セント/枚は、ユーザーが気軽に叩けるエンドポイントに置くには重い。バッチ処理向けか、プレミアムプランの機能として切り出すかの判断が必要になってくる。
ちなみにOpenAIのPythonクライアントライブラリはまだgpt-image-2に対応していないけど、モデルIDのバリデーションをしていないから直接文字列で渡せば動く。こういう「公式対応前でも使える」情報はXで流れてきても埋もれがちなので、一次ソースを追う価値がある。
もう一つ気になったのは、生成した画像をモデル自身に解かせることの信頼性の低さ。Where's Waldoの画像をChatGPTに「アライグマを赤丸で囲んで」と頼んだら、ハズレの箇所を丸で囲んでしまったという話が記事にある。生成能力と理解能力は別物として扱うべきだと改めて思った。
画像生成APIの検証を自分でもやろうと思っていたけど、まずはopenai_image.pyをフォークしてoutputQualityとサイズを切り替えながらコストを計測するスクリプトを書くところから始める。本番に組み込む前にトークン消費のばらつきを把握しておきたい。
OpenAIがgpt-image-2をリリースした。Sam Altmanはライブストリームで「gpt-image-1からgpt-image-2へのジャンプは、GPT-3からGPT-5へのジャンプに相当する」と言い切った。かなり強気な発言だけど、実際の検証を見ると納得感がある。
Where's Waldoスタイルで複数モデルを比較した結果
検証方法がちょっと面白くて、「ハム無線を持ったアライグマを探せ」というWhere's Waldoスタイルの画像を各モデルに生成させている。複雑なイラストにテキストと細部を同時に盛り込む必要があるから、モデルの総合力が出やすい。
gpt-image-1の結果はアライグマが見つけられないレベルで混入している。Claude Opus 4.7に画像を解析させても「いるはずだけど見つけられない」と言わせてしまうほど。一方でGeminiのNano Banana 2は「Amateur Radio Club」ブースにアライグマを堂々と配置していて、すぐ見つかる。難易度が低すぎる。
gpt-image-2はどうか。通常品質では逆にアライグマが不在という結果だった。ただ、outputQualityをhighにして解像度を3840x2160に上げると、かなり密度の高いWhere's Waldo画像が生成された。左下に見つけやすいアライグマがいる。
コストの話を無視できない
ここが自分として一番気になった部分。高品質・最大解像度で1枚生成したとき、13,342 output tokensを消費した。料金は$30/1Mトークンなので、1枚あたり約40セント(約60円)かかっている。
自分が今関わっているプロダクトにも画像生成を組み込む話があって、そのコスト感覚を掴んでおきたかった。40セント/枚は、ユーザーが気軽に叩けるエンドポイントに置くには重い。バッチ処理向けか、プレミアムプランの機能として切り出すかの判断が必要になってくる。
# openai_image.pyのオプション参考
OPENAI_API_KEY="$( llm keys get openai )" \
uv run openai_image.py \
-m gpt-image-2 \
--quality high --size 3840x2160 \
"プロンプトをここに"ちなみにOpenAIのPythonクライアントライブラリはまだgpt-image-2に対応していないけど、モデルIDのバリデーションをしていないから直接文字列で渡せば動く。こういう「公式対応前でも使える」情報はXで流れてきても埋もれがちなので、一次ソースを追う価値がある。
自分のプロダクトにどう反映するか
もう一つ気になったのは、生成した画像をモデル自身に解かせることの信頼性の低さ。Where's Waldoの画像をChatGPTに「アライグマを赤丸で囲んで」と頼んだら、ハズレの箇所を丸で囲んでしまったという話が記事にある。生成能力と理解能力は別物として扱うべきだと改めて思った。
画像生成APIの検証を自分でもやろうと思っていたけど、まずはopenai_image.pyをフォークしてoutputQualityとサイズを切り替えながらコストを計測するスクリプトを書くところから始める。本番に組み込む前にトークン消費のばらつきを把握しておきたい。