見出し画像

ChatGPT Images 2.5 続報:APIの2.5で作っても記録は「2.0」、そして落書きはAIに描かせた

前回、ChatGPT Images 2.5 で作った画像の来歴情報(C2PA)を読んだら、softwareAgent の欄が gpt-image 2.0 のままだった、という話を書きました。あのときは「この欄は版を追うのか、それとも世代の区切りしか書かないのか」が決められませんでした。ChatGPTの画面からはモデルを選べず、API側の開発者画面(Playground)にも2.5系のモデルが並んでいなかったからです。

それから3日経って、Playgroundを開き直したら2.5系が生えていました。

生えた🌱

5ドルだけ追加課金して、前回できなかった実験をやります。ついでに、前回の記事に「ポーズだけ変えたいときはどうなるのか」「線と意図の扱いを分けて見たい」というコメントをもらったので、後者に答える実験もかんたんに足しました。落書きをAIに描かせて、スケッチ機能に流し込む実験です。


1. 3日で生えたモデル一覧と、7枚で数セント

9月9日の時点で、Playgroundのモデル一覧は chatgpt-image-latest、gpt-image-1、gpt-image-1-mini、gpt-image-1.5、gpt-image-2、gpt-image-2-2026-04-21 の6つでした。9月12日に開くと、そこに gpt-image-2.5-flare と gpt-image-2.5-sunburst、それぞれの日付付き(-2026-09-08)が加わって10個になっていました。公式には8日に出ていたものが、自分のアカウントで選べるようになるまで数日の差があった、ということです。

料金ページを見ると、2.5系は画像入力が100万トークンあたり8ドル、出力が30ドルで、gpt-image-2(4ドルと15ドル)のちょうど倍です。倍と聞くと身構えますが、1024×1024、品質は3段階のいちばん下のlowで1枚出すぶんには誤差のような額でした。今回は同じプロンプトで7モデル分、計7枚を出しました。出した直後、利用状況の画面には0.01ドルと表示されていましたが、公式のモデルページにある1枚あたりの単価(gpt-image-1のlowで0.011ドル、chatgpt-image-latestで0.009ドルなど)から計算すると、7枚で1セントに収まるはずがありません。表示の反映が遅れていたか、集計の範囲が違っていたようです。数時間経って確認したところ、0.06ドルになっていました。

プロンプトは、あとで別の実験に使い回せるよう、立ち絵にしました。「全身が入った立ち絵。黒髪ショートの若い女性が正面を向いて立っている。白いシャツにネイビーのスカート。両腕は体の横に自然に下ろす。背景は無地の薄いグレー。アニメ調のイラスト。」です。サイズと品質と出力形式(PNG)は7回とも同じで、変えたのはモデルの選択だけです。

7モデルの出力を並べたもの。
上段の4つ(1系とlatest)は頭か足が切れていて、下段の3つ(2系)は全身が収まっている

並べてみると、まず絵の出来が世代でくっきり割れました。gpt-image-1、1-mini、1.5、そして chatgpt-image-latest の4枚は、「全身が入った」と頼んだのに頭か足が画面の外に出ています。gpt-image-2、2.5-flare、2.5-sunburst の3枚は、余白を取って全身が収まっている。flareとsunburstの違いは、1枚ずつでは何とも言えません。flareは膝丈のソックスにローファー、sunburstも似た構図で細部だけ違い、gpt-image-2はスカートが長めでパンプスでした。

🔗Pricing | OpenAI API

2. APIの2.5で作っても、記録は2.0

ある種本題です。OpenAIの生成画像には、PNGの中の caBX という区画にC2PAの来歴情報が署名付きで入っていて、そこに softwareAgent という「どのソフトが作ったか」を書く欄があります。7枚それぞれの原本のPNGからこれを取り出し、name と version を読みました。方法は前回と同じで、macOSのターミナルなら次の1行です。

LC_ALL=C grep -a -o 'softwareAgent.\{0,40\}' 画像ファイル.png
7モデルと、ChatGPTの画面から作った画像、4月20日の画像の記録を並べた表

gpt-image-2.5-flare も gpt-image-2.5-sunburst も、記録は gpt-image の 2.0 でした。APIで明示的に2.5を選んで作った画像でも、2.5とは書かれません。gpt-image-2 も同じ2.0です。つまりこの欄は、2と2.5を区別しません。

いっぽうで、gpt-image-1、1-mini、1.5 の3つと chatgpt-image-latest は、そろって pre-2.0 という別の文字列でした。1.5でも「1.5」とは書かれない。この欄が取りうる値は、今日の時点で pre-2.0 と 2.0 の2つしか確認できていません。版番号ではなく、2.0を境にした世代の旗として書かれている、と読むのが適当です。前回の記事では、gpt-image-2が出る前日の4月20日にChatGPTで作った画像を読んで、name が GPT-4o で version というキー自体が無かったと書きました。それを含めると、この欄は「GPT-4o、欄なし」「pre-2.0」「2.0」の3段階で変わってきたことになります。断っておくと、C2PAの仕様で softwareAgent は「その操作を行ったソフトウェア」を書く欄で、OpenAIがここを世代の目印として使うと公表しているわけではありません。今回のサンプルで言えるのは、世代の変わり目では書き換わり、2.0から2.5のような小さい版の違いは追わなかった、というところまでです。前回の推測と合う結果でした。

透かしの記録も、pre-2.0 と 2.0 の境目と重なっています。2.0と書かれた画像(2、2.5-flare、2.5-sunburst、それにChatGPTの画面から作った画像)には、電子透かしを入れたという記録(c2pa.watermarked)があり、pre-2.0 の4枚にはありません。前回、4月20日の画像に透かしの記録が無かったと書いた話とも一致します。ただし、これは c2pa.watermarked という記録の有無であって、画像に実際に透かしが入っているかどうかとは別の話です。OpenAIはC2PAとは別に、画素に埋め込む不可視の透かし(SynthID)も使っていると説明しているので、記録が無いことだけから透かしが無いとは言えませんし、9月12日に旧モデルを呼んで得た画像から導入時期を決めることもできません。

意外だったのは chatgpt-image-latest です。名前からすると、ChatGPTが今使っているモデルを指す別名に見えます。ところが記録は pre-2.0 で、透かしの記録も無く、絵も上段の1系と同じく頭が切れていました。ChatGPTの画面から今日作った画像は2.0と記録され、透かしの記録もあるので、この別名とChatGPTの中身は別物です。公式のモデルページを見に行くと、chatgpt-image-latest の説明は「以前ChatGPTで使われていた画像モデル」で、API用途には 2.5 Sunburst を勧めていました。名前はlatestのまま、中身は前のものです。

ここから、冒頭に書いた「この欄は版を追うのか」という問いに答えが出ます。ChatGPTの画面で作った画像が2.0と記録されていることは、画面の裏で2.0が動いている証拠にはならないし、2.5が動いている証拠にもなりません。APIの2.5でも2.0と書かれるのだから、この欄からは判別できない。それだけです。

なお、5月24日にChatGPTの画面で作った画像が手元に残っていたので、同じ手順で読みました。gpt-image-2が出て1か月後の画像で、記録は gpt-image 2.0、透かしの記録あり。今日の画面で作ったものと同じで、手元にある2点のあいだでは記録に変化がありません。

🔗Introducing ChatGPT Images 2.5 | OpenAI

🔗Image generation | OpenAI API

🔗chatgpt-image-latest | OpenAI API

3. 落書きをAIに描かせて、スケッチ機能に流し込む

前回、スケッチ機能に子どもの落書きを渡して「スケッチで渡せるのは線であって、こちらの意図ではない」と書きました。それに対して、キャラクターを残すことと指定した部分を変えることは別々に見たい、というコメントをもらいました。もっともな話で、前回の実験は「線が拾われるか」しか見ていません。線が拾われるのは分かったので、今回は「線と文をどう分担させると意図が通るか」を見ます。

落書きは自分では描かず、Claude(Fable 5.1)に描かせました。理由は2つあって、ひとつは同じ線を「画像として添付する」「スケッチ機能で描く」の2通りで渡す必要があり、手描きだと2回目が同じにならないこと。もうひとつは、AIがAIに落書きを渡すとどうなるか、単純に見たかったからです。Claudeは灯台の絵を描きました。中央に縞のある塔、左に帆かけ舟、右に棒人間、右上に丸と十字の星、下に波線という、線だけ見れば子どもの絵です。

Claudeが描いた落書き。これが2つの経路の共通の入力
Claude内蔵ブラウザからChatGPTにアクセス

渡し方は2通りです。経路Aは、この落書きをPNG画像として添付する。経路Bは、ChatGPTのスケッチ機能を開いて、キャンバスに同じ線を引き直す。経路Bの線引きもClaudeにやらせました。Claudeにはブラウザを操作する機能があるので、それでChatGPTを開かせました。Claudeはスケッチのキャンバスに、色を切り替えながら100本余りの直線を引いて、同じ灯台を再現しました。人間が手で写すより、こちらのほうが忠実です。

プロンプトも2通り用意しました。ひとつは前回と同じ中立の文で、「この落書きから連想できるフォトリアルな画像を作ってください。」だけ。もうひとつは、その文の後ろに意図を足したものです。場面は日没直後の海辺で薄い霧、塔は古い石造りの灯台で光は霧の中を掃く、人物は雨合羽を着た年配の灯台守でランタンを手に灯台を見上げる、船は港へ戻る小さな漁船、月と星が出ていてフィルムで撮った写真の質感。線に無いものだけを文にして、線が示すもの(配置、本数、形)は文で繰り返していません。線と文のどちらが勝つかを見るための設計です。

2経路と2プロンプトの組み合わせで、4枚できました。以下、添付画像をA、スケッチ機能をB、中立プロンプトを1、意図つきを2として、A1のように呼びます。

落書きと4枚の比較。
上段が中立プロンプト、下段が意図つきプロンプト。左が添付画像、右がスケッチ機能

4枚とも、配置は落書きどおりでした。塔が中央、船が左、人物が右、丸いものが右上、光線は右へ。線が決めた構図は、経路にもプロンプトにも揺らされていません。前回の「線は写し取られる」が、そのまま再現されました。

中立プロンプトの2枚(A1とB1)は、同じ線から違う時刻の絵が出ました。添付画像のA1は青空の真昼で、右上の丸は太陽になり、十字で描いた星は消えました。スケッチ機能のB1は夕焼けで、こちらも丸は太陽です。どちらも「丸と星」を夜とは読まず、丸を太陽と決めて星を捨てている。線には夜を表す情報が無いので、そこは推測で埋められたようです。

意図つきの2枚(A2とB2)は、文で足したものが全部入りました。日没直後の薄暗さ、霧、石造りの塔、霧を掃く光の帯、雨合羽の男性がランタンを持って灯台を見上げる姿、左には港へ戻る漁船、右上に月と星。しかも塔の位置、船が左、人が右、月が右上という落書きの配置はそのまま保たれています。今回の4枚では、線が配置を決め、文がその中身を足す、という分担に見えました。前回書いた「線であって意図ではない」は、少なくともこの例では、意図を文で添えれば埋まりました。

ひとつだけ、経路で違いが出た箇所があります。灯台のオレンジの帯です。添付画像のA1では白い塔に赤茶の帯がきれいに入り、A2でも錆色の帯として残っています。スケッチ機能のB1とB2では帯が消えて、白一色の塔と石造りの塔になりました。キャンバスに引いた線にも同じ位置に同じオレンジの帯があるので、入力の差ではありません。1回ずつなので断定はしませんが、添付画像は「絵として」色まで読まれ、スケッチは「指示として」線の配置だけ読まれる、という扱いの違いがあるように見えます。ここは追試の余地があります。

まとめ

softwareAgent の version 欄は、2.5を書きません。APIで2.5を選んだ画像も2.0と記録され、1系は全部 pre-2.0 でした。今回確認した範囲では、この欄が示しているのは2.0を境にした世代の区切りだけです。前回「2.0という値から確実に言えるのは、OpenAIがこの欄に書いた名前が2.0だった、というところまで」と留保した部分が、そのまま正しかったことになります。ChatGPTの画面から出た画像が2.0と記録されているのは、画面の裏が2.0だからでも2.5だからでもなく、この欄がそうとしか書かないからでした。

そして chatgpt-image-latest は、名前に反して、公式の説明でも「以前ChatGPTで使われていた」モデルで、記録も pre-2.0 でした。latestという語を信じてこれを使っている人がいたら、一度自分の画像の記録を読んでみてください。7枚で数セントの実験です。

スケッチ機能のほうは、今回の4枚に限れば、線が配置を、文が中身を受け持つ、という分担がはっきり出ました。落書きに意図は乗らないが、文を添えれば線を壊さずに意図が通る。ポーズだけ変えたいときにどうなるか、というもうひとつのコメントには、まだ答えていません。それは次の実験にします。

いいなと思ったら応援しよう!