GPT Image 2 API 完全ガイド(Python、Node.js、Curl)
2026/04/23

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 の動作実装が手元に残っているはずです。

前提条件

始める前に必要なもの:

  1. OpenAI 開発者アカウント(platform.openai.com
  2. 入金済みの請求アカウント(画像生成は有料、新規アカウントには試用クレジットが付くことがあります)
  3. API キー(platform.openai.com/api-keys で発行)
  4. 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 pillow

pillow は任意。返ってきた画像を後処理する場合のみ必要です。

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
  }'

全パラメータの解説

パラメータ必須説明
modelstring必須常に gpt-image-2
promptstring必須画像の説明、最大32,000文字
sizestring任意アスペクト比(1:116:99:16 など)または明示的なピクセル値(1024x10241536x10241024x1536
resolutionstring任意1K(約1 MP)/2K(約4 MP)/4K(約8 MP)。一部のリレーで明示的な解像度制御に使用
qualitystring任意lowmediumhigh。出力トークン数とコストに影響
ninteger任意1リクエストあたりの画像数、1〜10
image_urlsarray任意画像編集/image-to-image 用の参照画像 1〜16枚(各 50MB 以下、JPEG /PNG /WEBP)
output_formatstring任意png(デフォルト)、jpegwebp
output_compressioninteger任意0〜100、jpeg/webp 専用
backgroundstring任意transparent でアルファチャネル付き PNG
moderationstring任意auto(デフォルト)または low(高速だが厳しめのフィルタリング)
callback_urlstring任意完了コールバックを受け取る HTTPS エンドポイント(非同期リレー用)
userstring任意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-limitSemaphore
  • 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.editimage パラメータを渡すか、対応リレーで 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 が対応する解像度は? 代表的なプリセット:1024x10241536x10241024x1536。一部のリレーは 1K / 2K / 4K の解像度レベルを提供しています。

Q:レート制限は? OpenAI のティアに依存します。Free ティアが一番厳しく、利用量に応じてティアが上がります。p-limitSemaphore で同時実行を制限し、上限以下に保つようにしてください。

Q:GPT Image 2 API のエラーはどう処理する? 4xx(リトライしない、たいていコンテンツポリシー違反)と 5xx(指数バックオフでリトライ)を区別します。上のエラーハンドリングセクションを参照してください。

Q:実行中の GPT Image 2 API リクエストをキャンセルできる? 同期リクエストでは接続を切るしかありません。非同期対応リレーでは、タスクがキュー中の間に呼べる cancel エンドポイントが用意されています。

Q:API はストリーミング対応? 画像生成自体はストリーミングされません(最後に完成画像が返ります)。進捗 UI が必要な場合は、上の「ストリーミング進捗」セクションのようにバッチに進捗レポーターを巻き付けてください。

動くサンプルアプリが見たい?

Next.js + GPT Image 2 + Stripe + 画像ストレージのフルリファレンス実装を見たい方は gpt-image2.artexplore ページ(実出力例)をご覧ください。

SLA 付きのマネージド API キーが必要?

アカウント開設、請求、地域問題、レート制限調整をすべてスキップしたい場合は、support@gpt-image2.art にメールしてマネージド GPT Image 2 API キーを購入できます。提供するもの:

  • 内蔵フェイルオーバー付きの安定 API エンドポイント1本
  • 現地通貨での請求集約(USD 海外送金不要)
  • 非同期タスクモード+コールバックサポート標準搭載
  • 月10K 枚以上を生成するチーム向けボリュームディスカウント
  • 公式 API と同じ gpt-image-2 モデル名・パラメータ仕様で、コード差し替え不要

関連記事

Free to try

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.