GPT Image 2.6で範囲を囲んで画像編集する方法:実例と確認手順
透明な注釈レイヤーを作り、Ofox APIで画像を編集する手順。2件の実際の出力、元画像、リクエスト、範囲外の変化を調べるスクリプトを公開します。
GPT Image 2.6で対象を囲んで編集するには、元画像と、注釈だけを描いた透明PNGを別々に用意し、Images編集APIの markup に注釈画像を渡します。変更内容はプロンプトで指定します。注釈を元画像に正しく重ねられる状態にし、生成後は画像全体を確認してください。対象を正しく選べても、囲んでいない部分の全ピクセルが元のままとは限りません。
2026年11月6日にOfox経由で実際に試しました。3つのマグを描いた同じ元画像と同じプロンプトを使い、赤い楕円の位置だけを左のマグから右のマグへ移した2件のリクエストです。どちらも囲んだマグがオレンジ色になりましたが、対象外のピクセルも変わりました。本記事では元ファイル、実際の出力、設定、ローカル検査用スクリプトを公開し、この違いを確認できるようにしています。
APIを呼ぶ前にサンプルを確認する
注釈付き画像編集のサンプル一式をダウンロードできます。元画像のPNGとSVG、2種類の透明な注釈レイヤー、生成された2枚のPNG、プロンプト、リクエスト記録、3つのPython補助スクリプトが入っています。ダウンロードやローカルでの確認ではAPIを呼びません。
元画像はこの検証用に制作したイラストで、顧客の商品写真ではありません。青緑のトラベルマグが3つあり、上にA・B・C、各マグに A-17 と書かれています。タイトル、背景、下部の短い線、オレンジ色の点も確認対象です。単純な図柄にすることで、対象の取り違えや文字の変更を見つけやすくしました。顔、宝飾品、実写の商品写真、大量処理での性能を示すものではありません。
ローカル検査にはPython 3とPillowを使います。展開したフォルダーへターミナルで移動し、独立した環境を作成します。
python3 -m venv .venv
source .venv/bin/activate
python3 -m pip install Pillow
コマンドはmacOS/Linuxのシェル向けです。Windowsでは使用するシェルに合った方法で仮想環境を有効にしてください。付属の decode_edit.py はPython標準ライブラリだけで動きます。
注釈、マスク、厳密な合成を使い分ける
似た物体のうち1つを変える、矢印で示した物を消す、複雑な構図の一部を直すなど、文章より指し示すほうが分かりやすい場合にmarkupが役立ちます。注釈は編集意図を伝えるためのもので、完成画像に残す絵ではありません。
| 要件 | 出発点となる方法 | 確認すること |
|---|---|---|
| 似た物体から1つを指定する | 独立した注釈レイヤーと明確なプロンプト | 対象が合っているか、注釈が消えたか、他の物体は許容できるか |
| 透明度マスクで編集範囲を示す | マスクを使うワークフロー | マスクの解釈と周辺の変化 |
| 承認済みロゴや背景を完全に維持する | 元素材を保持し、採用した編集部分を画像エディターで合成 | レイヤー境界、位置合わせ、保護するピクセルの一致 |
最後の行は編集方法の提案であり、この2回の呼び出しで検証した機能ではありません。変更禁止のピクセルが納品条件なら、見た目が近いだけで生成画像を合格にしないでください。この別の課題はマスクと商品画像の保持に関するガイドで扱っています。
OpenAIの画像生成ガイドによると、Images編集APIのmarkupはImage 2.5と2.6に対応しており、2.6限定ではありません。対象は最初の入力画像で、mask や prompt_rewriter とは併用できません。注釈は透明PNGで、向きを補正した元画像と寸法を一致させます。文書上の上限はそれぞれ16,777,216ピクセル、注釈ファイルは50 MBです。本例は1024 × 1024の入力と、それより十分小さい注釈ファイルを使っています。
注釈だけを透明PNGとして書き出す
付属サンプルでは、元画像に source.png、注釈に markup-left.png を使います。右側を示すファイルは markup-right.png です。SVGは編集可能な元データであり、今回APIへ送信した形式ではありません。
自分の注釈を作る場合は、レイヤーを扱える画像エディターで次のように準備します。
- 元画像を開き、先に向きを確定します。EXIF情報に従って自動回転する場合は、正しい向きの作業用コピーを書き出してから描きます。
- キャンバス寸法を変えずに、元画像の上へ透明レイヤーを追加します。
- 対象1つを分かりやすく囲みます。無関係な物体をできるだけ含めず、重要な文字を太い線で隠さないようにします。
- 元画像を非表示にして、注釈レイヤーだけをPNGへ書き出します。線の外周に合わせて切り抜かず、元のキャンバス全体を残します。
- 元画像と注釈を再び重ねて位置を確認します。元画像は別に保存し、注釈と統合した画像で上書きしないでください。
画像に描かれた市松模様は透明ではありません。赤い円を描いた白背景のPNGも同様です。注釈には実際に透明な背景ピクセルを持つアルファチャンネルが必要です。透明に見えるプレビューだけでは判断できません。
付属の検査を実行します。
python3 preflight.py source.png markup-left.png
サンプルでは passed: true、寸法 [1024, 1024]、アルファ値の範囲 [0, 255] が返ります。不透明な画像、全透明で線のない画像、寸法が違う画像、JPEGを拒否することもローカルで確認しました。合格は基本的な寸法と透明度の確認にすぎず、モデルの利用権限、円の位置、編集成功を保証しません。
変更は1つに絞り、残す要素を具体的に書く
両方のリクエストで使ったプロンプト全文です。再現できるよう英語の原文を掲載しており、ダウンロード内の prompt.txt と同じです。
Change only the body of the travel mug inside the red ellipse to warm orange. Keep its dark lid, handle geometry, cream A-17 label and label text unchanged. Keep the other two mugs, their colors, the A B C headings, FIELD / 03 title, background, bottom line and small orange dot unchanged. The red ellipse is an editing annotation: do not draw it in the final image. Keep the original framing and flat illustration style.
内容は「赤い楕円内のマグ本体だけを暖かいオレンジ色にし、暗いふた、持ち手の形、クリーム色のA-17ラベルと文字を保つ。残り2つのマグと色、A/B/C、FIELD / 03、背景、下部の線と点を変えず、楕円は描かず、構図と平面的な画風を保つ」という指定です。
「左」「右」と書いていないので、対象位置は注釈で伝えています。本体とふた・持ち手・ラベルを区別し、完成画像に円を残さないことも明示しました。
自分の素材では物体、変更内容、保護する細部を置き換えます。色変更、照明変更、移動、背景交換を一度に頼むより、まず1つの修正に絞るほうが結果を診断しやすくなります。「維持して」と書いたこと自体は、実際に維持された証拠ではありません。
画像プロンプトガイドには局所編集やモデル別の設定が説明されています。今回は小さな変更に quality=medium、complexity=low を使い、input_fidelity は指定しませんでした。すべての画像に最適な設定だという意味ではありません。
Ofox経由でリクエストを送る
検証したエンドポイントは https://api.ofox.ai/v1/images/edits、OfoxのモデルIDは openai/gpt-image-2.6-flare です。提供元への直接接続とゲートウェイではモデルIDが異なる場合があります。変更する前にOfox Images API文書とアカウントで利用できるモデルを確認してください。
以下の実行はアカウントのクレジットを消費します。OFOX_API_KEY はローカル環境へ安全に設定し、記事、配布ファイル、共有ノートブックへ書き込まないでください。
curl --fail-with-body --silent --show-error \
https://api.ofox.ai/v1/images/edits \
-H "Authorization: Bearer ${OFOX_API_KEY:?Set OFOX_API_KEY first}" \
-F 'model=openai/gpt-image-2.6-flare' \
-F 'image=@source.png;type=image/png' \
-F 'markup=@markup-left.png;type=image/png' \
-F 'prompt=<prompt.txt' \
-F 'size=1024x1024' \
-F 'quality=medium' \
-F 'complexity=low' \
-F 'n=1' \
-F 'output_format=png' \
-o response.json
multipartのContent-Typeとboundaryはcurlに生成させます。boundaryのない Content-Type: multipart/form-data を手動で追加しないでください。prompt=<prompt.txt はファイルの中身をフォーム項目として読み込む構文で、ファイル名をプロンプトとして送る指定ではありません。
curlが正常終了したらデコードします。
python3 decode_edit.py response.json my-left-result.png
python3 inspect_edit.py source.png my-left-result.png
デコーダーはエラーレスポンスとPNGシグネチャーを確認し、既存ファイルへの上書きを拒否します。比較スクリプトは付属の1024 × 1024画像と固定した切り出し座標を前提にしています。自分の写真では保護したい領域に座標を変更し、マグの座標をそのまま流用しないでください。
右側の試験を再現するには、markup-left.png だけを markup-right.png に変え、source.png はそのままにします。レスポンスと出力には新しいファイル名を使ってください。呼び出しごとに料金が発生します。左側の生成結果を次の入力にすると元画像まで変わるため、今回と同じ比較ではなくなります。
実際の2つの出力から分かること

英語のローカル検証画面をブラウザーで撮影したものです。実際のAPI出力と測定値を表示しており、Ofox Chatの製品画面ではありません。記事の装飾的なカバーは別の概念イラストです。
| 観察項目 | 左側の注釈 | 右側の注釈 |
|---|---|---|
| 見える変化 | マグAの本体がオレンジ色 | マグCの本体がオレンジ色 |
| HTTP応答 | 200 | 200 |
| 出力 | 1024 × 1024 PNG | 1024 × 1024 PNG |
| 通信を含むクライアント側経過時間 | 11.566秒 | 10.229秒 |
| 返された入力/出力トークン | 1,286/1,449 | 1,265/1,449 |
| 最終画像に赤い注釈が残るか | 残らない | 残らない |
各対象につき1回、再試行なしです。時間は観測値であって速度ベンチマークやサービス保証ではありません。同じプロンプトでも入力トークン数は異なりましたが、この試験では原因までは分かりません。Sunburstや他社サービスとの比較も行っていません。
ラベルは読める状態で、両方とも対象のマグが変色しました。ただし、生成画像には細かな質感と陰影が加わりました。他のマグも青緑に見えますが、RGB値は元画像と同一ではありません。スクリーンショットだけで判断せず、元画像、左側の結果、右側の結果を元の解像度で開いてください。
ローカルスクリプトは画像を拡大縮小せず、同じ座標の領域を比較します。RGB各チャンネルの0〜255の値について、絶対差の平均を計算します。
| 切り出した領域 | 左側の結果 | 右側の結果 |
|---|---|---|
| どちらでも対象にしていない中央のマグ本体 | 11.866 | 10.925 |
| タイトル部分 | 3.141 | 3.890 |
| 下部の短い線 | 1.853 | 1.527 |
これはピクセル差であり、画質スコアや共通の合否基準ではありません。配布データにある対象本体の領域も含め、確認した5領域すべてが元画像と異なりました。少なくとも今回の出力では、囲んだ物体の外側も完全なコピーではないと分かります。保護したい全ピクセルを測ったわけではなく、その変化が用途上問題になると一律に判断するものでもありません。
納品条件に照らして結果を確認する
編集結果を渡す前に、次の3点を分けて確認します。
- 対象:意図した物体が変わり、隣の物体までオレンジ色に変わっていないか。注釈は消えたか。
- 内容:ラベル、数値、ブランド、指定した形状は正しいか。この例では大きなA/B/Cだけでなく、すべての
A-17を読みます。 - 保持:小さな質感や色の変化は許容できるか。完全な一致が必要なら保護領域をピクセル比較し、合成用の元レイヤーを残します。
元画像、注釈、プロンプト、モデルID、設定、出力、確認メモを一緒に保存します。修正時は原因を1つずつ扱います。円の位置が悪ければ注釈を直し、対象は合っていても画風が変わりすぎたら保持の指定を具体化するか、編集方法を変更します。原因を決めずに生成を繰り返すと、比較が難しくなります。
Ofox Chatで画像編集を試す
対話形式で進めたい場合は、Ofox Chatを開き、元画像と「どの物体をどう変え、何を残すか」を具体的に伝えます。出力後は同じように対象、文字、保持の3点を確認してください。
Ofox ChatでもImage 2.6を利用できますが、この記事の2件はAPIで検証したものです。独立した透明レイヤーをAPIの markup フィールドとして渡すChatの操作項目は確認していません。会話へ注釈付き画像をアップロードしても、同じフィールドや設定で処理される証拠にはなりません。この2ファイルのリクエストを再現するには上記のAPI手順を使ってください。
ファイル、リクエスト、出力の問題を切り分ける
| 症状 | 最初に確認する点 | 次の対応 |
|---|---|---|
| 注釈が拒否される、寸法が違う | 向きとキャンバス寸法 | 向きをそろえ、同寸法で書き出して事前検査 |
| 白い長方形が画像を覆う | 注釈のアルファチャンネル | 元画像と背景を非表示にし、透明な描画レイヤーだけを書き出す |
| 見た目では気づかない空の注釈 | 透明度と線の有無 | 対比色の背景で開く。付属スクリプトは全透明を拒否 |
| 違う物体が変わる | 位置合わせと円の曖昧さ | 重ねて確認し、対象を1つに絞り、元画像は保持 |
| 最終画像に赤い円が残る | 元画像への統合、指示の不足 | 原図と注釈を別々に送り、注釈を描かないと明示 |
| マスクの例をコピーしたらエラー | 競合するフィールド | markup使用時は mask と prompt_rewriter を外す |
| モデルがない、アクセス拒否 | 正確なIDと応答本文 | 利用可能モデルと認証情報を確認し、名前を適当に変えて再試行しない |
| 成功応答なのにPNGが使えない | エラー内容と画像データ | デコード前にJSONを調べ、診断用に保存 |
| 他の物体やラベルが変わる | 元解像度での比較 | 許容できなければ却下し、指示を1つ修正するか元レイヤーと合成 |
| タイムアウト、レート制限 | 応答とアカウントの制限 | 再試行前に処理済みか確認。繰り返しは追加費用につながる |
局所編集ではなく出力形式の問題なら、Image 2.6のGIFガイドとSVGの作成手順を参照してください。それぞれ別の成果物であり、エンドポイントと検査方法も異なります。利用方法や課金の背景はImage 2.6 API概要(英語)にまとめています。上のトークン記録は1回あたりの固定料金ではありません。


