
GPT Image 2 API 完全ガイド(Python、Node.js、Curl)
GPT Image 2 API の統合ガイド完全版。認証、パラメータ、Python /Node.js のコード例、画像編集、バッチ生成、エラーハンドリング、コスト最適化を網羅。
GPT Image 2 を自社プロダクト、自動化パイプライン、バッチ生成ワークフローに組み込むなら、API が唯一の方法です。本ガイドでは必要なすべてをカバーします——認証、パラメータ、Python と Node.js のコード例、画像編集、エラーハンドリング、そしてコスト最適化。
読み終える頃には、本番トラフィックを捌ける GPT Image 2 の動作実装が手元に残っているはずです。
前提条件
始める前に必要なもの:
- OpenAI 開発者アカウント(platform.openai.com)
- 入金済みの請求アカウント(画像生成は有料、新規アカウントには試用クレジットが付くことがあります)
- API キー(platform.openai.com/api-keys で発行)
- Python 3.8+ または Node.js 18+(使う SDK に応じて)
本番チーム向けの安定 API アクセス
OpenAI への直接接続が不安定な地域にチームがある、あるいはフェイルオーバーや請求集約、SLA を1本のリレーで担保したい場合は、support@gpt-image2.art までご連絡ください。マネージドな GPT Image 2 API キーを発行します。リレーは同じ gpt-image-2 モデル名、同じパラメータ仕様、同じレスポンス形式に対応しているため、コードを書き換える必要はありません。
ステップ1:SDK のインストール
Python
pip install openai pillowpillow は任意。返ってきた画像を後処理する場合のみ必要です。
Node.js
npm install openai
# or
pnpm add openaiステップ2:API キーを設定
API キーをハードコードしてはいけません。環境変数を使いましょう。
.env ファイルを作成:
OPENAI_API_KEY=sk-proj-your-key-hereコード側でロード(Python なら python-dotenv、Node.js はネイティブまたは dotenv で読み込み)。
ステップ3:最初の画像を生成する
Python — 最小動作サンプル
import os
from openai import OpenAI
import base64
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
result = client.images.generate(
model="gpt-image-2",
prompt="A white stainless steel water bottle on a beige linen tablecloth, premium product photography, 1:1 aspect ratio.",
size="1024x1024",
quality="medium",
n=1,
)
# Image is returned as base64
image_b64 = result.data[0].b64_json
with open("output.png", "wb") as f:
f.write(base64.b64decode(image_b64))
print("Saved to output.png")Node.js — 最小動作サンプル
import OpenAI from 'openai';
import fs from 'fs';
const client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
const result = await client.images.generate({
model: 'gpt-image-2',
prompt:
'A white stainless steel water bottle on a beige linen tablecloth, premium product photography, 1:1 aspect ratio.',
size: '1024x1024',
quality: 'medium',
n: 1,
});
const imageB64 = result.data[0].b64_json;
fs.writeFileSync('output.png', Buffer.from(imageB64, 'base64'));
console.log('Saved to output.png');Curl — シェルスクリプト/クイックテスト用
curl https://api.openai.com/v1/images/generations \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "A white stainless steel water bottle on a beige linen tablecloth.",
"size": "1024x1024",
"quality": "medium",
"n": 1
}'全パラメータの解説
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
model | string | 必須 | 常に gpt-image-2 |
prompt | string | 必須 | 画像の説明、最大32,000文字 |
size | string | 任意 | アスペクト比(1:1、16:9、9:16 など)または明示的なピクセル値(1024x1024、1536x1024、1024x1536) |
resolution | string | 任意 | 1K(約1 MP)/2K(約4 MP)/4K(約8 MP)。一部のリレーで明示的な解像度制御に使用 |
quality | string | 任意 | low、medium、high。出力トークン数とコストに影響 |
n | integer | 任意 | 1リクエストあたりの画像数、1〜10 |
image_urls | array | 任意 | 画像編集/image-to-image 用の参照画像 1〜16枚(各 50MB 以下、JPEG /PNG /WEBP) |
output_format | string | 任意 | png(デフォルト)、jpeg、webp |
output_compression | integer | 任意 | 0〜100、jpeg/webp 専用 |
background | string | 任意 | transparent でアルファチャネル付き PNG |
moderation | string | 任意 | auto(デフォルト)または low(高速だが厳しめのフィルタリング) |
callback_url | string | 任意 | 完了コールバックを受け取る HTTPS エンドポイント(非同期リレー用) |
user | string | 任意 | OpenAI の不正検知用に使う安定したユーザー ID |
画像編集 — キラーフィーチャー
GPT Image 2 の directed editing(指向性編集)は、拡散モデルに対する最大の API 上の優位性です。既存の画像と「何を変えるか」を記述したプロンプトをアップロードします。
Python
result = client.images.edit(
model="gpt-image-2",
image=open("original.png", "rb"),
prompt="Change the bottle's color from white to navy blue. Keep everything else identical.",
size="1024x1024",
quality="medium",
)
with open("edited.png", "wb") as f:
f.write(base64.b64decode(result.data[0].b64_json))Node.js
import { toFile } from 'openai';
const result = await client.images.edit({
model: 'gpt-image-2',
image: await toFile(fs.createReadStream('original.png'), 'original.png'),
prompt:
"Change the bottle's color from white to navy blue. Keep everything else identical.",
size: '1024x1024',
quality: 'medium',
});プロンプトに 「Keep everything else identical」 と入れるのは決定的に重要です。これがないと、モデルは無関係な領域まで描き直してしまうことがあります。
レート制限に配慮したバッチ生成
100リクエストをナイーブに Promise.all() してはいけません——レート制限を喰らいます。同時実行数を制限しましょう。
Python — asyncio とセマフォを使う
import asyncio
from openai import AsyncOpenAI
client = AsyncOpenAI(api_key=os.environ["OPENAI_API_KEY"])
async def generate_one(prompt: str, semaphore: asyncio.Semaphore):
async with semaphore:
result = await client.images.generate(
model="gpt-image-2",
prompt=prompt,
size="1024x1024",
quality="medium",
)
return result.data[0].b64_json
async def batch_generate(prompts: list[str], concurrency: int = 5):
semaphore = asyncio.Semaphore(concurrency)
tasks = [generate_one(p, semaphore) for p in prompts]
return await asyncio.gather(*tasks)
results = asyncio.run(batch_generate(["prompt 1", "prompt 2", ...]))Node.js — p-limit を使う
import pLimit from 'p-limit';
const limit = pLimit(5); // 5 concurrent requests
const tasks = prompts.map((prompt) =>
limit(async () => {
const result = await client.images.generate({
model: 'gpt-image-2',
prompt,
size: '1024x1024',
quality: 'medium',
});
return result.data[0].b64_json;
})
);
const results = await Promise.all(tasks);本番向けエラーハンドリング
API は何通りもの形で失敗します。それぞれ別々に扱いましょう。
from openai import OpenAI, APIError, RateLimitError, APIConnectionError, BadRequestError
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
def safe_generate(prompt: str, max_retries: int = 3):
for attempt in range(max_retries):
try:
result = client.images.generate(
model="gpt-image-2",
prompt=prompt,
size="1024x1024",
quality="medium",
)
return result.data[0].b64_json
except RateLimitError:
# 429 — wait and retry
wait = (2 ** attempt) * 5
print(f"Rate limited; waiting {wait}s")
time.sleep(wait)
except BadRequestError as e:
# 400 — usually a content policy violation, don't retry
print(f"Bad request: {e}")
return None
except APIConnectionError:
# network blip — retry
time.sleep(2 ** attempt)
except APIError as e:
# 500-level — retry with backoff
time.sleep(2 ** attempt)
return Noneコスト最適化 — 具体的な戦術
1. 適切な品質ティアを選ぶ
| ティア | 1024×1024 あたりのコスト | 使いどころ |
|---|---|---|
low | 約 $0.011 | 下書き、A/B テスト、プロンプト試行 |
medium | 約 $0.042 | 本番のほとんどのユースケース |
high | 約 $0.167 | 最終ヒーロー画像、印刷解像度のアセット |
多くのチームはデフォルトで high を使いすぎて払いすぎています。95%の業務は medium で十分です。
2. images.generate ではなく images.edit で反復する
指向性編集は生成と同じコストですが、5回試して当てる代わりに1回で正解にたどり着けます。複数回のリファインなら5倍のコスト削減です。
3. プロンプトが繰り返すときは決定的にキャッシュする
同じプロンプトを繰り返し生成する場合(ユーザー向けの商品プレビューなど)は、hash(prompt + size + quality) でキャッシュして CDN から配信しましょう。
4. プロンプト探索は low で行い、当たりだけ昇格
よくあるワークフロー:
# Step 1: try 5 prompt variants at low quality ($0.05 total)
candidates = [generate(p, quality="low") for p in variants]
# Step 2: pick the best, regenerate at high quality
best_prompt = pick_winner(candidates)
final = generate(best_prompt, quality="high") # $0.167合計コスト:約 $0.22。5バリアント全部を high で回した場合の約 $0.84 と比べて大幅節約です。
5. OpenAI ダッシュボードで上限を設定する
コードが絶対バグらないとは信じないこと。platform.openai.com/account/billing/limits で使用量上限を設定しておきましょう。
ストリーミング進捗(任意)
長時間のバッチでは進捗表示が欲しいことがあります。画像生成エンドポイントはストリーミングされませんが、バッチに非同期の進捗レポートを巻き付けることはできます。
let completed = 0;
const tasks = prompts.map((prompt) =>
limit(async () => {
const result = await client.images.generate({ /* ... */ });
completed++;
onProgress({ completed, total: prompts.length });
return result.data[0].b64_json;
})
);よくある統合ミス
| ミス | 起きること | 修正方法 |
|---|---|---|
| API キーをハードコード | Git 経由で漏洩 | 必ず環境変数を使う |
result.data[0].url に保存 | response_format によっては存在しないフィールド | b64_json をローカルでデコード |
| 巨大な画像を編集に送る | 遅い&高コスト | アップロード前に 1024×1024 にリサイズ |
| 400 エラーを無視 | 直しようがない失敗にリトライを浪費 | 4xx(リトライしない)と 5xx(リトライする)を区別 |
| レート制限ハンドリングなし | バーストで 429 連発 | セマフォで同時実行数を制限 |
| プロンプトを平文ログ出力 | ユーザー入力ならプライバシー違反 | ログ前にハッシュ化または編集 |
本番投入チェックリスト
GPT Image 2 統合をリリースする前に:
- API キーは環境変数、コードやログには絶対に書かない
- 用途に応じた品質ティア(デフォルトは
medium) - バッチジョブには同時実行数制限(
p-limit/Semaphore) - 4xx と 5xx を区別するエラーハンドリング
- OpenAI ダッシュボードでハード支出上限を設定
- ユーザー入力をコンテンツポリシー違反からサニタイズ
- 出力は自前のストレージに保存(OpenAI URL に頼らない)
- 繰り返しプロンプト用のキャッシュ層
- 1枚あたりコストとエラー率のモニタリング
非同期生成とタスクポーリング(高並行用)
大量本番ワークロード向けに、一部の GPT Image 2 リレーは 非同期タスクモデル を提供しています。リクエストを送るとすぐにタスク ID が返り、完了をポーリングするかコールバックを受け取ります。大規模バッチでの HTTP タイムアウト回避に有効です。
典型的な非同期フロー:
# 1. Submit request → get task_id
response = client.images.generate(
model="gpt-image-2",
prompt="...",
size="1024x1024",
quality="high",
callback_url="https://your-app.com/api/image-callback", # optional
)
task_id = response.id
# 2. Poll task status every few seconds
while True:
status = client.images.retrieve(task_id)
if status.status == "completed":
image_url = status.data[0].url
break
elif status.status == "failed":
raise Exception(status.error)
time.sleep(3)非同期モードが向いているシナリオ:
- 数百商品バリアントを夜間に生成する EC ストア
- A/B プロンプトテストを回すマーケチーム
- ユーザーが画像をリクエストして後で確認するアプリ(通知ベース)
GPT Image 2 API FAQ
Q:GPT Image 2 API のモデル名は?
gpt-image-2。すべてのリクエストでこの文字列をそのまま使ってください。
Q:GPT Image 2 API は image-to-image /画像編集に対応している?
はい。images.edit に image パラメータを渡すか、対応リレーで image_urls(1〜16枚の参照画像配列)を渡します。参照画像はキャラクター一貫性、IP デザイン、商品写真で必須です。
Q:GPT Image 2 API は無料? いいえ、トークン単位の有料です。新規 OpenAI アカウントには試用クレジットが付くことがあります。一部のサードパーティリレーも無料試用クレジットを提供しています。
Q:GPT Image 2 API の1枚あたりコストは? 1024×1024 で low / medium / high それぞれおよそ $0.011 / $0.042 / $0.167 です。サイズが大きい場合や参照画像があると追加コストになります。
Q:プロンプトの最大長は? 最大32,000文字。実務上は約1,500文字を超えると効果が逓減します。
Q:API で透過 PNG を生成するには?
background: "transparent" と output_format: "png" を指定します。
Q:GPT Image 2 が対応する解像度は?
代表的なプリセット:1024x1024、1536x1024、1024x1536。一部のリレーは 1K / 2K / 4K の解像度レベルを提供しています。
Q:レート制限は?
OpenAI のティアに依存します。Free ティアが一番厳しく、利用量に応じてティアが上がります。p-limit /Semaphore で同時実行を制限し、上限以下に保つようにしてください。
Q:GPT Image 2 API のエラーはどう処理する? 4xx(リトライしない、たいていコンテンツポリシー違反)と 5xx(指数バックオフでリトライ)を区別します。上のエラーハンドリングセクションを参照してください。
Q:実行中の GPT Image 2 API リクエストをキャンセルできる?
同期リクエストでは接続を切るしかありません。非同期対応リレーでは、タスクがキュー中の間に呼べる cancel エンドポイントが用意されています。
Q:API はストリーミング対応? 画像生成自体はストリーミングされません(最後に完成画像が返ります)。進捗 UI が必要な場合は、上の「ストリーミング進捗」セクションのようにバッチに進捗レポーターを巻き付けてください。
動くサンプルアプリが見たい?
Next.js + GPT Image 2 + Stripe + 画像ストレージのフルリファレンス実装を見たい方は gpt-image2.art とexplore ページ(実出力例)をご覧ください。
SLA 付きのマネージド API キーが必要?
アカウント開設、請求、地域問題、レート制限調整をすべてスキップしたい場合は、support@gpt-image2.art にメールしてマネージド GPT Image 2 API キーを購入できます。提供するもの:
- 内蔵フェイルオーバー付きの安定 API エンドポイント1本
- 現地通貨での請求集約(USD 海外送金不要)
- 非同期タスクモード+コールバックサポート標準搭載
- 月10K 枚以上を生成するチーム向けボリュームディスカウント
- 公式 API と同じ
gpt-image-2モデル名・パラメータ仕様で、コード差し替え不要
関連記事
images.generate ではなく images.edit で反復する3. プロンプトが繰り返すときは決定的にキャッシュする4. プロンプト探索は low で行い、当たりだけ昇格5. OpenAI ダッシュボードで上限を設定するストリーミング進捗(任意)よくある統合ミス本番投入チェックリスト非同期生成とタスクポーリング(高並行用)GPT Image 2 API FAQ動くサンプルアプリが見たい?SLA 付きのマネージド API キーが必要?関連記事他の記事

GPT Image 2 vs Nano Banana 2 vs Midjourney v7 (2026年版比較)
GPT Image 2 vs Nano Banana 2 vs Midjourney v7 — テキスト、ポスター、写真、コンセプトアートに最適なAI画像生成モデルはどれか?2026年の実践的な選び方ガイド。

GPT Image 2の商用利用は可能?著作権ガイド
GPT Image 2の商用利用完全ガイド。許可事項、著作権の帰属、Amazon/Etsy/Shopify/TikTokのルール、AI画像を安全に公開する方法を解説。

GPT Image 2 プロンプト作成ガイド:命中率90%を実現する7つのルール
200回以上の生成から導いた GPT Image 2 プロンプト作成の実戦ガイド。7つのルール、構造、キーワード、一発成功のためのアンチパターンまで網羅。
Generate your first image with GPT Image 2 — right now
Reliable non-Latin text rendering, directed editing, and 50+ ready-to-use prompts. No downloads — just open in your browser.