HiAPI
ブログ

使用ガイド

Flux-2-Klein-4b 画像から画像への変換をEC商品写真に活用

hiapi API 上で flux-2-klein-4b/image-to-image を使い、既存の商品写真を編集する実践ワークフロー——実際のプロンプト、実際の出力、そしてバッチ処理用コードを収録。

Aug 12, 2026
Flux-2-Klein-4b 画像から画像への変換をEC商品写真に活用

商品写真を撮り直すのではなく編集する理由

1枚の商品メイン画像だけで、商品リスティングに必要なすべてをカバーできることはほとんどありません。ECプラットフォームのグリッド表示には、背景が白くクリーンな画像が必要です。ブログ記事や広告には、同じ商品が生活シーンの中に置かれている画像が必要です。季節キャンペーンには、まだ存在しないかもしれない色や素材のバリエーションが必要です。バリエーションごとに撮り直すのは時間もコストもかかります——しかも大抵の場合、商品の幾何構造(形状、ロゴの位置、比率)はまったく変えるべきではなく、背景か1つの素材だけを変えればよいのです。

これこそが、hiapi API 上の flux-2-klein-4b/image-to-image が得意とするタスクです。既存の商品写真と編集指示を受け取り、変更を要求していない部分はすべてそのままにした新しい画像を生成します。これは FLUX.2 [klein] シリーズの中でも高速でコスト効率の高いティアであり、商品をゼロから生成するときに選ぶモデルではありませんが、気に入ったベース写真がすでにあるなら最適です。

以下は、同じ開始写真に対して実行した2つの実際の編集例です。使用した正確なプロンプトと、このフローを商品カタログ全体で実行するためのバッチスクリプトも掲載します。

開始写真

これが以下の各編集のベースとなる画像です。無地のグレーのスタジオ背景で撮影されたマットブラックのヘッドホン——典型的な商品リスティングの「ビフォア」写真であり、より多くのバリエーションが必要な状態です。

編集1:商品を生活シーンの中に配置する

使用したプロンプト:

ヘッドホンを完全にそのまま保つ(形状、マットブラックの仕上げ、ロゴ、比率は一切変更しない)。無地のグレーのスタジオ背景を暖かな生活シーンに置き換える:ヘッドホンを明るいオーク材の木製デスクの上に置き、そばに閉じた MacBook、小さな観葉植物、陶器のコーヒーカップを配置し、左側から柔らかな自然な窓光が差し込む、浅い被写界深度、居心地のよいホームオフィス風のエディトリアル商品写真。

重要なのは最初の文です。新しい背景を描写する前に、どの部分を完全に一致させなければならないか(形状、仕上げ、ロゴ、比率)をモデルに明示的に伝えます。このアンカーがないと、画像から画像へのモデルはシーンと一緒に商品の比率や仕上げまで変えてしまうことがあります。これがあれば、ヘッドホンはそのまま保たれ、周囲の環境だけが変わります。

編集2:形状を変えずに素材を置き換える

使用したプロンプト:

ヘッドホンの形状、比率、ロゴ、撮影アングルを完全にそのまま保つ。イヤーパッドとヘッドバンドのクッションの素材と色だけを、マットブラックから目に見えるステッチ入りのタン色レザー質感に変更し、ハウジング/ヘッドバンドアームはマットブラックのままとする。無地のグレーのスタジオ背景とライティングはそのまま保ち、ECカタログ用の商品写真とする。

この編集は生活シーンのものより範囲が狭くなっています。背景、ライティング、撮影アングルは同じで、イヤーパッドとヘッドバンドのクッションの素材だけがマットブラックからタン色レザーに変わります。指示をこれほど正確に限定すること(正確な部品を指定し、正確な素材を指定する)が、商品の残りの部分——ハウジング、ロゴ、輪郭——を変化させない秘訣です。

これらの編集が信頼できる理由

  • 何が変わるかだけでなく、何が変わらないかを指定する。 編集指示の前に「形状、ロゴ、比率をそのまま保つ」と加えることは、新しい背景や新しい素材についてのどんな詳細な描写よりも効果を発揮します。
  • ターゲットについて文字通りに表現する。 「目に見えるステッチ入りのタン色レザー質感」は、「高級感を出して」よりもモデルに解釈の余地を残しません。
  • 1つのプロンプトにつき1つの編集だけを行う。 背景の置き換えと素材の置き換えは個別に実行すればうまく機能しますが、無関係な複数の変更を1つのプロンプトに積み重ねると、アンカーがぼやけて不要なディテールがずれやすくなります。
  • 各バリエーション間で同じベース写真を再利用する。 このガイドのすべての画像は同じソース写真から始まっており、だからこそ同じ商品リスティングやキャンペーンで一緒に使えるのです。

商品カタログのバッチ編集

上記の2つの編集は同じリクエスト構造を使用しています。既存の画像 URL と編集プロンプトを 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-4b/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],
                "resolution": "1 MP",
            },
        },
        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 you need.
batch = [
    ("https://cdn.example.com/products/headphones-black.jpg",
     "Keep the product exactly as-is (shape, finish, logo, proportions). "
     "Replace the background with a warm lifestyle desk scene, soft natural "
     "light from the left.",
     "headphones-lifestyle.jpg"),
    ("https://cdn.example.com/products/headphones-black.jpg",
     "Keep the shape, proportions, logo, and camera angle exactly as they "
     "are. Change only the ear cushion and headband padding material to tan "
     "brown leather with visible stitching; background and lighting stay "
     "the same.",
     "headphones-tan-leather.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 自体であり、クライアント側ではありません)。

料金

flux-2-klein-4b/image-to-image は画像単位で課金され、出力解像度が上がるほど高くなります。2026-08 時点で、このガイドの2つの編集で使用した 1MP ティアの料金は1画像あたり $0.00715 です。完全な解像度ティア(0.25MP から 4MP)や他のモデルの現在の料金については料金ページをご確認ください。価格は変更される可能性があります。

よくある質問

画像から画像への変換で商品の形状やロゴは変わりますか? 変更しないよう明示的に指示すれば変わりません。プロンプトの冒頭で固定すべき部分(形状、比率、ロゴ)を明確に指定することが、これらの要素を安定させる秘訣です——明示しないことが、意図しないずれを引き起こす最も一般的な原因です。

カタログ編集にはどの解像度を使うべきですか? 1MP はほとんどの Web リスティングや生活シーンコンテンツに十分で、コストも抑えられます。ティアごとに料金が高くなるため、密にトリミングしたり印刷したりする画像に限って 2MP や 4MP に上げてください。

カタログ全体に対して一度にこのフローを実行できますか? はい——上記のバッチスクリプトがそのパターンです。(image, prompt, output name) タプルをループし、それぞれを独立したタスクとして送信します。巨大な順次ループではなく、少数のリクエストを並行実行してください。

テキストから画像への生成で商品をゼロから作るのとはどう違いますか? テキストから画像への生成はゼロから始まるため、既存商品の正確な幾何構造と一致する保証はありません。画像から画像への変換は実際の写真から始まるため、変更を要求していない形状、ロゴ、比率は構造上保持されます——これこそが商品カタログに必要なことです。

自分で試してみる

プロンプトを正確に限定すれば、上記の2つの編集はそれぞれ API 呼び出し1回で済みます。商品写真がすでにあり、撮り直さずに生活シーンや素材のバリエーションを生成したい場合は、hiapi ドキュメントのクイックスタート が数分で認証と最初のリクエストまで案内します。

永続的なAIアーティファクトで開発を始める

APIキーを取得して、タスクベースの1つのAPIで画像・動画・音声モデルを呼び出せます。

APIドキュメントを読む