Skip to main content

GPT-Image-2.5 画像生成ガイド(日本語訳・Part 2)

· 12 min read
AICU API Team
api.aicu.ai

OpenAI 公式「Image generation」ガイド(原文)の日本語訳、Part 2 です。 プロンプトの自動改稿/画像の編集(参照画像・マスク)/出力のカスタマイズ/制限/モデレーション/対応モデル/コストと待ち時間を扱います。 Part 1(概要・API 選択・生成・マルチターン・ストリーミング)はこちら。

api.aicu.ai は Image API(/v1/images/generations / /v1/images/edits)を OpenAI 互換で提供しており、参照画像・マスク・moderation はそのまま使えます。

改稿されたプロンプト(Revised prompt)​

Responses API の画像生成ツールでは、メインラインモデル(例: gpt-5.5)が性能向上のためにプロンプトを自動で改稿します。 改稿後のプロンプトは、画像生成呼び出しの revised_prompt フィールドで確認できます。

{
"id": "ig_123",
"type": "image_generation_call",
"status": "completed",
"revised_prompt": "A gray tabby cat hugging an otter. The otter is wearing an orange scarf. Both animals are cute and friendly, depicted in a warm, heartwarming style.",
"result": "..."
}

画像を編集する​

画像編集エンドポイントでできること:

  • 既存の画像を編集する
  • 他の画像を参照として新しい画像を生成する
  • 画像と、置き換える領域を示すマスクをアップロードして、画像の一部を編集する

参照画像から新しい画像を作る​

1 枚以上の画像を参照にして新しい画像を生成できます。例では 4 枚の入力画像(ボディローション・石けん・お香セット・バスボム)から、 それらを詰めたギフトバスケットの画像を作ります。

Responses API では入力画像を 3 通りで渡せます: 完全な URL/Base64 データ URL/File ID(Files API で作成)。

from openai import OpenAI
import base64

client = OpenAI()

def encode_image(file_path):
with open(file_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode("utf-8")

def create_file(file_path):
with open(file_path, "rb") as file_content:
result = client.files.create(file=file_content, purpose="vision")
return result.id

prompt = """Generate a photorealistic image of a gift basket on a white background
labeled 'Relax & Unwind' with a ribbon and handwriting-like font,
containing all the items in the reference pictures."""

base64_image1 = encode_image("body-lotion.png")
base64_image2 = encode_image("soap.png")
file_id1 = create_file("bath-bomb.png")
file_id2 = create_file("incense-kit.png")

response = client.responses.create(
model="gpt-6-astra",
input=[{
"role": "user",
"content": [
{"type": "input_text", "text": prompt},
{"type": "input_image", "image_url": f"data:image/png;base64,{base64_image1}"},
{"type": "input_image", "image_url": f"data:image/png;base64,{base64_image2}"},
{"type": "input_image", "file_id": file_id1},
{"type": "input_image", "file_id": file_id2},
],
}],
tools=[{"type": "image_generation", "model": "gpt-image-2.5-sunburst"}],
)

image_data = [o.result for o in response.output if o.type == "image_generation_call"]
if image_data:
with open("gift-basket.png", "wb") as f:
f.write(base64.b64decode(image_data[0]))
else:
print(response.output_text)

Image API(api.aicu.ai 互換)なら、/v1/images/edits に image[] として複数枚を multipart で渡します:

curl -X POST "https://api.aicu.ai/v1/images/edits" \
-H "Authorization: Bearer $AICU_API_KEY" \
-F model="gpt-image-2.5-sunburst" \
-F "image[]=@body-lotion.png" -F "image[]=@soap.png" \
-F "image[]=@bath-bomb.png" -F "image[]=@incense-kit.png" \
-F prompt="Generate a photorealistic image of a gift basket on a white background labeled 'Relax & Unwind' with a ribbon and handwriting-like font, containing all the items in the reference pictures." \
| jq -r '.data[0].b64_json' | base64 --decode > gift-basket.png

マスクで画像を編集する​

マスクで編集する領域を示せます。GPT Image でマスクを使うと、編集を導く追加の指示がモデルに送られます。

GPT Image のマスクは完全にプロンプトベースです。モデルはマスクを手がかりにしますが、その形状を完全な精度で守るとは限りません。 複数の入力画像がある場合、マスクは1 枚目に適用されます。

fileId = create_file("sunlit_lounge.png")
maskId = create_file("mask.png")

response = client.responses.create(
model="gpt-6-astra",
input=[{
"role": "user",
"content": [
{"type": "input_text",
"text": "generate an image of the same sunlit indoor lounge area with a pool but the pool should contain a flamingo"},
{"type": "input_image", "file_id": fileId},
],
}],
tools=[{
"type": "image_generation",
"model": "gpt-image-2.5-sunburst",
"quality": "high",
"input_image_mask": {"file_id": maskId},
}],
)

例: 「プールのある日当たりのよいラウンジ」の画像+プール部分のマスク → プールにフラミンゴ(浮き輪)が置き換わった画像。

マスクの要件​

  • 編集する画像とマスクは同じ形式・同じサイズ(50MB 未満)。
  • マスク画像はアルファチャンネルを含む必要があります。画像編集ツールで作る場合は、アルファ付きで保存してください。
  • 白黒画像から、プログラムでアルファチャンネルを付けることもできます:
from PIL import Image
from io import BytesIO

# 1. 白黒マスクをグレースケールで読む
mask = Image.open("mask.png").convert("L")
# 2. RGBA に変換してアルファの器を作る
mask_rgba = mask.convert("RGBA")
# 3. マスク自身でアルファを埋める
mask_rgba.putalpha(mask)
# 4-5. PNG で保存
buf = BytesIO()
mask_rgba.save(buf, format="PNG")
with open("mask_alpha.png", "wb") as f:
f.write(buf.getvalue())

出力のカスタマイズ​

設定できる出力オプション:

  • Size: 画像の寸法(例: 1024x1024、1024x1536)
  • Quality: レンダリング品質(例: low、medium、high)
  • Format: 出力ファイル形式
  • Compression: JPEG / WebP の圧縮率(0–100%)
  • Background: 透過・不透過・自動

size quality background は auto に対応し、プロンプトに応じてモデルが最適な値を選びます。

サイズと品質​

gpt-image-2.5-sunburst と gpt-image-2.5-flare は xhigh と max の品質設定を追加しました。既定はどちらも auto。以前の GPT Image モデルは high までです。

設定選択肢
推奨サイズ1024x1024(正方)、1536x1024(横)、1024x1536(縦)
Qualitylow、medium、high、xhigh、max、auto

両モデルとも 1536x864 のような任意寸法(幅x高さ)に対応します。幅・高さは 16 の倍数、縦横比は 1:3〜3:1、各辺 3840px 以下、 総ピクセル数は 655,360〜8,294,400(4K)。2560x1440 を超える解像度は実験的です。

透過背景は background: "transparent" と output_format: "png" または "webp" を指定します。 下書きには quality: "low"、最終アセットは高い設定を比較して、ディテール・待ち時間・コストの均衡点を探します。

:::note api.aicu.ai の現状 api.aicu.ai でも xhigh / max が使えます(2026-09-21 追記。それまでは価格未設定のため 400 quality_not_priced を返していました)。1024×1024 で xhigh 11,400 AP・max 25,600 AP。ただし 60 秒を超えることがあり、その場合は結果がメールで届きます。アプリの中でそのまま待つ用途には low / medium / high を使ってください。詳細は 料金 を参照。 :::

出力形式​

Image API は Base64 エンコードの画像データを返します。既定は png、jpeg / webp も指定できます。 jpeg / webp では output_compression(0–100%)で圧縮率を指定できます(例: output_compression=50 で 50% 圧縮)。 jpeg は png より速いので、待ち時間が気になるなら優先してください。

制限事項​

GPT Image は強力で汎用的ですが、次の制限があります。

  • 待ち時間: 複雑なプロンプトは処理に最大 2 分かかることがあります。
  • 文字の描画: 大きく改善しましたが、正確な配置と鮮明さで苦戦することがあります。
  • 一貫性: 繰り返し登場するキャラクターやブランド要素の視覚的一貫性を、複数回の生成で保てないことがあります。
  • 構図の制御: 指示追従は向上しましたが、レイアウトに敏感な構図で要素を正確に配置するのは難しい場合があります。

コンテンツモデレーション​

すべてのプロンプトと生成画像は、コンテンツポリシーに従ってフィルタリングされます。

GPT Image の画像生成では、moderation パラメータで厳しさを制御できます。

  • auto(既定): 年齢に不適切な可能性のある一部カテゴリの生成を制限する標準のフィルタリング
  • low: より制限の緩いフィルタリング

ブロックされたリクエストとエラーの扱い​

画像生成の失敗も他の API エラーと同様に扱います: HTTP ステータス/SDK の例外型を確認し、リクエスト ID を記録し、認証・クォータ・レート制限・サーバー障害はエラーコードガイドを参照。 一時的なレート制限・サーバー障害はバックオフして再試行し、クォータエラーやリクエスト変更が必要なユーザーエラーは自動再試行しません。

ユーザー側で修正できる失敗は error.type = "image_generation_user_error" を返すことがあります。プロンプトや入力画像を変えずに自動再試行しないでください。 プログラムでは error.code を安定した判別子として使います。

error.code = "moderation_blocked" のとき、任意の error.moderation_details が付くことがあります:

{
"error": {
"type": "image_generation_user_error",
"code": "moderation_blocked",
"moderation_details": {
"moderation_stage": "input",
"categories": ["harassment"]
}
}
}

moderation_details は、内部の分類ラベルやスコアを露出せずに、粗いデバッグ文脈を提供します。

  • moderation_stage: input(プロンプト・入力側でブロック)/output(生成画像・出力側でブロック)/unknown(判定困難な稀なケース)
  • categories: 粗い公開ラベル(例: harassment、self-harm、sexual、violence)

多くのアプリでは、エンドユーザー向けメッセージは汎用にとどめ、moderation_details は開発者ログ・サポート・分析・軽い修正ヒントに使います。

try {
await openai.images.generate({
model: "gpt-image-2.5-sunburst",
prompt: "Create a poster humiliating my coworker with insulting captions",
});
} catch (error) {
if (error?.code !== "moderation_blocked") throw error;
const md = error.error?.moderation_details;
const categories = md?.categories ?? [];
const stage = md?.moderation_stage;
let hint = "This request could not be completed because it did not meet safety requirements.";
if (categories.includes("harassment")) hint = "Try removing abusive or targeting language and focus on neutral visual details instead.";
else if (stage === "input") hint = "Try revising the prompt or input images and submit the request again.";
else if (stage === "output") hint = "The generated result was blocked by a safety check. Try changing the prompt and generating again.";
console.error("Image generation blocked", { request_id: error?.requestID, code: error?.code, moderation_details: md });
console.log(hint);
}

対応モデル​

Responses API で画像生成を使う場合、gpt-5 以降のモデルは画像生成ツールに対応しているはずです。使いたいモデルの詳細ページで対応を確認してください。

コストと待ち時間(OpenAI 公式の公表値)​

Responses API のリクエストは、画像生成コストに加えてメインラインモデルのトークン使用量も含みます。

GPT Image 2.5 の 2 モデルは同じトークン単価です: 画像入力 $8 / 1M、画像入力(キャッシュ)$2 / 1M、画像出力 $30 / 1M、テキスト入力 $5 / 1M、テキスト入力(キャッシュ)$1.25 / 1M。 (最新は OpenAI の料金ページ。)

レスポンスの usage で、プロンプト・サイズ・品質ごとのトークン消費を測ってください。単価が同じでも 1 枚あたりのコストは同じではありません——トークン消費量はモデルと品質設定で変わります。

出力トークンの目安​

モデル・品質・サイズから出力トークンと画像出力コストを見積もれます。gpt-image-2.5-* の品質は low / medium / high / xhigh / max、gpt-image-2 は low / medium / high。 同じ品質設定でもモデルによってトークン数は異なり、画像出力トークンの単価は共通です。見積もりには auto でなく明示的な quality と size を使います。

  • 例(公式の計算機): gpt-image-2.5 の low・1024x1024 → 出力 196 トークン ≈ $0.00588 / 枚(画像出力 $30 / 1M 換算。テキスト・画像入力トークンと部分画像は除く)。この換算は 1024x1024 限定です。出力トークンは画素数ではなく形状で決まり、正方形がいちばん高く、横長ほど安くなります(実測: high で 1024×1024 = 1,756、1920×1088 = 1,325、1728×800 = 893、1536×512 = 535)。横長バナーは正方形より安い、と覚えておくと見積もりが狂いません。
  • 部分画像のコスト: partial_images でストリーミングする場合、部分画像 1 枚につき 追加で 100 画像出力トークンがかかります。

以前の GPT Image モデル​

以下は Sunburst / Flare ではなく以前のモデルの情報です。新規の統合では GPT Image 2.5 を使ってください。

gpt-image-2 の quality は low / medium / high に加えて auto(既定)も指定できます。また input_fidelity は GPT-Image-2.5 系(Flare / Sunburst)と gpt-image-2 のどちらも受け付けません(400 invalid_input_fidelity_model。gpt-image-1.5 系のパラメータ)。参照画像の忠実度はプロンプトで役割を書いて担保します。

gpt-image-2 より前のモデルは、まず専用の画像トークンを生成してから画像を描きます。待ち時間もコストも、描画に必要なトークン数に比例します(大きいサイズ・高い品質ほど多い)。

品質正方(1024×1024)縦(1024×1536)横(1536×1024)
Low272408400
Medium105615841568
High416062406208

入力トークン(プロンプトのテキスト、編集時の入力画像)も加算されます。gpt-image-2 は画像入力を常に高忠実度で処理するため、参照画像つきの編集は入力トークンが増えます。 最終コスト=入力テキストトークン+(編集時)入力画像トークン+画像出力トークン。

旧モデルの 1 枚あたり価格例(OpenAI 公表)

モデル品質1024x10241024x15361536x1024
GPT Image 2Low / Medium / High$0.006 / $0.053 / $0.211$0.005 / $0.041 / $0.165$0.005 / $0.041 / $0.165
GPT Image 1.5Low / Medium / High$0.009 / $0.034 / $0.133$0.013 / $0.05 / $0.2$0.013 / $0.05 / $0.2
GPT Image 1Low / Medium / High$0.011 / $0.042 / $0.167$0.016 / $0.063 / $0.25$0.016 / $0.063 / $0.25
GPT Image 1 MiniLow / Medium / High$0.005 / $0.011 / $0.036$0.006 / $0.015 / $0.052$0.006 / $0.015 / $0.052

非正方の大きい解像度が、同じ品質の小さい/正方の解像度より少ない出力トークンになることもあります。


本記事は OpenAI 公式ガイドの日本語訳です。掲載の料金は OpenAI の公表値で、AICU API の従量課金(AP)とは別です。原文: Image generation。