物体削除API:GPT Image 2で写真から人物やゴミ箱を消す
物体ごとに一文を送るだけで、3つの削除はすべてうまくいきました。実行したコード、原寸の結果、まだ任せきれない部分を紹介します。
このページの内容
2026年10月28日、GPT-Image 2の編集エンドポイントに物体ごとに一文を送るだけで、公園の写真から犬を連れた女性、青いゴミ箱、赤い凧をそれぞれ消せました。3回の実行はいずれも一文だけです。消した跡は周囲の地面や空になじみ、ベンチ、木々、スカイラインは元の位置に残りました。
呼び出しはプロンプトと元画像を1枚送り、完成した新しい画像を受け取るだけです。以下では実際に動かしたPython、3つの結果の原寸画像、そしてやり直したくなる補完を見つけるための確認項目を紹介します。
指示だけで消す仕組み
写真1枚と一文を送ります。文には消したい物体、その場所に何を入れるか、残すものを書きます。モデルはその領域を描き直し、全体を新しい画像として返すので、別途合成する工程はありません。
呼び出しはOmniaKeyの他の編集タスクと同じメディアタスクです。モデルはgpt-image-2、typeはimage、operationはedit。元写真をBase64でinputのimageに入れ、文をinputのpromptに入れます。parametersのsizeはWIDTHxHEIGHT、qualityはlow、medium、high、autoから選び、nは1のみです。どちらの操作もモデルページに載っています。
結果を決めるのは言葉です。「空に浮かぶ小さな赤い凧」と「赤いもの」では作業内容が変わり、「草地と舗装石」と書けば消した場所が何で埋まるかまで決まります。文の順番はGPT Image 2 プロンプトガイドで扱っており、FLUX Kontextの代替ガイドでも同じ形式の指示をGPT Image 2で使っています。
リクエスト
Pythonファイル1本で完結します。写真をエンコードし、タスクを作成し、終わるまでポーリングし、PNGをダウンロードします。
import base64
import json
import os
import time
import urllib.request
import uuid
API = "https://api.omniakey.com/v1/media/tasks"
KEY = os.environ["OMNIAKEY_API_KEY"]
def request(method, url, body=None, extra_headers=None):
headers = {"Authorization": f"Bearer {KEY}", "User-Agent": "omniakey-example/1"}
data = None
if body is not None:
headers["Content-Type"] = "application/json"
data = json.dumps(body).encode()
headers.update(extra_headers or {})
req = urllib.request.Request(url, data=data, headers=headers, method=method)
with urllib.request.urlopen(req, timeout=120) as resp:
return json.load(resp)
def edit_image(source_path, prompt, out_path, size="1024x1536", quality="medium"):
with open(source_path, "rb") as f:
image = base64.b64encode(f.read()).decode()
body = {
"model": "gpt-image-2",
"type": "image",
"operation": "edit",
"input": {"prompt": prompt, "image": {"data": image, "mime_type": "image/jpeg"}},
"parameters": {"size": size, "quality": quality},
}
task = request("POST", API, body, {"Idempotency-Key": str(uuid.uuid4())})["id"]
for _ in range(150):
time.sleep(4)
state = request("GET", f"{API}/{task}")
if state["status"] not in ("queued", "processing"):
break
if state["status"] != "succeeded":
raise RuntimeError(state.get("error") or state["status"])
asset_url = state["assets"][0]["url"] # signed link: valid for about an hour, so download now
req = urllib.request.Request(asset_url, headers={"User-Agent": "omniakey-example/1"})
with urllib.request.urlopen(req, timeout=120) as resp, open(out_path, "wb") as f:
f.write(resp.read())
return task
if __name__ == "__main__":
task = edit_image(
"park-base.jpg",
"Remove the blue trash bin completely. Fill its spot with grass and paving stones so it matches the surroundings. Keep everything else exactly the same. Photorealistic, no text, no logos.",
"park-no-bin.png",
size="1536x1024",
)
print("task", task)
この関数は2026年10月28日、別のプロンプトで確認しました。ベースモデルの1024ピクセルJPEGに黄色いレインコートを着せる指示を送り、返ってきたのは1024x1536のPNGでした。
- 作成呼び出しはHTTP 202とタスクidを返します(OmniaKey画像ドキュメント、2026年10月28日確認)。ステータスがqueuedまたはprocessingの間は同じタスクをポーリングします。succeededなら素材の準備完了です。失敗したタスクにはエラーコードとメッセージが付き、課金されません。
- 素材の署名付きURLは約1時間で切れ、ファイル自体は24時間保持されます。成功したらすぐ、APIキーを付けない普通のGETでダウンロードしてください。
- インラインBase64は1 MiBのリクエスト上限に含まれるので、スマホの写真は先に縮めておきます。
User-Agentヘッダーを送ります。2026年10月28日、Pythonの既定値のままだとHTTP 403が返り、このヘッダーで通りました。- sizeは明示するので、横長の写真は1536x1024で送ります。GPT Imageは常に不透明なPNGを返すため、実際の寸法はダウンロードしたファイルから読み取ります。
料金について、OpenAIの料金ページではGPT Image 2が画像入力トークン100万個あたり$8.00、画像出力トークン100万個あたり$30.00、バッチ料金はその半額とされています(2026年10月28日確認)。1枚あたりの価格表はなく、画像生成ガイドに1枚分を計算するツールがあります。OmniaKeyの現在の料金は料金ページにあります。
1枚の公園写真で3つの削除
4枚の画像はすべて同じベースフレームから作っています。晴れた都市公園の小道、中央に木のベンチ、左に青い金属製ゴミ箱、こちらへ小さな茶色の犬を連れて歩く女性、澄んだ空の高いところに小さな赤い凧。ベースと結果はすべて1536x1024、quality medium、2026年10月28日にOmniaKey経由のGPT Image 2で生成しました。場面も人物も合成です。物体ごとに一文を送り、それぞれ1回だけ実行しました。
| 消したもの | 送った指示 | 返ってきた結果 |
|---|---|---|
| 女性と犬 | "Remove the woman and the small brown dog completely. Fill the path and the grass naturally so they match the surroundings. Keep the bench, the blue bin, the trees, the kite and the sky exactly the same. Photorealistic, no text, no logos." | 女性と犬は消え、小道と草地が埋まった。ベンチ、ゴミ箱、木、凧、空はそのまま |
| 青いゴミ箱 | "Remove the blue trash bin completely. Fill its spot with grass and paving stones so it matches the surroundings. Keep everything else exactly the same. Photorealistic, no text, no logos." | ゴミ箱は消え、跡は草地と舗装石で埋まった。女性と犬は残っている |
| 赤い凧 | "Remove the small red kite from the sky. Keep the sky natural and everything else exactly the same. Photorealistic, no text, no logos." | 凧は消え、空は自然なまま。ほかの部分は変わっていない |

GPT-Image 2をOmniaKey API経由で2026年10月28日に生成、サイズ1536x1024、quality medium。
2番目のタイルでは女性と犬が消え、その背後で小道と草地がつながり、ベンチ、ゴミ箱、木、凧、スカイラインは残っています。3番目はゴミ箱を消し、跡を草地と舗装で作り直したもの。女性と犬はまだフレーム内にいます。4番目は凧だけを空から消し、ほかは変えていません。
削除後に確認すること
納品前に各タイルを実寸表示で確認します。
- 補完部分の縁と周囲。新しい草、舗装、小道の質感は必ず古い部分と接します。モデルは画像全体を描き直すので、その継ぎ目と物体の周囲を元写真と比べてください。ぼやけ、繰り返し、にじみはまずそこに出ます。
- 物体に触れていたもの。リード、影、反射は一緒に描き直す必要があります。
- 残すものリストを1項目ずつ。1回目の削除ではベンチ、ゴミ箱、木、凧、空が残り、2回目の削除では女性と犬が残りました。名前を挙げてから、実際にそこにあるかを見ます。
公開してよいのは、実寸表示で補完が保ち、残すものリストの全項目がそのままのときです。補完が汚れに見える場合は、同じ文に素材名を入れて再実行します。たとえば「草地と舗装石」です。
試していないこと
マスク入力、人が密集した場面、非常に小さな物体は試していません。群衆や柵の列、リードのような細いひもが写っている写真では、2回目の実行を予定し、その縁を原寸で確認してください。
指示のテンプレート
[消したい物体。見分けがつく特徴も書く]を完全に消してください。その場所は[素材]で埋め、周囲になじませてください。[残すもの]はそのまま変えないでください。写実的な写真、文字なし、ロゴなし。
- 物体には見分けのつく特徴を添えます。「空に浮かぶ小さな赤い凧」は「凧」より明確で、フレームに複数あるときもどれを指すか伝わります。
- 埋めるものは素材で書きます。「草地と舗装石」ならモデルが周囲に合わせる手がかりになります。「消して」だけでは、何で埋めるかをモデルに任せることになります。
- 残すものリスト。ベンチ、青いゴミ箱、木、凧、空など、残すべきものを名指しします。
- 最後のスタイル指定。「写実的な写真、文字なし、ロゴなし」で、写真らしさを保ちます。
人物の服を替える場合も形は同じで、変えたい服を物体として名指しします。手順はバーチャル試着ガイドで説明しています。
よくある質問
APIで写真から人を消せますか?
消せますが、結果の確認は必要です。1回目の削除では女性と犬が1ステップでフレームから消え、背後の小道と草地が描き直されました。
エンドポイントはマスクを受け付けますか?
OmniaKeyのドキュメントが説明しているのは元画像1枚とプロンプトです(2026年10月28日確認)。マスク用フィールドの記載はなく、マスクを使った実行もありません。領域を塗る代わりに、物体と位置を言葉で指定します。
結果のリンクはどのくらい有効ですか?
署名付きリンクは約1時間(OmniaKeyドキュメント、2026年10月28日確認)、ファイル自体は24時間保持されます。タスクが成功したらすぐにダウンロードしてください。
どのサイズを指定すればよいですか?
sizeはWIDTHxHEIGHTの形で明示します。横長の写真なら1536x1024などです。実際の寸法はダウンロードしたPNGから読み取ってください。GPT Imageは常に不透明なファイルを返すので、トリミングはダウンロード後に計画します。
1つの指示で2つの物体を消せますか?
1回目の削除では、一文で女性と犬をまとめて消せました。ほかの組み合わせはテスト対象外でした。
パラメータはGPT-Image 2のモデルページ、次の削除の計画前に現在の料金を確認してください。
この記事で紹介しているモデル
関連記事
GPT Image 2 プロンプトガイド:構成・例文・実際の生成画像
8 つのプロンプトと 9 枚の実画像。GPT Image 2 が正確に再現した点、勝手に足した点、直し方をまとめます。
バーチャル試着 API:GPT Image 2 で服を着せ替える
写真 1 枚とプロンプト 1 つで服を変えられます。リクエストのコード、2026 年 10 月 28 日に実行した 3 回の着せ替え、そして結果がどこでずれるかを示します。
FLUX Kontext APIの代替:GPT Image 2で写真を指示どおりに編集
マスクなしの指示編集。リクエストのコード、2026年10月28日に3段階で回した連続編集、そして各ステップで残ったものを書きます。
