使用ガイド
hiapi API で seedream-4.5/image-to-image を使ってEC商品画像を生成する
商品カタログは1枚の写真ではありません。同じSKUを十数種類のシチュエーションで見せるものです。白背景の商品画像、ライフシーン画像、サプライヤーが部品を変更した後のレタッチ、そして季節のブランド背景に合わせたバージョンなどです。撮り直しやゼロからの再生成は毎回一貫性を損ないます。まったく新しいプロンプトは微妙に異なる商品を描き出してしまうからです。
seedream-4.5/image-to-image はまさにこのためにあります。実際の商品写真、あるいは複数の参照画像を同時に受け取り、自然言語の編集指示を加えて、編集後の画像を返します。商品の実際の形状、素材、ブランド識別をそのまま保ち、指示した部分だけを変更します。背景、摩耗のディテール、あるいは統一されたビジュアルアイデンティティに必要な色調調整などです。hiapi 上では、他のすべてのモデルと同じ非同期の /v1/tasks エンドポイントを通じて動作し、画像1枚あたり $0.045 です。
以下の2つの例はいずれも実際のAPI呼び出しで、正確なプロンプトと生成された画像を示しています。

再生成ではなく編集を選ぶ理由
テキストから画像生成と画像から画像への編集は、それぞれ異なる問題を解決します。
- テキストから画像生成は説明から商品をゼロから創造します。コンセプトデザインには向きますが、商品カタログには向きません。2回尋ねれば2つの異なるマグカップが得られます。
- 画像から画像への編集は実際の商品写真を出発点にします。モデルは参照画像を形状、比率、ブランド識別のグラウンドトゥルースとして扱い、プロンプトで指定された内容だけを変更します。これが実際の商品リスティングに安全な理由です。出力内の商品は依然としてあなたの商品なのです。
実際のワークフローはこうです。各SKUにつき1枚のクリーンなベース写真(ありふれたスタジオ写真で参照として十分)を保持し、必要なシチュエーションごとに seedream-4.5/image-to-image を1回実行します。ライフシーン、背景差し替え、ブランドに沿った背景、ディテール修復などです。毎回撮り直したり、ゼロから再プロンプトしたりするのではありません。
例1:背景をライフシーンへ差し替え
ベース参照:白背景に置かれたセラミック製ハンドドリップ用ドリッパーのありふれたスタジオ写真。
モデルに送る編集プロンプト:
Keep the ceramic pour-over dripper's exact shape, glaze color, and proportions
unchanged. Place it on a warm wood kitchen counter next to a steaming ceramic
mug and an open burlap coffee bag. Warm golden-hour side lighting, shallow
depth of field, soft shadows. Do not alter the dripper itself in any way —
only change the surrounding scene.
結果はドリッパーの輪郭と釉色をピクセル単位で識別可能なまま保ちつつ、ありふれた商品写真だけでは生み出せない生々しいライフシーンに配置します。撮り直しも、別途の合成工程も不要です。
例2:ブランド背景上で商品を統一
ベース参照:白いキャンバススニーカーのありふれたスタジオ写真。
モデルに送る編集プロンプト:
Keep the sneaker's stitching, eyelets, laces, and canvas texture exactly as
shown. Replace the background with a solid terracotta studio backdrop and
place the sneaker on a matching terracotta pedestal. Even, soft studio
lighting from the upper left, subtle contact shadow. Do not change the
sneaker's shape, color, or any printed details.

これが商品カタログを視覚的に統一するパターンです。背景処理を1つ選び、各SKUのベース写真を同じ編集指示に通します。商品は画像ごとに異なりますが、背景、光の方向、色調はプロンプトによって制御されるため一貫します。商品そのものではなく。
APIを直接呼び出す
seedream-4.5/image-to-image は hiapi の非同期タスクエンドポイントを通じて動作します。タスクを送信し、完了までポーリングし、結果をダウンロードします。
curl:
curl -s -X POST https://api.hiapi.ai/v1/tasks \
-H "Authorization: Bearer $HIAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedream-4.5/image-to-image",
"input": {
"prompt": "Keep the product exactly as shown. Replace the background with a solid terracotta studio backdrop and matching pedestal. Even soft studio lighting from the upper left.",
"image_urls": ["https://your-storage.example.com/base-product-photo.jpg"],
"aspect_ratio": "1:1",
"resolution": "2K"
}
}'
レスポンスは task_id を返します。GET /v1/tasks/{task_id} を status が succeeded になるまでポーリングし、output[0].url から画像URLを読み取ります。このURLには有効期限があるため、すぐにダウンロードしてください。
Python(タスク送信 + ポーリング + ダウンロード):
import os
import time
import requests
API_BASE = "https://api.hiapi.ai/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['HIAPI_API_KEY']}"}
def edit_product_image(prompt: str, image_urls: list[str],
aspect_ratio: str = "1:1", resolution: str = "2K") -> bytes:
resp = requests.post(
f"{API_BASE}/tasks",
headers=HEADERS,
json={
"model": "seedream-4.5/image-to-image",
"input": {
"prompt": prompt,
"image_urls": image_urls,
"aspect_ratio": aspect_ratio,
"resolution": resolution,
},
},
timeout=30,
)
resp.raise_for_status()
task_id = resp.json()["task_id"]
while True:
poll = requests.get(f"{API_BASE}/tasks/{task_id}", headers=HEADERS, timeout=30)
poll.raise_for_status()
data = poll.json()
if data["status"] == "succeeded":
image_url = data["output"][0]["url"]
return requests.get(image_url, timeout=30).content
if data["status"] == "failed":
raise RuntimeError(f"task {task_id} failed: {data.get('error')}")
time.sleep(3)
商品カタログを一括編集
上記のパターンはそのまま商品カタログに拡張できます。(sku, base_photo_url) のリストを保持し、各エントリに同じ編集指示を適用します。あるいはSKUごとのバリエーションを適用し、結果をSKUをキーとして書き出します。
CATALOG = [
{"sku": "dripper-ceramic-01", "base_url": "https://your-storage.example.com/dripper-01.jpg"},
{"sku": "sneaker-canvas-white", "base_url": "https://your-storage.example.com/sneaker-white.jpg"},
{"sku": "mug-stoneware-02", "base_url": "https://your-storage.example.com/mug-02.jpg"},
]
BACKDROP_PROMPT = (
"Keep the product's exact shape, materials, and any printed branding "
"unchanged. Replace the background with a solid terracotta studio "
"backdrop and matching pedestal. Even soft studio lighting from the "
"upper left, subtle contact shadow. Do not alter the product itself."
)
for item in CATALOG:
image_bytes = edit_product_image(
prompt=BACKDROP_PROMPT,
image_urls=[item["base_url"]],
aspect_ratio="1:1",
resolution="2K",
)
with open(f"{item['sku']}-branded.jpg", "wb") as f:
f.write(image_bytes)
print(f"{item['sku']}: done")
画像1枚あたり $0.045 で計算すると、50SKUのカタログに1回の背景処理を施すのに約 $2.25 かかります。各タスクは独立して動作するため、順次実行ではなくスレッドプールやタスクキューをまたいで並列化できます。
image_urls は1回の呼び出しで最大14枚の参照画像を受け付けます。そのため、単一の参照画像では複雑な編集を支えきれない場合に、同じ商品の複数アングル(正面、側面、ディテール)を一度にモデルへ渡す高度なバリエーションも可能です。
よくある質問
seedream-4.5/image-to-image は商品自体を変えますか、それともシーンだけを変えますか? 編集指示に厳密に従います。プロンプトが背景、光、シチュエーションの変化だけを記述し、商品の保持を明示的に求めていれば、商品の形状、色、印刷ディテールは複数回の編集を通じて一貫します。これが、使い捨てのコンセプト画像ではなく実際の商品カタログに使える理由です。
1回の呼び出しで何枚の参照画像を送れますか?
image_urls に最大14個の公開画像URLです。ほとんどの単一商品の編集には1枚(ベース写真)で十分です。同じ物品の複数アングルのディテールをモデルに調整させたい場合には、複数の参照画像が役立ちます。
対応している解像度は何ですか?
resolution は 2K または 4K を受け付けます。このモデルに 1K の設定はありません。
カタログ全体を一括編集するのにいくらかかりますか? 解像度の設定にかかわらず、画像1枚あたり $0.045 です。100SKUのカタログに1回の編集を施すのに約 $4.50 かかります。
一括タスクを高速化するために編集を並列実行できますか?
はい。各タスクは互いに独立しているため、複数の /v1/tasks 呼び出しを同時に送信し(アカウントのレート制限を守ってください)、それらを並列にポーリングすることが、大規模なカタログを処理する最速の方法です。
実際に試してみる
完全なパラメータリファレンスと最新の価格については、モデルページと価格ページをご覧ください。上記のタスクエンドポイントの正確なリクエスト/レスポンス形式については、タスク作成ドキュメントを参照してください。異なるモデル階層で同様のワークフローを構築している場合、seedream-5.0-lite ECガイドが、単一SKUをアンカーにしてから編集するパターンをより深く解説しています。
APIキーを取得して、実際の商品写真で最初の編集を実行してみましょう。上記のコードは今日そのままコピー&ペーストして hiapi API 上で実行できます。