はじめに
2026年4月21日、OpenAIはAI画像生成の新モデル「GPT-Image-2」を搭載した「ChatGPT Images 2.0」を公式発表しました。前作GPT Image 1.5から大きく進化した点は、O-seriesベースの「推論(Thinking)」機能を画像生成に統合したことです。
本記事では、GPT-Image-2の技術仕様・API実装方法・料金体系を解説します。
APIアクセス(
gpt-image-2)は2026年5月に提供開始予定です(TechCrunch報道)。本記事のコードサンプルはリリース後を想定した実装例です。
この記事で学べること
- GPT-Image-2の主要機能(推論モード・Web検索・マルチ生成)
- Python SDKを使ったgpt-image-2の実装方法
- GPT Image 1.5との料金・性能比較
- ストリーミング生成・画像編集の実装パターン
対象読者
- OpenAI APIでの画像生成に取り組むエンジニア
- GPT Image 1.5からの移行を検討している方
- AI画像生成の最新技術動向を把握したい方
前提条件
- OpenAI APIキー(
OPENAI_API_KEY環境変数に設定済み) -
openaiPython SDK v1.x
pip install openai --upgrade
TL;DR
- GPT-Image-2はO-series推論を内蔵した初の画像生成モデル
- 生成前にプロンプトを推論・Web検索して品質を最大化
- 最大8枚の同時生成・最大3840×2160の2K解像度に対応
- API名は
gpt-image-2。generationsとeditsの2エンドポイントで利用予定(2026年5月提供開始予定) - 高解像度はGPT Image 1.5より値下げ、標準解像度は値上げ
GPT-Image-2の概要
推論モード(Thinking)とは
GPT-Image-2の最大の特徴は、O-seriesの推論能力を画像生成パイプラインに組み込んだことです。画像を生成する前に、モデルが以下のような「思考」プロセスを実行します。
- プロンプトの意図解析: ユーザーの指示を深く解釈し、構図・スタイル・色彩を決定
- Web検索: 必要に応じてリアルタイムでWebを検索し、参照情報を取得
- 自動プロンプト改善: 最適な結果になるよう、元のプロンプトを内部で精緻化
- レイアウト計画: テキスト・要素の配置を生成前に論理的に計画
この推論プロセスにより、以下の課題を克服しています:
| 課題 | GPT Image 1.5 | GPT-Image-2 |
|---|---|---|
| 複雑なテキスト描画 | 誤字・歪み多発 | 99%以上の正確率(公式発表) |
| 非ラテン文字 | 不安定 | 日本語・韓国語・ヒンディー語等に対応 |
| 複雑な構図 | 要素の重複・欠落 | レイアウト事前計画で改善 |
| 一貫性のある複数画像 | 各画像が独立 | 最大8枚を一貫したスタイルで生成 |
主なユースケース
- インフォグラフィック・スライド生成(テキスト埋め込みが必要な素材)
- 多言語対応のマーケティング素材
- UI/UXモックアップのプロトタイピング
- 複数バリエーションの同時比較生成
APIの基本実装
テキストから画像生成
import os
import base64
from openai import OpenAI
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
# 基本的な画像生成
result = client.images.generate(
model="gpt-image-2",
prompt="日本語で「AIの未来」と書かれたモダンなビジネス資料の表紙。"
"青色のグラデーション背景、白文字、クリーンなフラットデザイン。",
size="1536x1024", # 横長(16:9相当)
quality="high", # "low" | "medium" | "high" | "auto"
n=1, # 生成枚数(1〜8)
response_format="b64_json",
)
# 画像をファイルに保存
image_bytes = base64.b64decode(result.data[0].b64_json)
with open("output.png", "wb") as f:
f.write(image_bytes)
print("画像生成完了")
パラメータ一覧
| パラメータ | 型 | 説明 | デフォルト |
|---|---|---|---|
model |
str | "gpt-image-2" |
- |
prompt |
str | 画像の説明文 | 必須 |
size |
str | 解像度(後述) | "1024x1024" |
quality |
str |
"low" / "medium" / "high" / "auto"
|
"auto" |
n |
int | 生成枚数(1〜8) | 1 |
response_format |
str |
"url" / "b64_json"
|
"b64_json" |
output_format |
str |
"png" / "jpeg" / "webp"
|
"png" |
moderation |
str |
"auto" / "low"
|
"auto" |
サポートする解像度
gpt-image-2は16ピクセルの倍数で自由にサイズを指定できます。主要なプリセットは以下の通りです:
| サイズ | 用途 |
|---|---|
1024x1024 |
スクエア(SNSアイコン等) |
1536x1024 |
横長(プレゼンスライド等) |
1024x1536 |
縦長(スマートフォン壁紙等) |
2048x1152 |
広角横長(バナー等) |
3840x2160 |
最大解像度の例(UHD相当) |
解像度の最大短辺は128px以上、最大長辺は3840px以下、アスペクト比は3:1以内という制約があります(公式ドキュメント参照)。
複数画像の同時生成
GPT-Image-2は1回のAPIコールで最大8枚の画像を生成できます。同一プロンプトから複数バリエーションを生成する際に有効です。
# 同一プロンプトから4バリエーションを生成
result = client.images.generate(
model="gpt-image-2",
prompt="A futuristic smart city at night with glowing neon signs and autonomous vehicles",
size="1536x1024",
quality="medium",
n=4, # 4枚同時生成
)
for i, image_data in enumerate(result.data):
img_bytes = base64.b64decode(image_data.b64_json)
with open(f"city_{i+1}.png", "wb") as f:
f.write(img_bytes)
print(f"{len(result.data)}枚の画像を生成しました")
ストリーミング生成
partial_images パラメータを使うと、生成中の途中経過画像をリアルタイムで受け取れます。高解像度画像の生成中にプログレスバーを表示するなど、UX改善に活用できます。
# ストリーミングで段階的に画像を取得
with client.images.generate(
model="gpt-image-2",
prompt="An intricate Japanese garden with cherry blossoms and a traditional tea house",
size="2048x1152",
quality="high",
partial_images=3, # 完成前に3回中間画像を送信(100トークン/回の追加コスト)
stream=True,
) as stream:
for event in stream:
if event.type == "image_generation.partial_image":
# 途中経過の画像を保存
img_bytes = base64.b64decode(event.b64_json)
with open(f"partial_{event.partial_image_index}.png", "wb") as f:
f.write(img_bytes)
print(f"中間画像 {event.partial_image_index} を受信")
elif event.type == "image_generation.completed":
# 完成画像を保存
img_bytes = base64.b64decode(event.b64_json)
with open("final.png", "wb") as f:
f.write(img_bytes)
print("生成完了")
partial_imagesを使用すると、プレビュー画像1枚につき100トークンが追加で課金されます(公式ドキュメント参照)。
画像編集(Edits)
既存画像を入力として、指定した変更を加えた画像を生成できます。
# 既存画像を編集
with open("original.png", "rb") as img_file:
result = client.images.edit(
model="gpt-image-2",
image=img_file,
prompt="背景を夜空に変更し、星を追加してください。人物はそのままで。",
size="1024x1024",
quality="high",
)
img_bytes = base64.b64decode(result.data[0].b64_json)
with open("edited.png", "wb") as f:
f.write(img_bytes)
マスクを使って特定エリアのみ編集することも可能です:
# マスクを使用した部分編集
with open("original.png", "rb") as img_file, \
open("mask.png", "rb") as mask_file: # 透明部分が編集対象
result = client.images.edit(
model="gpt-image-2",
image=img_file,
mask=mask_file,
prompt="マスクされた空の部分に夕焼けの雲を追加",
size="1024x1024",
quality="medium",
)
料金体系
画像単価(per-image課金)
gpt-image-2の公式料金はOpenAI API Pricingから確認できます:
| Quality | 1024×1024 | 1024×1536 | 1536×1024 |
|---|---|---|---|
| Low | $0.006 | $0.005 | $0.005 |
| Medium | $0.053 | $0.041 | $0.041 |
| High | $0.211 | $0.165 | $0.165 |
GPT Image 1.5との比較
| サイズ | Quality | GPT Image 1.5 | GPT-Image-2 | 変化 |
|---|---|---|---|---|
| 1024×1024 | High | $0.133 | $0.211 | +58% |
| 1024×1536 | High | $0.200 | $0.165 | -17% |
| 1024×1024 | Medium | - | $0.053 | 新設 |
| 1024×1024 | Low | - | $0.006 | 新設 |
標準解像度(1024×1024)は値上がりしていますが、高解像度(1024×1536)は値下がりしており、大判ビジュアル制作ではコスト削減になります。
トークン課金
大量処理にはトークン課金の計算も必要です(公式Pricing参照):
| カテゴリ | 入力 | 出力 |
|---|---|---|
| テキストトークン | $5 / 1M tokens | $10 / 1M tokens |
| 画像トークン | $8 / 1M tokens | $30 / 1M tokens |
実装例: バッチ処理で効率化
大量の画像を生成する場合は、並列処理で効率化できます:
import asyncio
from openai import AsyncOpenAI
async_client = AsyncOpenAI()
async def generate_image(prompt: str, index: int) -> bytes:
result = await async_client.images.generate(
model="gpt-image-2",
prompt=prompt,
size="1024x1024",
quality="medium",
)
return base64.b64decode(result.data[0].b64_json)
async def batch_generate(prompts: list[str]):
tasks = [generate_image(p, i) for i, p in enumerate(prompts)]
images = await asyncio.gather(*tasks)
for i, img_bytes in enumerate(images):
with open(f"batch_{i:03d}.png", "wb") as f:
f.write(img_bytes)
print(f"{len(images)}枚を並列生成完了")
# 実行
prompts = [
"春の桜並木、青空、日本の公園",
"未来都市の空中庭園、夕暮れ",
"モダンなコーヒーショップのインテリア",
]
asyncio.run(batch_generate(prompts))
GPT Image 1.5からの移行ガイド
既存のGPT Image 1.5実装からの移行は、モデル名の変更のみで対応できます:
# 変更前
result = client.images.generate(
model="gpt-image-1.5", # 旧モデル
prompt="...",
)
# 変更後
result = client.images.generate(
model="gpt-image-2", # 新モデル
prompt="...",
# quality, size等のパラメータは同一のまま使用可能
)
注意点
- 透明背景(transparent)は非対応:GPT-Image-2は不透明背景のみサポート。透明背景が必要な場合はGPT Image 1.5を継続使用してください
-
標準解像度のコスト増:1024×1024 highが$0.133 → $0.211に値上がり。コスト重視の場合は
quality="medium"への変更を検討 - APIキーとエンドポイントは変更不要:既存のOpenAIクライアント設定はそのまま利用可能
まとめ
GPT-Image-2(ChatGPT Images 2.0)のポイントをまとめます:
- 推論モード内蔵: O-series ThinkingによりWeb検索・プロンプト改善を自動実行
- テキスト描画の革新: 日本語・韓国語・ヒンディー語等の非ラテン文字に対応
- 2K解像度: 最大3840×2160まで対応(16px倍数でカスタム指定可)
- 最大8枚同時生成: バリエーション比較や大量素材生成に活用可能
- 移行コスト最小: モデル名変更だけで既存コードから移行可能
高解像度ビジュアル・多言語テキスト描画・構図の複雑なインフォグラフィック生成において、GPT Image 1.5から大幅に進化しています。
参考リンク
- OpenAI: Introducing ChatGPT Images 2.0 — 公式発表ブログ
- OpenAI API: Image Generation Guide — gpt-image-2のAPIリファレンス
- OpenAI API Pricing — 最新料金表
- TechCrunch: ChatGPT's new Images 2.0 model is surprisingly good at generating text — リリース速報
- The Decoder: ChatGPT Images 2.0 is a breakthrough — 技術解説