使用ガイド
Flux-2-Klein-9b 画像編集:EC 製品写真の処理
hiapi API 上で flux-2-klein-9b/image-to-image を使い、既存の製品写真を編集する実践ワークフロー——実際のプロンプト、実際の出力、バッチコードを収録。
新しい写真を生成するのではなく製品写真を編集する理由
ほとんどの EC 商品カタログが直面している問題は「ゼロから生成する」ことではなく、 「1 枚の写真を 5 通りの用途に使う」ことです。売り手はメイン画像を 1 枚撮影します。 たいていは散らかったカウンターの上や平凡な光量の下で撮られ、 その後、モールのグリッド表示用のきれいな純白背景バージョン、 SKU ごとのカラーバリエーション、広告や SNS 用のシーン画像が必要になります。 バリエーションごとに撮り直すのは遅く、テキストから画像を生成する方法で毎回ゼロから作ると、 実際に販売している製品と完全に一致する結果を保証できません。
flux-2-klein-9b/image-to-image はまさにこの 2 つ目の問題を解決するために作られました。既存の製品写真と 編集指示を受け取り、変更を求めていないすべてのもの ——形状、比率、キャップ、ロゴ——がそのまま保たれた新しい画像を返します。hiapi 上の FLUX.2 [klein] シリーズの中でも大きく、より高い忠実度を持つティアで、品質と価格の両面で flux-2-klein-4b/image-to-image を上回ります。
以下は 1 枚の開始写真から始める完全な 3 ステップのワークフローです。 まず散らかった「変更前」写真をカタログ向けのメイン画像にクリーンアップし、次に そのメイン画像からカラーバリエーションとシーンバリエーションを展開します——3 回の実際の編集、 3 本の実際のプロンプト、カタログ全体で同じパターンを再利用するためのバッチスクリプト 1 つ。
開始写真

これは売り手が実際にアップロードするような「変更前」写真です。ブラシ加工の ステンレス製断熱ウォーターボトルにマットブラックのスクリューキャップ、 散らかったキッチンカウンターの上で、セラミックのコーヒーマグと 折りたたんだ青い布巾の隣に置かれ、暖色の天井照明と冷色の窓からの昼光が混ざって 不均一な色かぶりが生じ、カウンターにはかすかな反射と指紋の汚れ、 構図は中心から外れ、カジュアルな素人スナップの品質で、プロの写真ではありません。
この開始写真を生成するために使ったプロンプト( flux-2-klein-9b/text-to-image 経由):
マットブラックのプラスチック製スクリューキャップが付いたブラシ加工ステンレス製断熱ウォーターボトルを、セラミックのコーヒーマグと折りたたんだ青い布巾の隣、散らかったキッチンカウンターの上に置いた、やや不完全なスマホ写真。暖色の天井照明と冷色の窓からの昼光が混ざり、不均一な色かぶりが生じている。カウンターにはかすかな反射と指紋の汚れ。中心から外れた構図、カジュアルな素人スナップの品質、プロの写真ではない
ステップ 1:スタジオでのクリーンアップ——散らかったカウンターからカタログ向けへ

使用したプロンプト:
ウォーターボトルはそのまま維持する。同じブラシ加工ステンレス製の本体、同じマットブラックのスクリューキャップ、同じ比率と形状。散らかったカウンター、コーヒーマグ、布巾を完全に除去する。背景を継ぎ目のない純白のスタジオ背景に置き換える。照明を正面からの均一で影のないスタジオ照明に補正し、ボトルをフレーム中央に配置、シャープなフォーカス、反射なし、汚れなし、クリーンな EC カタログ向け製品写真。
これが実際のワークフローで最も重要な編集です。1 回の呼び出しで スマホのスナップ写真をモール向けの白背景画像に変え、しかも ボトルの形状とキャップはまったく変わりません。このきれいな結果が メイン画像になります——このガイドのすべての下流バリエーションはこの 画像から生成され、元の散らかった写真からではないため、ずれが複数の 編集で蓄積しません。
ステップ 2:きれいなメイン画像からカラーバリエーションを生成

使用したプロンプト:
ボトルの形状、スクリューキャップ、比率、純白のスタジオ背景はそのまま維持する。本体の色と仕上げだけをブラシ加工ステンレスからマットなセージグリーンに変更し、黒いキャップは変更しない。同じ照明と同じ影を維持し、EC カタログ向け製品写真。
これがマルチ SKU のシナリオです。ある製品ラインに 5 色あっても、 5 回の個別撮影は不要です。きれいなメイン画像から始め、 プロンプトを色の変更だけに限定することで、キャップ、比率、照明、 背景を完全に固定したまま、本体素材の色だけを変えられます。
ステップ 3:同じメイン画像からシーンバリエーションを生成

使用したプロンプト:
ウォーターボトルはそのまま維持する。ブラシ加工ステンレス製の本体、マットブラックのキャップ、比率は変更しない。無地の白いスタジオ背景をアウトドアのライフスタイルシーンに置き換える。ボトルはハイキングコース脇の苔むした花崗岩の上に置かれ、松の木々から柔らかな早朝の日差しが差し込み、浅い被写界深度、暖かみのある自然なカラーグレーディング、アウトドアのライフスタイル製品写真。
同じメイン画像、異なる目的地。これは広告、SNS 投稿、 ランディングページのメインビジュアル用の画像です——商品カタログの背景ではなく アウトドアのライフスタイル環境で、製品の同一性は上記各プロンプトの同じ 「そのまま維持する」というアンカー文によってしっかり固定されています。
これらの編集が信頼できる理由
- 先に変わらない部分を固定し、それから変更を記述する。上記の各プロンプトは 冒頭で変更してはいけない部分——形状、キャップ、 比率——を述べ、その後に新しい背景や色に触れています。 この順序こそが、製品の同一性を 3 回の 連続編集で固定し続け、編集ごとにさらにずれていくのを防ぐ鍵です。
- 元の写真ではなく、きれいなメイン画像からチェーン編集する。ステップ 2 とステップ 3 は どちらも元の散らかった写真ではなく、ステップ 1 の出力から始まります。 きれいで正しいベースから編集を始めるほうが、1 本のプロンプトで散らかりの修正 と背景の置き換えを同時に行おうとするより信頼できます。
- 各プロンプトは 1 つの変更だけに限定する。カラーバリエーションは色だけを変更し、 シーンバリエーションは背景だけを変更します。どちらのプロンプトも 無関係な 2 つの変更を同時に求めません。
- flux-2-klein-9b/image-to-image は 1 回の呼び出しにつき参照画像を 1 枚だけ受け付けます。
複数の参照画像を受け付ける一部の編集モデルとは異なり、
このモデルのスキーマは意図的に簡潔に保たれています。
prompt文字列 1 つと、 最大 1 枚の画像を含むimage_urls配列だけです。画像編集エンドポイントにはresolutionやaspect_ratioパラメータはありません——出力は 入力写真のサイズに従うため、プロンプトとソース画像以外に 設定するものはありません。
商品カタログのバッチ編集
上記の 3 つの編集は同じリクエスト形状を共有します。参照画像 URL 1 つ
と編集プロンプト 1 つを、hiapi の非同期タスクエンドポイントに送信します。以下のコードスニペットは
(base_image_url, prompt, output_name) タプルのリスト上でこのパターンをループします——
これこそが、商品カタログ全体を一括で
クリーンアップ、カラーバリエーション、シーンバリエーションに処理するときに使う構造です。
import os
import time
import requests
API_BASE = "https://api.hiapi.ai/v1/tasks"
TOKEN = os.environ["HIAPI_API_KEY"]
MODEL = "flux-2-klein-9b/image-to-image"
def submit_edit(base_image_url: str, prompt: str) -> str:
resp = requests.post(
API_BASE,
headers={"Authorization": f"Bearer {TOKEN}"},
json={
"model": MODEL,
"input": {
"prompt": prompt,
"image_urls": [base_image_url],
},
},
timeout=60,
)
resp.raise_for_status()
return resp.json()["data"]["taskId"]
def wait_and_download(task_id: str, out_path: str, poll_s: int = 5, timeout_s: int = 300) -> None:
deadline = time.time() + timeout_s
while time.time() < deadline:
r = requests.get(
f"{API_BASE}/{task_id}",
headers={"Authorization": f"Bearer {TOKEN}"},
timeout=30,
)
task = r.json().get("data", {})
if task.get("status") == "success":
url = task["output"][0]["url"]
img = requests.get(url, timeout=120)
with open(out_path, "wb") as f:
f.write(img.content)
return
if task.get("status") == "fail":
raise RuntimeError(task.get("error"))
time.sleep(poll_s)
raise TimeoutError(f"task {task_id} did not finish in {timeout_s}s")
# One entry per product / variant. Chain color and lifestyle edits from a
# clean master, not the raw source photo, for best consistency.
batch = [
("https://cdn.example.com/products/bottle-raw.jpg",
"Keep the bottle exactly as it is: same body, same cap, same "
"proportions. Remove the cluttered background completely. Replace it "
"with a seamless pure white studio background and even, shadowless "
"lighting, clean e-commerce catalog product photography.",
"bottle-clean-master.jpg"),
("https://cdn.example.com/products/bottle-clean-master.jpg",
"Keep the bottle's shape, cap, proportions, and white studio "
"background exactly as they are. Change only the body color to matte "
"sage green, keep the cap unchanged.",
"bottle-sage-green.jpg"),
("https://cdn.example.com/products/bottle-clean-master.jpg",
"Keep the bottle exactly as it is: body, cap, proportions unchanged. "
"Replace the white studio background with an outdoor lifestyle scene "
"on a mossy rock beside a hiking trail, soft morning sunlight.",
"bottle-lifestyle-hiking.jpg"),
]
for base_url, prompt, out_name in batch:
task_id = submit_edit(base_url, prompt)
wait_and_download(task_id, out_name)
print(f"saved {out_name}")
各タスク呼び出しは独立しているため、商品カタログ全体では通常、
厳密に 1 つずつ順番にループするのではなく、小さなプールで並行実行します
——ボトルネックはタスク API の処理時間であり、クライアント側ではありません。なお、
ステップ 2 とステップ 3 はどちらも bottle-clean-master.jpg、つまりステップ 1 の
出力を参照している点に注意してください。元のアップロード画像ではなく、クリーンアップ後の結果から
チェーン生成することが、カラーバリエーションとシーンバリエーションを互いに
一致させる鍵です。
料金
flux-2-klein-9b/image-to-image は画像単位で課金され、 出力サイズに関係なく一律の価格です。2026-08 時点で、画像編集 1 回あたり 1 枚につき $0.03143 です。対になるテキストから画像のエンドポイント(このガイドで開始写真の生成に使用) は 1 枚につき $0.00858 です。どちらも、より小さな flux-2-klein-4b/image-to-image ティアの編集 1 回あたり $0.00715 を明確に上回ります——9B はこのコスト差と引き換えに、特に素材や色の変更など 細部が密な編集で、より高い出力忠実度を得ます。すべてのモデルの 現在の料金については 料金ページ を確認してください。価格は変更される可能性があります。
よくある質問
flux-2-klein-9b/image-to-image は 1 回の呼び出しで複数の参照画像をサポートしますか?
いいえ。スキーマは image_urls で 1 枚の画像のみを受け付けます(maxItems: 1)。
2 枚の独立したソース画像を結合する必要がある編集には、このモデルは適していません
——背景の置き換え、色の変更、クリーンアップなど、単一参照画像の編集のために作られています。
出力解像度を制御できますか?
いいえ。画像編集エンドポイントには resolution や aspect_ratio
パラメータはありません。出力は入力写真のサイズに従います。特定の
出力サイズが必要な場合は、送信前にソース画像のサイズを調整するか、
後で結果のサイズを変更してください。
flux-2-klein-4b/image-to-image との違いは何ですか? リクエスト形状は同じで、単一参照画像のスキーマも同じですが、9B は編集 1 回あたりの コストが高く($0.03143 対 $0.00715)、その代わりに高い忠実度を得ます—— 商品カタログの編集が単純な背景の置き換えではなく、細かいディテール(素材のテクスチャ、色の正確さ) を伴う場合に適した選択です。
なぜ毎回元の写真を編集するのではなく、「きれいなメイン画像」からチェーン編集するのですか? 散らかった元画像から編集すると、モデルは同じ処理の中で散らかりの修正と 新しい変更の適用を同時に行う必要があり、不要な ずれが生じる可能性が高まります。一度クリーンアップし、その単一の きれいな結果から各バリエーションを分岐生成すれば、すべての下流画像を互いに一致させられます。
商品カタログ全体に対して一括で実行できますか?
はい——上記のバッチスクリプトがそのパターンです。(image, prompt, output name) タプルをループし、それぞれを独立したタスクとして送信し、長い順次ループではなく
少数のリクエストを並行実行します。
自分で試してみる
このガイドの各編集——クリーンアップ、カラーバリエーション、シーンバリエーション——はそれぞれ 1 回の API 呼び出しで、 1 枚の開始写真からチェーン生成されます。既存の 製品写真があり、撮り直さずにカタログ向けのバリエーションを手に入れたい場合は、 hiapi ドキュメントのクイックスタート が 認証と最初のリクエストについて説明しており、数分で完了できます。