top of page

GPT Image 2 API 実践ガイド ― キャラクター画像生成からマルチターン編集まで



OpenAIは2026年4月21日(現地時間)、次世代の画像生成モデル「ChatGPT Images 2.0」(API名:gpt-image-2)をリリースしました。AICU AIDX Labの調査によると、ChatGPTだけでなく、APIでも利用できる gpt-image-2 は、DALL·E 3の後継ではなくまったく別のアーキテクチャのようです。テキスト→画像の一方通行ではなく、参照画像を渡してキャラクターの一貫性を保ったり、会話を重ねて画像を磨き込んだりできます。本記事ではAPIドキュメントの全仕様を網羅しつつ、AICUメンバーのキャラクター画像生成を実際に試しながら解説します。



[CM]GPT-Image-2は次回のAICUマガジンでも特集します!


実際の表紙とは異なる可能性があります!



まず知っておくべきこと ― 2つのAPI



GPT Image 2にアクセスする方法は2系統あります。



Image API(v1/images/generations と v1/images/edits)



1枚のプロンプトから1枚(または `n` パラメータで複数枚)の画像を得るならこちら。シンプルで高速です。



  • images.generate ― テキストプロンプトだけで画像生成。`prompt` は文字列のみ(配列不可)

  • images.edit ― 参照画像を渡して新しい画像を生成、またはマスクで部分編集



ポイントは `images.edit` の名前に惑わされないこと。「編集」だけでなく参照画像付きの新規生成にも使います。キャラクター画像を渡して「この子をカフェに配置して」と頼む場合、エンドポイントは `images.edit` です。



Responses API(`v1/responses`)



画像生成を「ツール」として持つ会話APIです。Image APIにない機能が3つあります。



1. マルチターン編集 ― `previous_response_id` を渡すだけで、前回生成した画像の文脈を保持したまま次の指示を出せます。「背景を変えて」「もう少し明るく」という反復が自然にできます。


2. プロンプト自動改善 ― `gpt-5.5` などのメインラインモデルが画像生成ツールを呼ぶ際、プロンプトを自動的にリライトします。改善結果は `revised_prompt` フィールドで確認可能。


3. `action` パラメータ ― `"auto"`(モデル判断)、`"generate"`(常に新規生成)、`"edit"`(常に編集)から選べます。コンテキストに画像がない状態で `"edit"` を指定するとエラーになるので注意。



どちらを選ぶか迷ったら――1枚生成するだけなら Image API、対話的に磨き込むなら Responses API。



キャラクター画像生成の実践



基本:リファレンス画像を1枚渡す



`images.edit` にキャラクターの参照画像を渡し、プロンプトでシーンを指定します。



ElenaBloom_ref.png (AICU Japanの著作物です)

from openai import OpenAI

import base64

client = OpenAI()


result = client.images.edit(

model="gpt-image-2",

image=open("ElenaBloom_ref.png", "rb"), # キャラクター参照

prompt="Elena Bloom sitting at a late-night café, coding on a laptop, "

"warm amber lighting, cinematic composition. "

"No text or letters in the image.",

size="1024x1024",

quality="high",

)


image_bytes = base64.b64decode(result.data[0].b64_json)

with open("elena_cafe.png", "wb") as f:

f.write(image_bytes)


実際に生成した結果がこちらです。リファレンス画像のElena Bloom(ピンクツインテール、薔薇の髪飾り)の外見を保ちつつ、深夜カフェのシーンが構築されています。




重要な注意点: 参照画像が透過PNG(RGBA)の場合、APIがエラーを返すことがあります。事前にRGB変換しておきましょう。


from PIL import Image

img = Image.open("reference.png").convert("RGBA")

bg = Image.new("RGB", img.size, (255, 255, 255))

bg.paste(img, mask=img.split()[3])

bg.save("reference_rgb.png")


応用:デュアルリファレンスで「キャラ+ロゴ」を合成


`images.edit` の `image` パラメータには最大10枚の画像を渡せます。1枚目をキャラクター参照、2枚目をロゴや背景素材にして、プロンプトで各画像の役割を明示するとうまくいきます。



AICU-Japan-A.png
AICU-Japan-A.png


result = client.images.edit(

model="gpt-image-2",

image=[

open("elena_ref.png", "rb"), # 1枚目: キャラクター参照

open("AICU-Japan-A.png", "rb"), # 2枚目: AICUのAロゴ

],

prompt="1枚目の画像はキャラクター参照です。このキャラクターの外見を維持してください。"

"2枚目の画像はAICUのAロゴです。キャラクターがこのロゴを胸の前で持っている構図。"

"X/Twitterアイコンに適した正方形構図。テキストや文字は含めない。",

size="1024x1024",

quality="high",

)



実際にElena Bloom(ピンクツインテール)とAICUのAロゴで試した結果です。キャラクターの外見を維持しながら、2枚目のロゴを持つ構図が生成されました。






マルチターンで磨き込む(Responses API)


1回の生成で完璧にならなくても、Responses APIなら会話を続けて改善できます。


# Turn 1: 最初の生成

response = client.responses.create(

model="gpt-5.5",

input="Elena Bloom standing at a Tokyo Game Show booth, "

"presenting a demo on a large screen",

tools=[{"type": "image_generation"}],

)


# Turn 2: 前回の結果を踏まえて修正

response2 = client.responses.create(

model="gpt-5.5",

previous_response_id=response.id, # これだけで文脈を引き継ぐ

input="背景にもっと来場者を増やして、ステージライトを追加して",

tools=[{"type": "image_generation"}],

)



`previous_response_id` を渡すだけで、APIが前回の画像と指示の文脈を保持してくれます。アプリ側で画像を再送する必要はありません。


マスクで部分編集

生成した画像の一部だけを書き換えたい場合、マスク画像を使います。


マスクの仕様:


  • 透明(alpha=0)のピクセル → 編集する領域

  • 不透明(alpha=255)のピクセル → そのまま保持する領域

  • 編集対象の画像とマスクは同じサイズ・同じフォーマットで、50MB未満

  • マスク画像にはアルファチャンネルが必須

  • 複数の入力画像がある場合、マスクは1枚目に適用される


白黒画像からマスクを作る場合はPillowでアルファチャンネルを付加します。


from PIL import Image

mask = Image.open("mask_bw.png").convert("L")

mask_rgba = mask.convert("RGBA")

mask_rgba.putalpha(mask) # グレースケール値をそのままアルファに

mask_rgba.save("mask_alpha.png")



GPT Imageのマスク処理はプロンプトベースです。マスクの形状を厳密にトレースするのではなく、ガイドとして使われます。


ストリーミング ― 生成途中のプレビュー


Image APIとResponses APIの両方で、生成途中の画像をストリームで受け取れます。`partial_images` パラメータに0〜3を指定します。


stream = client.images.generate(

prompt="A river made of white owl feathers through a winter landscape",

model="gpt-image-2",

stream=True,

partial_images=2, # 途中経過を最大2枚受信

)


for event in stream:

if event.type == "image_generation.partial_image":

idx = event.partial_image_index

image_bytes = base64.b64decode(event.b64_json)

with open(f"preview_{idx}.png", "wb") as f:

f.write(image_bytes)



SlackやWebのUIでプログレス表示を作る場合に有用です。ただし各パーシャル画像に100出力トークンが追加課金されます。


テキストだけで生成(`images.generate`)


参照画像が不要な場合は `images.generate` が使えます。ブログカバーやイベントバナーなど、キャラクター一貫性が不要な画像に最適です。




curlで直接叩く


ライブラリなしで試したい場合のcurlコマンドです。


テキストから生成(`images.generate`):


curl -X POST "https://api.openai.com/v1/images/generations" \

-H "Authorization: Bearer $OPENAI_API_KEY" \

-H "Content-Type: application/json" \

-d '{

"model": "gpt-image-2",

"prompt": "Anime girl with pink twin tails holding a glowing A logo",

"size": "1024x1024",

"quality": "high"

}' | jq -r '.data[0].b64_json' | base64 --decode > output.png



参照画像付き生成(`images.edit`、multipart/form-data):


curl -X POST "https://api.openai.com/v1/images/edits" \

-H "Authorization: Bearer $OPENAI_API_KEY" \

-F "model=gpt-image-2" \

-F "image[]=@elena_ref.png" \

-F "image[]=@logo.png" \

-F "prompt=1枚目はキャラクター参照。2枚目のロゴを持っている構図。" \

-F "size=1024x1024" \

-F "quality=high" \

| jq -r '.data[0].b64_json' | base64 --decode > result.png



`image[]` を複数回指定すると複数の参照画像を渡せます(最大10枚)。


サイズの制約と選び方


`gpt-image-2` は固定サイズではなく、以下の制約を満たす任意の解像度を受け付けます。


  • 最大辺は 3840px 以下

  • 両辺とも 16pxの倍数

  • 長辺と短辺の比率は 3:1 以内

  • 総ピクセル数は 655,360 以上 8,294,400 以下


よく使うサイズの目安:


  • `1024x1024` ― SNSアイコン、正方形コンテンツ。生成が最速

  • `1536x1024` ― ブログカバー、横長バナー

  • `1024x1536` ― ポートレート、スマートフォン壁紙

  • `2048x2048` ― 高解像度印刷物

  • `3840x2160` ― 4K背景(実験的)

  • `auto` ― モデルがプロンプトに応じて最適サイズを選択(デフォルト)


2560x1440(約370万ピクセル)を超えるサイズは実験的扱いです。正方形が最も高速に生成されます。


品質とコスト


`quality` パラメータは `low` / `medium` / `high` / `auto` から選択。`auto`(デフォルト)ではモデルがプロンプトに応じて判断します。


gpt-image-2 の料金(出力トークンベース)

`gpt-image-2` では画像出力がトークン単位で課金されます。同じサイズでも非正方形の方がトークン数が少なくなる場合があります。


  • 1024x1024 / low → $0.006

  • 1024x1024 / medium → $0.053

  • 1024x1024 / high → $0.211

  • 1536x1024 / low → $0.005

  • 1536x1024 / medium → $0.041

  • 1536x1024 / high → $0.165


これに加えて、入力テキストのトークン料金と、`images.edit` で参照画像を渡す場合はビジョン入力トークンが加算されます。`gpt-image-2` は参照画像を常に高忠実度で処理するため、編集リクエストの入力トークンは多めになります。


旧モデルとの比較


GPT Image 1.5 / 1 / 1 Mini はレガシーの固定料金体系です。


  • GPT Image 1 ― 1024x1024 / high で $0.167

  • GPT Image 1 Mini ― 1024x1024 / high で $0.036

  • GPT Image 1.5 ― 1024x1024 / high で $0.133


gpt-image-2のhighは旧モデルより高額ですが、lowは$0.005〜0.006と圧倒的に安価。下書きやイテレーションでは `low` を使い、最終出力だけ `high` にするのが実用的です。


レイテンシのコツ


  • `quality: "low"` は最速。サムネイル確認やプロンプトの試行錯誤に

  • 出力フォーマットを `jpeg` にすると `png` より高速

  • `output_compression` パラメータで JPEG/WebP の圧縮率を 0〜100% で指定可能

  • 複雑なプロンプトは最大2分かかることがある

  • 正方形サイズが最速


Nano Banana 2 との使い分け


AICUではGeminiベースの Nano Banana 2(`/aicuty banana`)も併用しています。同じプロンプト「深夜のカフェでコードを書いている」を両方に与えると、違いが明確です。


Nano Banana 2 はプロンプトを感情・表情に解釈します。「カフェ」というキーワードから「ふーん(不機嫌)」の表情スタンプを生成。Slackリアクションやコミュニケーション向き。




gpt-image-2 はプロンプト通りのシーンを構築します。実際にカフェの中でコーディングしているイラストが出力されます。記事カバー、イベントレポート、SNS投稿画像向き。




実装で詰まりやすいポイント


`prompt` に配列を渡すとエラー


Error: Invalid type for 'prompt': expected a string, but got an array instead.



`images.generate` は文字列専用。参照画像を渡すなら `images.edit` を使う。


`max_tokens` → `max_completion_tokens`

`gpt-5.5` では `max_tokens` パラメータが廃止されています。プロンプト強化などで chat.completions を呼ぶ場合は `max_completion_tokens` に置き換えてください。


RGBA参照画像のエラー

キャラクター参照画像が透過PNGだとエラーになることがあります。白背景RGB変換を挟みましょう(前述のコード参照)。


マスクにアルファチャンネルがない

白黒JPEGをマスクとして渡すとエラー。PNGでアルファチャンネルを持たせる必要があります。


プロンプトが長すぎる

URLや記事本文をそのまま貼ると1,000文字を超えてエラーになることがあります。要約してから渡しましょう。


制限事項


公式ドキュメントに記載されている制限です。


  • レイテンシ ― 複雑なプロンプトは最大2分かかる

  • テキスト描画 ― 大幅に改善されたが、正確なテキスト配置はまだ苦手

  • キャラクター一貫性 ― リファレンス画像を渡しても、複数回の生成で完全に同一の外見を維持するのは難しい場合がある

  • 構図制御 ― レイアウト指定や要素の正確な配置は完全ではない

  • 透過背景 ― `gpt-image-2` は現時点で `background: "transparent"` 非対応

  • コンテンツモデレーション ― `moderation` パラメータで `"auto"`(デフォルト)または `"low"`(緩和)を指定可能

  • API Organization Verification ― GPT Imageモデルの使用前に、デベロッパーコンソールから組織認証が必要な場合がある


Claude Code からの画像生成


GPT Image 2はブラウザやSlack Botだけでなく、Claude Codeのターミナルからも直接使えます。`/gpt-image2` スキルにキャラクター参照画像を同梱しておけば、プロンプトを指定するだけでキャラクター一貫性のある画像が生成されます。


/gpt-image2 elena 何度でも眺めていられるXアイコン --size 1024x1024



ブログのカバーアート、記事の挿絵、SNS投稿画像――執筆中にターミナルを離れることなく画像を用意できます。


まとめ ― プロンプト1回で終わらない画像生成へ


`gpt-image-2` と Responses APIは「プロンプトを書いて1枚生成する」ワークフローを変えます。


  • リファレンス画像 ― `images.edit` に最大10枚の参照画像を渡せる。キャラクター+ロゴ+背景素材を同時に指定可能

  • マルチターン ― `previous_response_id` で会話を繋ぎ、「もう少し明るく」「背景を変えて」が積み上がる

  • コスト最適化 ― `low` で$0.005から試せる。イテレーションは `low`、最終出力だけ `high`

  • ストリーミング ― 生成途中のプレビューでUI体験を向上

  • Nano Banana 2 との併用 ― 表情スタンプはNano Banana 2、シーン構築はgpt-image-2


画像生成AIは「1枚ガチャ」の時代から、対話しながら磨き上げる時代に入っています。



GPT-Image-2は次回のAICUマガジンでも特集します!





Originally published at note.com/aicu on Apr 28, 2026.

記事の続きは…

aicu.jp を定期購読してお読みください。

 
 
 
bottom of page