チュートリアル
画像修復とオブジェクト除去 API:HiAPI 上でプロンプトによる画像編集
HiAPI の画像から画像へのモデルで写真からオブジェクトを除去:実際の比較結果、構図を保てるモデル、効果的なプロンプト、curl と Python のサンプル。
概要
- HiAPI 上で写真からオブジェクトを除去するのは指示ベースの編集です:画像を送信し、何を除去するかを記述します。汎用の画像から画像へのモデルはマスクを受け付けません。
- 適切な出発点:
flux-2/image-to-image(1K で $0.035、aspect_ratio: "auto"と組み合わせると構図を保持)、gpt-image-2/image-to-image(1K で $0.03、画像フィールドはinput_urls)、seedream-4.5/image-to-image($0.045、最大 4K 対応)、そしてqwen-image-3.0/image-to-image($0.0358)です。 - マスクベースの修復モデル FLUX.1 Fill Pro は HiAPI 上で近日公開としてリストされています。それが利用可能になるまで、プロンプトがあなたのマスクです。
同じ写真、同じ指示、2 つのモデル
ソース画像:商品写真で、その上の値札を消したいと考えています。

Remove the coral price tag and its string from the bottle. Rebuild the bottle surface and the gray background that were behind it. Keep the bottle, lighting, shadow and everything else unchanged.

gpt-image-2/image-to-image、resolution 1K、1254×1254、112 秒、$0.03。
値札とその紐は消えました。値札に隠れていたボトルの表面は再構築され、曲率も反射も元画像と一致し、灰色の背景には修復跡が残らず、キャップ、ボトム、影もソース画像と一致しています。
同じリクエストを flux-2/image-to-image に送信しました。そのタスクは 16 秒後に fail で終了し、理由は TASK_FAILED のみで、料金は返金されました。1 回の失敗はモデル自体の性質を示すものではありませんが、コード内で fail を処理し、2 つ目のモデルで再試行すべきだという注意喚起になります。
どのモデルを使うべきか
| モデル ID | 画像フィールド | ソース画像の構図を保持 | 出力サイズ | 価格 |
|---|---|---|---|---|
flux-2/image-to-image |
image_urls(1–8) |
はい、aspect_ratio: "auto" |
resolution 1K / 2K |
1K で $0.035 |
gpt-image-2/image-to-image |
input_urls(1–16) |
はい、aspect_ratio: "auto"(デフォルト) |
resolution 1K / 2K / 4K |
1K で $0.03 |
qwen-image-3.0/image-to-image |
image_urls(1–3) |
いいえ、8 種類の比率から選択が必要 | resolution 1K / 2K |
$0.0358 |
seedream-4.5/image-to-image |
image_urls(1–14) |
いいえ、8 種類の比率から選択が必要 | resolution 2K / 4K |
$0.045 |
seedream-5.0-pro/image-to-image |
image_urls(1–10) |
いいえ、7 種類の比率から選択が必要 | resolution 1K / 2K |
1K で $0.06 |
HiAPI のリアルタイム価格、2026 年 10 月 20 日時点の照会。失敗したタスクは課金されません。
- オブジェクト除去のデフォルト選択:
aspect_ratio: "auto"をサポートするモデルを使用すると、出力が写真の形状を保つため、そのまま元の場所に戻せます。 - 大判プリントやズーム可能な商品ページ:Seedream 4.5 は 2K と同じ価格で 4K を出力します。
- 背景の除去だけが必要:
851-labs/background-remover(1 枚あたり $0.002)のような専用ツールを使用します。これはimage_urlが 1 つだけで、プロンプトは不要です。
curl
curl -s -X POST https://api.hiapi.ai/v1/tasks \
-H "Authorization: Bearer $HIAPI_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "flux-2/image-to-image",
"input": {
"prompt": "Remove the white delivery van parked on the right. Rebuild the storefront and sidewalk behind it. Keep everything else unchanged.",
"image_urls": ["https://your-cdn.example.com/street.jpg"],
"aspect_ratio": "auto",
"resolution": "1K"
}
}'
taskId が返されます。GET https://api.hiapi.ai/v1/tasks/{taskId} を data.status が success になるまでポーリングし、その後 data.output[0].url をダウンロードします。ソース画像は公開 URL 上にある必要があります。モデルはサーバー側でそれを取得します。
Python:すべてのモデルに使える 1 つの関数
# pip install requests; export HIAPI_KEY=your-key first
import os, time, requests
API = "https://api.hiapi.ai/v1/tasks"
H = {"Authorization": f"Bearer {os.environ['HIAPI_KEY']}"}
def edit(model, timeout_s=300, **inp):
r = requests.post(API, json={"model": model, "input": inp}, headers=H, timeout=30).json()
if r.get("code") != 200:
raise RuntimeError(r) # a 400 lists every invalid field at once
task_id = r["data"]["taskId"]
deadline = time.time() + timeout_s
while time.time() < deadline:
d = requests.get(f"{API}/{task_id}", headers=H, timeout=30).json()["data"]
if d["status"] == "success":
return requests.get(d["output"][0]["url"], timeout=120).content
if d["status"] == "fail":
raise RuntimeError(d.get("error"))
time.sleep(4)
raise TimeoutError(task_id)
prompt = ("Remove the tourists from the plaza. Extend the paving stones and the fountain base. "
"Keep the buildings, light and everything else unchanged.")
src = "https://your-cdn.example.com/plaza.jpg"
# FLUX.2 keeps the source shape
img = edit("flux-2/image-to-image", prompt=prompt, image_urls=[src], aspect_ratio="auto", resolution="1K")
# GPT Image 2: note the field name is input_urls
img = edit("gpt-image-2/image-to-image", prompt=prompt, input_urls=[src], resolution="1K")
# Seedream 4.5 at 4K: aspect_ratio and resolution are required
img = edit("seedream-4.5/image-to-image", prompt=prompt, image_urls=[src], aspect_ratio="3:2", resolution="4K")
with open("plaza-clean.png", "wb") as f:
f.write(img)
除去用プロンプトの書き方
マスクがない場合、プロンプトは何を除去し、何を保持するかを明確に示す必要があります:
- 対象とその位置を明示する。「右側に駐車している白い配送バン」は「あのバン」よりも効果的です。
- 空白を何で埋めるかを説明する。「その背後にある店舗の正面と歩道を再構築する。」
- それ以外のすべてを固定する。「照明、色、その他すべてを変更しない」で締めると、モデルが写真全体のスタイルを調整し直すことがなくなります。
同じパターンは関連するタスクにも適用できます:
- 消去して塗りつぶし:「空に架かる電線を除去する。グラデーションに合った晴天で埋める。その他すべてを変更しない。」
- 置換:「紙のコーヒーカップを白い陶器のマグカップに置き換える。照明と影を合わせる。その他すべてを変更しない。」
- 修復:「このスキャン写真の左下隅が破損している。欠けている草地と小道を再構築する。残りの部分は変更しない。」
- 複数のオブジェクト:「ベンチの隣のゴミ箱と 2 つの交通コーンを除去する。各領域を背景で埋める。その他すべてを変更しない。」
大規模なクリーンアップでは、1 回の呼び出しにつき 1 つの除去だけを行い、それらを連鎖させます。各結果を自分のストレージに保存し、その URL を次の呼び出しに渡します。HiAPI の出力リンクはタスク完了後約 7 日で期限切れになります。
遭遇するエラー
これらのエラーは送信時にいずれも HTTP 400 となるため、タスクは作成されず、課金もされません:
additional properties 'mask_url' not allowed(またはmask):これらのモデルはマスクを受け付けません。プロンプトで領域を記述してください。input_urls: missing required field "input_urls":gpt-image-2/image-to-imageにimage_urlsを送信しました。additional properties 'quality' not allowed:Seedream 5.0 Pro はqualityではなくresolution(1K または 2K)を使用します。aspect_ratio: value must be one of ...:autoは FLUX.2、GPT Image、Grok Imagine には使えますが、Seedream や Qwen には使えません。
タスクが fail で終了した場合は、data.error を確認してください。よくある原因は、モデルがソース URL を取得できないことです。
よくある質問
HiAPI にはマスクベースの修復 API はありますか?
現時点では汎用用途には提供されていません。画像と白黒マスクを受け付ける FLUX.1 Fill Pro は近日公開としてリストされています。上記のモデルはプロンプトのみで編集します。
オブジェクト除去に最適なモデルはどれですか?
ソース画像の構図を保持できるモデルから始めてください:flux-2/image-to-image、または aspect_ratio: "auto" と組み合わせた gpt-image-2/image-to-image です。GPT Image 2 は上記のサンプルをきれいに処理しました。モデルを選ぶ前に、自分の写真を数枚使って両方のモデルを比較してください。
1 回の呼び出しで複数のオブジェクトを除去できますか?
はい、1 つのプロンプトにそれらを列挙してください。1 回の呼び出しで 1 枚の画像が返されます。結果のうち 1 つが見落とされている場合は、出力に対してもう一度実行してください。
編集した画像は商用利用できますか?
生成された出力は、あなたのプランの利用規約に従います。編集するソース写真の権利は引き続きあなたが持っている必要があります。
その他の編集プロンプト:Seedream 4.5 プロンプトレシピとQwen Image 3.0 API ガイド。
関連記事
すべての記事を見る →-
チュートリアル
HiAPI API で hailuo-2.3-fast/image-to-video を呼び出す方法:curl と Python の実践
高速・低コストな画像から動画へのティアにおける最初の実行可能なリクエスト — モデル ID から MP4 のダウンロードまで
-
チュートリアル
HiAPI APIでhailuo-2.3/text-to-videoを呼び出す方法:curl、Python、実行可能なリクエスト例
-
チュートリアル
HiAPI で Kandinsky 6.0 Pro のテキストto動画を使用する:curl と Python チュートリアル
リクエスト優先の実践デモ:プロンプトから動画クリップへの呼び出しを構築し、リクエストを送信し、完了状態をポーリングし、結果をダウンロードする