mcpField
O
openai-gpt-image

openai-gpt-image

github.com/calesthioクリエイティブ・メディア219111 回インストール15 週間前に更新
リポジトリ

openai-gpt-image について

openai-gpt-imageは、OpenAI GPT Imageで静止画を生成・編集するためのスキルです。画像APIの呼び出しや反復作業を管理する開発者やコンテンツチーム向けに、Image APIとResponses APIの選択、パラメーター、入力画像、レビュー手順を説明します。

主な機能

  1. 01単発APIと対話型APIの使い分け
  2. 02モデルと画像パラメーターの選択
  3. 03参照画像やマスクを使った編集
  4. 04素材の来歴記録と結果確認

活用シーン

  1. 01単一の呼び出しで画像を生成・編集
  2. 02対話を続けながら画像を修正
  3. 03画像内の文字、人物、ブランド要素を確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/calesthio/generative-media-skills --skill openai-gpt-image

インストール後、Claude Code で/openai-gpt-imageを入力して読み込まれたか確認します。

同梱ファイルEVAL.md

詳細

OpenAI GPT Imageで静止画像を生成する

OpenAIの静止画像の生成と編集には、このスキルを使用します。動画、アニメーション、音声、文字起こし、音楽の作業には使用しないでください。

根拠ラベルで記述を判断する

  • 文書化された事実とは、OpenAIが現在、その動作を文書化していることを意味します。
  • 実運用上のヒューリスティックとは、文書化された動作と実運用上のリスクに基づく、実践的なワークフローの推奨事項であり、APIの保証ではありません。
  • 推論とは、実際のワークロードで検証する必要がある、根拠に基づいた結論です。

モデル名、価格、制限、サポートされるパラメーター、地域ごとの提供状況、ポリシー、ライフサイクルの日付は変更される可能性があるものとして扱ってください。ユーザー向けに案内または引用する直前に、リンク先の公式情報を再確認してください。以下の変更される可能性がある情報は、2026-07-09に確認済みです。

記憶しているモデル名ではなく、現在のライフサイクルから始める

文書化された事実、2026-07-09に確認済み:

モデル現在の役割ライフサイクル/移行対応
gpt-image-2生成と編集における現在の本番環境向けデフォルト。エイリアスとスナップショット gpt-image-2-2026-04-21 を提供自動更新する場合はエイリアスを使用し、回帰テストの安定性が必要な場合はスナップショットを使用します。
gpt-image-1.5旧モデル非推奨。APIからの削除は 2026-12-01 に予定されています。gpt-image-2 に移行してください。
gpt-image-1旧モデル非推奨。APIからの削除は 2026-10-23 に予定されています。gpt-image-2 に移行してください。
gpt-image-1-miniGPT Image 1の低コスト版非推奨。APIからの削除は 2026-12-01 に予定されています。新たに依存先として採用しないでください。quality="low" を指定した gpt-image-2 をテストしてください。
dall-e-3、dall-e-2旧モデルからの移行に関する知識のみ非推奨で、APIからは 2026-05-12 に削除されました。置き換えてください。選択しないでください。

情報源:GPT Image 2モデルページ、全モデルカタログ、非推奨情報。

実運用上のヒューリスティック: 新しい作業では、デフォルトで gpt-image-2 を使用してください。既存のプロンプトとの移行比較を測定するために、非推奨のGPT Imageモデルを使用する場合は、その実行に必要な期間に限ってください。画像あたりの料金表が安く見えるという理由だけで、非推奨モデルを選択しないでください。

実運用上のヒューリスティック: 再現性が重要な場合は、gpt-image-2-2026-04-21 をテストして固定してください。継続的な改善を受けることを優先する場合は、gpt-image-2 を使用してください。正確な識別子、エンドポイント、パラメーター、プロンプト、ソース画像のハッシュ、出力メタデータをアセット台帳に記録してください。

使用するインターフェースを慎重に選ぶ

単一の操作にはImage APIを使用する

テキストから画像を生成するには POST /v1/images/generations を、編集、合成、参照画像に基づく生成、またはマスク編集には POST /v1/images/edits を使用します。GPT Imageモデルを明示的に選択してください。

リクエストが1つの操作で完結する場合、反復の状態をアプリケーション側で管理する場合、またはモデルを正確に指定することが重要な場合は、このインターフェースを選択してください。APIはGPT Imageモデルについて、画像データをbase64で返します。

会話形式の画像ワークフローには Responses API を使用する

組み込みの image_generation ツールに対応したメインラインモデルを使用し、ツールレベルの model に gpt-image-2 を設定します。これらは別々に選択します。トップレベルの Responses model が推論とオーケストレーションを行い、tools[].model が画像モデルを選択します。ターン間で画像コンテキストを引き継ぐには、previous_response_id、画像生成の呼び出し ID、ファイル ID、URL、またはデータ URL を使用します。意図を制御するには、action: "auto"、"generate"、または "edit" を使用します。コンテキストに画像がない状態で edit を強制すると、エラーになります。

モデルに会話のターンをまたいで推論させる場合、テキストと画像の入力を組み合わせる場合、または高忠実度の変更を段階的に適用する場合は、この方式を選択します。ツール呼び出しの revised_prompt を確認して記録します。画像生成の料金に加えて、メインラインモデルのトークン料金も考慮してください。

重要な違い: gpt-image-2 をトップレベルの Responses model として渡さないでください。モデルのページに画像生成が対応ツールとして記載された、現行のメインラインモデルを選択し、別途 tools[].model="gpt-image-2" を設定してください。ツールレベルのセレクターを省略すると、スキーマの古いデフォルトにフォールバックする場合があります。

記載されている事実: どちらの方式も、部分画像のストリーミングに対応しています。partial_images は 0 から 3 を受け付けます。最終画像は、要求したすべての部分画像より先に届く場合があります。各部分画像には、画像出力トークンが追加で 100 個かかります。ストリーミングはプレビューと最終結果の連続であり、最終画像の品質確認に代わるものではありません。

記載されている制約: 現行の画像ガイドには、リクエスト/レスポンスとサーバー送信イベントによるストリーミングが記載されていますが、専用の画像ジョブ ID/ポーリングエンドポイントは記載されていません。モデルと料金のページには、GPT Image 2 の Batch 対応と Batch 料金が記載されていますが、非同期の一括処理システムを設計する前に、現行の Batch エンドポイントの対象コントラクトを確認してください。画像のポーリング API をでっち上げないでください。

参照先:画像生成ガイド、Images API リファレンス、画像ストリーミングのリファレンス、Responses API。

生成前に本番向けの判断を行う

  1. 成果物について確認します。用途、対象者、アスペクト比または正確な寸法、必須の文言、ブランドまたはキャラクターに関する不変条件、バリエーション数、締め切り、レビュー担当者を確認してください。
  2. すべての入力画像、ロゴ、人物、キャラクター、アートワーク、参照画像について、権利と同意を確認します。不要な個人情報や機密情報をアップロードしないでください。
  3. 結果を顧客向けに使用する場合、またはコストが大きくなる場合は、モデルのページ、画像ガイド、料金、非推奨化の情報、ポリシーを再確認します。
  4. API の方式を選択します。直接的な操作を 1 回行う場合は Image API を、会話形式の推論と反復的な状態管理には Responses を使用します。
  5. 慣習ではなく、必要な出力に基づいてパラメーターを選択します。構図のテストには低品質のドラフトを使用し、承認済みの候補だけを高品質化してください。
  6. プロンプトを本番向けの仕様として記述します。変更する内容、不変の内容、成功の評価方法を明記してください。
  7. 役に立つ範囲で最小限のサンプルを生成します。サンプルの承認を、大量生成の承認へ暗黙に置き換えないでください。
  8. 最終データを直ちに保存し、可能であれば来歴を保持して、レスポンス/リクエストの識別子と使用量を記録します。
  9. 納品前に、正確な文言、事実に関する主張、本人性、幾何形状、ブランドの詳細、構図、安全性に照らして確認します。

現行のパラメーターで GPT Image 2 を制御する

寸法と品質

Images API の文書化された仕様(2026-07-09 に確認): gpt-image-2 は size="auto"、または以下のすべての制約を満たす任意の解像度を受け付けます。

  • 最大辺が 3840 ピクセル以下であること。
  • 縦横の辺がどちらも 16 の倍数であること。
  • 長辺と短辺の比率が最大でも 3:1 であること。
  • 総ピクセル数が 655,360 から 8,294,400 までであること。

一般的な有効サイズには、1024x1024、1536x1024、1024x1536、2048x2048、2048x1152、3840x2160、2160x3840 があります。総ピクセル数が 2560x1440 の範囲を超える出力は実験的なものとして文書化されており、結果のばらつきが大きくなる場合があります。通常、正方形が最も高速です。

Responses の image_generation ツールで使用できるスキーマは、より限定されています。auto、1024x1024、1024x1536、または 1536x1024 を使用してください。スキーマを再確認せずに、任意の Images API 解像度を Responses ツールの呼び出しに使用しないでください。

quality="low"、"medium"、"high"、または "auto" を使用してください。

  • 本番環境での経験則: コンセプト、レイアウト、トリミング、処理量をテストするには low を使用します。
  • 本番環境での経験則: 小さい文字や密集した文字、顔のクローズアップ、本人識別に関わる編集、複雑な図、最終的な高解像度アセットでは、medium と high を比較します。
  • 本番環境での経験則: 高品質を指定すれば、矛盾するプロンプトや厳密なレイアウトが修正されると思い込まないでください。まず仕様を修正してください。
出力形式と背景

GPT Image は base64 データを返します。output_format のデフォルトは png で、jpeg または webp も指定できます。JPEG または WebP の場合は、output_compression を 0 から 100 までの値に設定します。現行のドキュメントによると、JPEG は PNG より高速です。

文書化された仕様: gpt-image-2 は現在、透明な背景に対応していません。background="transparent" は指定しないでください。background="opaque" または "auto" を使用し、コントラストのある無地のマット背景で生成してください。アルファチャンネルが必要な場合は、後続の背景除去処理を使用してください。

以前の GPT Image エンドポイントの仕様では、対応モデルで透明な出力を利用できましたが、PNG または WebP が必須でした。ただし、これらのモデルは非推奨です。透明化だけを目的に、レガシー依存関係を新たに導入しないでください。

複数生成、モデレーション、ユーザー識別
  • n のデフォルトは 1 です。Images エンドポイントの仕様では 1 から 10 まで指定できます。承認済みのサンプル/バッチ計画で必要な数だけバリエーションを生成してください。
  • moderation="auto" は標準的なフィルタリング、moderation="low" はより制限の緩いフィルタリングです。ポリシーや出力チェックが無効になるわけではありません。
  • 不正利用の監視に適切な場合は、サポートされている user フィールドを通じてエンドユーザー識別子を渡してください。生の個人データは含めず、安定した仮名識別子を使用してください。
  • 複雑なプロンプトでは、処理に最大 2 分かかる場合があります。クライアントのタイムアウトとレート制限を明示的に処理してください。
画像入力と忠実度

編集エンドポイントは、1 枚以上の参照画像を受け付けます。現行のエンドポイントリファレンスでは、GPT Image のワークフローで、50 MB 未満の PNG、WebP、または JPEG 画像を最大 16 枚まで使用できると記載されています。Responses では、完全な URL、base64 データ URL、または purpose="vision" で作成した Files API ID を入力として使用できます。

現行ガイドのルール: gpt-image-2 はすべての画像入力を自動的に高忠実度で処理するため、input_fidelity は省略してください。これにより、入力画像のトークンコストが増加する場合があります。確認日時点では、Images の編集用スキーマと Responses のスキーマに、GPT Image 1、1.5、「およびそれ以降」向けの input_fidelity が記載されており、GPT Image 2 のコアガイドと矛盾しています。新しいコードではモデル固有のガイドに従って省略し、この矛盾が解消された場合は、使用するエンドポイントのスキーマを再確認してください。

移行に限り、gpt-image-1.5 と gpt-image-1 では、入力忠実度として low/high を指定できます。gpt-image-1-mini は、エンドポイントの仕様上、高い入力忠実度に対応していません。レガシーの input_fidelity="high" を GPT Image 2 のコードにコピーしないでください。古いファーストパーティの Cookbook スニペットには、今もこの指定を使っているものがあります。現行のコア画像ガイドに従ってください。

マスク

マスクは、変更する領域を指定します。GPT Image では、マスキングは引き続きプロンプトベースで行われ、輪郭に正確に沿わない場合があります。複数の入力がある場合、マスクは最初の画像に適用されます。

入力画像には PNG、WebP、JPEG を使用でき、最大 16 ファイル、各ファイル 50 MB 未満です。マスクの要件はより厳しく、4 MB 未満の PNG で、アルファチャンネルを含み、最初の入力画像と同じ寸法である必要があります。マスクは、JPEG/WebP 形式のソースと形式を合わせる必要はありません。マスクの完全に透明な領域は、編集が許可される場所を示します。呼び出しに料金を支払う前に、マスクの形式、バイトサイズ、寸法、アルファチャンネルをローカルで検証してください。

本番環境でのヒューリスティック: マスクがある場合でも、編集指示と不変条件のリストの両方を含めてください。ピクセル単位で正確なインペインティングを保証しないでください。意図した領域の外で変更されたピクセルを比較し、ずれがあれば却下してください。

出典:画像生成ガイド:編集、マスク、忠実度、出力、Images 編集エンドポイントのスキーマ。

プロンプトを視覚的な仕様として記述する

維持しやすい構文を選んでください。魔法のようなキーワードの並びより、明確さが重要です。複雑な作業では、次の順序でプロンプトを組み立てます。

  1. 意図する成果物と用途;
  2. 背景または場面;
  3. 主な被写体と動作;
  4. 構図、視点、余白;
  5. 媒体、素材、照明、色、仕上げ;
  6. 正確なテキストとタイポグラフィ;
  7. 変更点のリストと不変条件のリスト;
  8. 除外事項と合格基準。

文書化されているプロンプト作成の指針: 素材、形状、質感、媒体を具体的に指定してください。フレーミング、角度、配置、照明、雰囲気を明記してください。フォトリアリスティックな結果を求める場合は、photorealistic と指定するか、実際の写真撮影について説明してください。詳細なカメラ設定は、厳密な物理シミュレーションではなく、全体的な見た目の指針として扱ってください。

テキストを検証可能にする
  • 正確な文言を引用符で囲み、EXACT, verbatim とラベル付けします。
  • 表示回数を指定し、ほかの文言を追加しないよう明記します。
  • 階層、配置、フォントの種類、太さ、コントラスト、改行位置を指定します。
  • 一般的でないつづりについては、文字ごとのつづり方を示します。
  • 小さなテキスト、情報量の多いパネル、複数のフォントを使用する場合は、中または高品質を指定します。
  • レンダリングされた画像を確認してください。テキストの描画品質が向上しても、完璧になるとは限りません。法的な文言や、正確さが必須のタイポグラフィについては、テキストなしでアートを生成し、その後に組版してください。
編集範囲を絞る

次のように指示します:Change only X. Preserve A, B, C. Keep everything else unchanged. 重要な不変条件は、反復のたびに繰り返してください。必要に応じて、アイデンティティ、ポーズ、体の形状、カメラアングル、クロップ、照明の方向、影、背景のオブジェクト、ロゴ、ラベルの文言を固定してください。

複数の入力を明確にする

入力に番号を付け、名前を指定します:Image 1: base room; Image 2: chair reference; Image 3: fabric reference. それらを組み合わせる方法、配置、縮尺、遠近感、照明、重なり方、変更しない背景をどの画像に従うかを明記してください。入力の順序だけに頼らないでください。

一度に一つの変数だけを変更する

まず、余計な変更を加えない基本プロンプトを作成します。後続のプロンプトでは、クロップ、暖かみ、文言、個々のオブジェクトなど、調整可能な要素を一つだけ変更します。採用した各中間画像を保存してください。ずれが生じたら、劣化した派生画像を編集するのではなく、最後に採用した画像に戻してください。

出典:OpenAI GPT Image プロンプト作成ガイド。

例 1 — 出力処理を含む完全な直接生成

例であり、必須の定型ではありません。 目的:顧客向けポスターの候補を 2 つ作成し、バイト列を正確に保存して、リクエストのメタデータを記録します。前提条件:pip install --upgrade openai を実行し、OPENAI_API_KEY を設定します。

import base64
import json
from pathlib import Path

from openai import OpenAI

client = OpenAI()
out_dir = Path("outputs/poster")
out_dir.mkdir(parents=True, exist_ok=True)

prompt = """
Deliverable: vertical launch poster for an original neighborhood astronomy club.
Scene: deep navy night sky above a small hilltop observatory; two adults and one child
silhouetted at a telescope; generous dark negative space in the upper third.
Style: refined screen-print illustration, limited palette of navy, cream, and coral,
crisp paper texture, high contrast, no photorealism.
Copy (EXACT, verbatim, once only):
"SEE FARTHER TOGETHER"
Typography: bold geometric sans-serif, cream, centered in the upper third, clean kerning.
Constraints: original design; no existing logos, trademarks, watermarks, or extra text.
Acceptance: readable at phone size; all figures anatomically coherent; telescope intact.
""".strip()

result = client.images.generate(
    model="gpt-image-2",
    prompt=prompt,
    size="1024x1536",
    quality="medium",
    output_format="png",
    background="opaque",
    moderation="auto",
    n=2,
)

for index, item in enumerate(result.data, start=1):
    (out_dir / f"candidate-{index}.png").write_bytes(
        base64.b64decode(item.b64_json)
    )

metadata = {
    "model": "gpt-image-2",
    "request_id": getattr(result, "_request_id", None),
    "size": "1024x1536",
    "quality": "medium",
    "output_format": "png",
    "background": "opaque",
    "prompt": prompt,
    "count": len(result.data),
}
(out_dir / "request.json").write_text(
    json.dumps(metadata, indent=2, ensure_ascii=False), encoding="utf-8"
)

期待される結果:内容を読み取れない PNG の候補が 2 つ生成されます。コピーの正確さ、小さいサイズでの読みやすさ、余分なテキスト、端での切り抜き、手、望遠鏡の形状を確認してください。起こりやすい失敗:コピーのスペルミス、スローガンの重複、シルエットの描き込みすぎ、ネガティブスペースの不足です。バリエーション:まず quality="low" で構図を承認し、選んだ方向性で medium/high を指定して再生成します。

例 2 — 複数の参照画像を使った完全なマスク編集

例であり、必須の定型ではありません。 目的:製品の参照画像を使用しながら、部屋の椅子だけを置き換えます。必要なローカルファイル:room.png(ベース画像)、chair-reference.png、mask.png。マスクは 4 MB 未満の PNG で、room.png と同じ寸法でアルファチャンネルを含み、置き換え可能な椅子を透明領域で覆っている必要があります。

import base64
from contextlib import ExitStack
from pathlib import Path

from openai import OpenAI

client = OpenAI()
output = Path("outputs/room-chair-edit.png")
output.parent.mkdir(parents=True, exist_ok=True)

prompt = """
Image 1 is the base room and must control the camera, architecture, crop, and background.
Image 2 is the chair reference and controls the replacement chair's design and material.
Change only the chair inside the masked area of Image 1. Replace it with the chair from
Image 2 at believable scale and perspective. Match the room's light direction, color
temperature, contact shadow, and floor reflection.
Preserve exactly: walls, windows, flooring, rug, table, plants, camera angle, crop,
exposure, white balance, and every object outside the masked area.
Add no text, people, decor, logos, or watermarks.
""".strip()

with ExitStack() as stack:
    room = stack.enter_context(open("room.png", "rb"))
    chair = stack.enter_context(open("chair-reference.png", "rb"))
    mask = stack.enter_context(open("mask.png", "rb"))
    result = client.images.edit(
        model="gpt-image-2",
        image=[room, chair],
        mask=mask,
        prompt=prompt,
        size="1536x1024",
        quality="high",
        output_format="png",
        background="opaque",
        moderation="auto",
    )

output.write_bytes(base64.b64decode(result.data[0].b64_json))
print(f"saved {output}; request_id={getattr(result, '_request_id', None)}")

期待される結果:部屋を保ったまま、椅子が自然に置き換わります。マスクの外側の差分画像、椅子の形状、サイズ、影、床との接地を確認してください。起こりやすい失敗:マスクの縁のハロー、マスク外の変更、椅子の再デザイン、切り抜きの変更、照明の不整合です。修正するには、不変条件のリストとマスクをより厳密にし、失敗した結果ではなく元のベース画像から編集します。

例 3 — 会話形式での完全な生成と後続編集

例であり、必須の定型ではありません。 目的:Responses を使って、メインラインのモデルにビジュアルの会話を維持させます。この例では画像を作成し、修正後のプロンプトを記録してから、後続の変更を 1 つ加えます。

import base64
import json
from pathlib import Path

from openai import OpenAI

client = OpenAI()
out_dir = Path("outputs/conversation")
out_dir.mkdir(parents=True, exist_ok=True)

first = client.responses.create(
    model="gpt-5.5",
    store=True,  # Intentional: previous_response_id below depends on retained response state.
    input=(
        "Create a 1024x1024 editorial illustration for an article about urban heat. "
        "Show the same city block split into two readable halves: treeless asphalt on "
        "the left and shaded trees with a cool pedestrian area on the right. "
        "Flat cut-paper style, no text, no logos, no watermark."
    ),
    tools=[{
        "type": "image_generation",
        "model": "gpt-image-2",
        "action": "generate",
        "size": "1024x1024",
        "quality": "medium",
        "output_format": "png",
        "background": "opaque",
        "moderation": "auto",
    }],
)

first_calls = [x for x in first.output if x.type == "image_generation_call"]
if not first_calls:
    raise RuntimeError("No image_generation_call returned")
out_dir.joinpath("urban-heat-v1.png").write_bytes(
    base64.b64decode(first_calls[0].result)
)

second = client.responses.create(
    model="gpt-5.5",
    store=True,
    previous_response_id=first.id,
    input=(
        "Edit the existing illustration only: make the right-side tree canopy broader "
        "and add two bicycles under it. Preserve the split layout, buildings, palette, "
        "camera, cut-paper style, and the entire left half. Add no text."
    ),
    tools=[{
        "type": "image_generation",
        "model": "gpt-image-2",
        "action": "edit",
        "size": "1024x1024",
        "quality": "medium",
        "output_format": "png",
        "background": "opaque",
        "moderation": "auto",
    }],
)

second_calls = [x for x in second.output if x.type == "image_generation_call"]
if not second_calls:
    raise RuntimeError("No follow-up image_generation_call returned")
out_dir.joinpath("urban-heat-v2.png").write_bytes(
    base64.b64decode(second_calls[0].result)
)

out_dir.joinpath("tool-calls.json").write_text(json.dumps({
    "first_response_id": first.id,
    "first_call_id": first_calls[0].id,
    "first_revised_prompt": first_calls[0].revised_prompt,
    "second_response_id": second.id,
    "second_call_id": second_calls[0].id,
    "second_revised_prompt": second_calls[0].revised_prompt,
}, indent=2), encoding="utf-8")

期待される結果:最初の正方形のイラストと、そこから編集された画像が生成されます。起こりやすい失敗:左半分のずれ、オブジェクトの追加、編集ではなく新しい構図になることです。修正するには、action="edit" を維持し、不変条件を明示して、ずれが蓄積したら承認済みのレスポンスまたは画像に戻します。

この例では、Responses のアプリケーション状態保持を意図的に受け入れ、previous_response_id で最初のツール呼び出しを引き継ぎます。機密性の高い作業では、このパターンを選ぶ前に保持に関する判断を行ってください。store=false は承認済みの Zero Data Retention と同等ではなく、別のサポートされた方法でコンテキストを引き継ぐ必要があります。

例 4 — Image API による完全な部分画像ストリーム

例であり、必須の定型ではありません。 目的:最終画像を別に保存しながら、段階的にプレビューを表示します。部分画像を最終アセットとして出荷しないでください。

import base64
from pathlib import Path

from openai import OpenAI

client = OpenAI()
out_dir = Path("outputs/stream")
out_dir.mkdir(parents=True, exist_ok=True)

stream = client.images.generate(
    model="gpt-image-2",
    prompt=(
        "A wide editorial still life of translucent blue glass laboratory vessels "
        "casting crisp cyan shadows on warm cream paper, top-down, no text or logos."
    ),
    size="1536x1024",
    quality="medium",
    output_format="jpeg",
    output_compression=90,
    background="opaque",
    stream=True,
    partial_images=2,
)

final_written = False
for event in stream:
    if event.type == "image_generation.partial_image":
        path = out_dir / f"preview-{event.partial_image_index}.jpg"
        path.write_bytes(base64.b64decode(event.b64_json))
        print(f"preview: {path}")
    elif event.type == "image_generation.completed":
        path = out_dir / "final.jpg"
        path.write_bytes(base64.b64decode(event.b64_json))
        print(f"final: {path}; usage={event.usage}")
        final_written = True

if not final_written:
    raise RuntimeError("Stream ended without image_generation.completed")

期待される動作:プレビュー画像は 0~2 個、最終画像は正確に 1 個です。生成が速い場合、プレビューの数は少なくなることがあります。部分画像ごとに画像出力トークンを 100 個追加で見積もってください。

失敗の種類ごとに対処する

  • 一時的な 429 および 5xx の失敗は、上限付きの指数バックオフとジッターを使って再試行します。レート制限ヘッダーを尊重し、リクエスト ID をログに記録します。
  • リクエストを変更せずに image_generation_user_error を自動再試行しないでください。
  • まず error.code == "moderation_blocked" に分岐します。moderation_details は省略可能なものとして扱います。ステージは input、output、unknown のいずれかで、カテゴリは大まかなデバッグ用ラベルです。エンドユーザーには一般的なメッセージを表示し、詳細は安全な修正とログ記録にのみ使用します。
  • 同じリクエストを難読化したり、モデレーションを切り替えたりして、安全ブロックを回避しないでください。有害な意図を変更した、準拠した言い換えを提示します。
  • テキストが正しくない場合は、コピーを短くし、階層と品質を高めるか、後工程で組版します。
  • 編集でずれが生じた場合は、最後に承認したソースに戻り、変更範囲を狭め、不変条件を明示して、より厳密なアルファマスクを使います。
  • 複数の参照画像が混ざる場合は、すべての入力をインデックスで識別し、それぞれに 1 つの役割を割り当てます。
  • 出力の切り抜きが不適切な場合は、フレーミング、安全マージン、ネガティブスペースの位置を指定し、実際の納品時のアスペクト比でテストします。
  • GPT Image 2 で透明な背景を指定して失敗する場合は、不透明な背景で生成し、後工程で背景を除去します。

バッチ処理の前にコストと処理能力を見積もる

ドキュメントに記載された料金、2026-07-09に確認済み:100万トークンあたりの料金:

モデル標準テキスト入力標準画像入力/キャッシュ済み標準画像出力バッチテキスト入力バッチ画像入力/キャッシュ済みバッチ画像出力
gpt-image-2$5.00$8.00 / $2.00$30.00$2.50$4.00 / $1.00$15.00
gpt-image-1.5$5.00$8.00 / $2.00$32.00$2.50$4.00 / $1.00$16.00
gpt-image-1-mini$2.00$2.50 / $0.25$8.00$1.00$1.25 / $0.13$4.00

現行ガイドに記載されている、GPT Image 2で一般的なサイズを指定した出力のみの例は次のとおりです。

品質1024x10241024x15361536x1024
low$0.006$0.005$0.005
medium$0.053$0.041$0.041
high$0.211$0.165$0.165

プロンプトのテキスト、入力画像のトークン、Responsesのメインラインモデルの使用量、ストリーミングの部分出力、再試行、後続処理のコストを加えてください。出力コストだけで、参照画像を多用する編集のコストを見積もらないでください。忠実度の高いGPT Image 2の入力が、編集コストの大部分を占めることがあります。

gpt-image-1の旧料金は、テキスト入力が$5.00/M、画像入力が$10.00/M、画像出力が$40.00/Mです。提供終了が予定されているため、移行時の費用計算にのみ使用してください。

ドキュメントに記載されたGPT Image 2のレート制限、2026-07-09に確認済み: Freeは非対応、Tier 1は100,000 TPM / 5 IPM、Tier 2は250,000 / 20、Tier 3は800,000 / 50、Tier 4は3,000,000 / 150、Tier 5は8,000,000 / 250です。利用ティアは変更され、利用額に応じて上限が引き上げられる場合があるため、モデルのページを再確認してください。

出典:API料金、画像コスト計算ツールと表、GPT Image 1モデルページ、GPT Image 2の制限。

安全性、同意、プライバシー、出所、権利を守る

同意と実在する人物
  • 人物の肖像を再現する前に、明示的な同意と必要な権利をすべて取得してください。
  • 視覚機能を使って人物を特定したり、その人物に関する非公開または機微な情報を求めたり推測したりしないでください。
  • 同意のない親密なコンテンツ、性的な未成年者の描写、嫌がらせ、詐欺、なりすまし、または誤解を招く肖像の使用は作成しないでください。真正性について誤解を招くおそれがある方法で、本人の同意なく肖像を使用しないでください。
  • ニュース、政治、医療、法律、安全、歴史を題材にした画像は、特に慎重に確認してください。生成した描写を出来事の証拠として提示しないでください。

出典:Service Terms §6、Usage Policies。

権利と商用利用の確認

OpenAIのビジネス契約では、顧客とOpenAIの間において、法律で認められる範囲で、顧客は入力の権利を保持し、出力を所有すると定められています。ただし、顧客は入力に関する権利、ライセンス、許可を有している必要があり、出力の使用について責任を負います。出力が独自のものとは限りません。これは、結果が著作権で保護されること、権利を侵害しないこと、商標上問題がないこと、事実として正確であること、または独占的であることを保証するものではありません。

実務上の目安: 商用納品では、混同を招くほど類似したロゴやトレードドレスがないか検索し、参照したライセンスや許諾を確認し、素材の出所を記録し、リスクに応じて法務確認を受けてください。存命のアーティストや保護対象のフランチャイズを模倣する依頼より、独自のスタイル属性を指定してください。

出典:OpenAI Services Agreement §§3–4、Service TermsのAPI補償制限。

API データと保持

顧客が明示的にオプトインしない限り、API データが OpenAI モデルのトレーニングに使用されることはありません。デフォルトでは、不正利用監視ログに顧客のコンテンツが最大 30 日間保持される場合があります。/v1/images/generations と /v1/images/edits は、現行の表ではアプリケーション状態の保持がなく、GPT Image モデルの使用時には承認済みの Zero Data Retention の対象となります。Responses のデフォルトのアプリケーション状態の動作については別途説明されています。Files API のオブジェクトは、手動で削除されるか、設定された expires_after ポリシーが適用されるまで保持されます。ただし、データ管理に関する規約が適用されます。

**本番環境での目安:**アップロードを最小限に抑え、不要なメタデータを削除し、秘密情報や生体識別子を含めないようにします。会話形式での保持が不要な場合は画像を直接呼び出し、Responses のストレージ制御を適切に設定し、ワークフローの完了後に Files API へのアップロードを削除してください。規制対象の業務に使用する前に、ZDR/データレジデンシーの適用可否を確認します。store=false だけでは、承認済みの Zero Data Retention と同じではありません。

出典:OpenAI プラットフォームのデータ管理。

来歴

OpenAI によると、API で生成された画像には C2PA メタデータと埋め込み型の SynthID ウォーターマークが含まれます。C2PA メタデータは削除される場合があり、ウォーターマークは劣化する場合があります。いずれかのシグナルがないからといって、人間が作成した画像であることの証明にはなりません。検証ツールで OpenAI 由来であることは示せますが、正確性、編集されていないこと、所有権、正しい文脈までは確認できません。

**本番環境での目安:**生成された元のファイルとそのメタデータを保持し、不要な形式変換を避け、社内の生成記録を維持します。文脈上必要な場合は合成メディアであることを明示し、来歴を事実性の証明として決して扱わないでください。

出典:OpenAI 生成画像の C2PA と SynthID、ChatGPT Images 2.0 システムカード。

プロンプトだけでなく、最終成果物を確認する

顧客向けの作業では人間のレビュアーを起用し、可能な範囲で測定可能なチェックを自動化してください。

  • **指示:**必要な被写体、数、動作、スタイル、トリミング、除外事項。
  • **テキスト:**正確な綴り、改行、句読点、重複、読みやすさ、余分な字形。
  • **編集時の不変条件:**人物の同一性、形状、ポーズ、ロゴ/ラベル、配色、トリミング、カメラ、背景、変更されていないピクセル。
  • **視覚的な整合性:**解剖学的な形状、手、遮蔽、反射、反復パターン、遠近法、影、輪郭のハロー、圧縮。
  • **事実との整合性:**地図、図表、日付、数値、科学的なラベル、文化的な詳細、実際の出来事を暗示する要素。
  • **納品:**寸法、比率、ファイルシグネチャ、アルファチャンネルの想定、色の挙動、ファイルサイズ、モバイルや印刷での読みやすさ。
  • **安全性と権利:**同意、許諾書、商標、個人データ、未成年者、真正な文脈に関するリスク、ポリシーへの準拠。
  • **来歴:**元のファイルが保持されていること、生成メタデータが記録されていること、開示/記録要件を満たしていること。

保存されたファイルが受け入れ基準に合格するまでは、一部のプレビューだけを見て成功したと判断しないでください。

公式ソース一覧

このスキルに記載されている変更される可能性のある情報は、2026-07-09 に確認済みです。

コメント