使用ガイド
flux-2 でEC商品画像を作る:hiapi API 実践ガイド
hiapi の flux-2/text-to-image API を使って、そのまま出品できる商品画像を生成——クリーンな白背景、プロンプト制約の遵守、そしてカタログ全体に使えるバッチループ。
TL;DR
- これは何か:hiapi の flux-2/text-to-image でEC商品画像を生成する実践ガイドです。このページのすべての画像は、その真上に記載された正確なプロンプトから生成されています——借用したデモは一切ないので、どれも再現できます。
- なぜ flux-2 が商品画像に適しているか:プロンプト遵守と高忠実度を重視しており、まさにカタログ作業に必要なものです——正確な商品の数、特定の色、クリーンで継ぎ目のない背景、空白(文字なし)のラベルが、すべて厳密に守られます。
- モデルの事実(API 上で検証済み):flux-2 は非同期のタスクエンドポイント(
/v1/tasks)で動作します。input.resolutionはメガピクセル形式——0.5 MP、1 MP、2 MP、4 MP——をとり、1K/2Kではありません。aspect_ratioは任意で、1:1、3:2、16:9などの値を受け付けます。 - 価格(1枚あたり):
0.5 MPは $0.0375、1 MPは $0.05、2 MPは $0.075、4 MPは $0.125。最新価格は料金をご覧ください。 - 実行方法:タスク API に POST を送り、ステータスが
successになるまでポーリングし、output[0].urlから画像をダウンロードします(URL は失効するので、バイトをすぐ保存してください)。コピー&ペーストできる完全なスクリプトは記事末尾にあり、バッチループも含まれています。
なぜ flux-2 が商品写真に適しているのか
ほとんどのテキスト・トゥ・イメージモデルは、見栄えの良いマグカップを描けます。ECで問題になるのは「見栄え」ではなく正確さです。商品リスティングには正しい色、正しい商品の数、クリーンで自分でテキストを重ねる余地のある背景、そして後で実際のコピーを入れるために空白のままにされたラベルが必要です。モデルが自由に解釈すると——ボトルを1本多く描いたり、ラベルの文字をでっち上げたり、白背景に色を付けたりすると——その画像は出品できません。
flux-2 はプロンプト遵守と高忠実度をうたっており、実際にはプロンプトを文字通り厳密に実行する傾向があるということです。これこそがカタログ画像の鍵です。あなたが制約を書き、モデルがそれを「創造的に解釈」するのではなく守ります。以下のレシピはまさにこれを中心に構築されています——各レシピは特定の制約(数、色、レイアウト)に依存しており、遵守の効果を自分の目で確認できます。

レシピの読み方
各レシピは3つの部分で構成されています:1行の目標、正確なプロンプト(そのままコピー)、そして生成された画像です。すべてのプロンプトは私自身が書き、実際のタスク API を通じて flux-2 で実行しました。このモデルで一貫して効果があるいくつかの習慣:
- 背景を明示する。「継ぎ目のないライトグレーのスタジオ背景」は成り行きに任せるより優れており、画像をそのまま商品詳細ページ(PDP)に使えるようにします。
- 空白ラベルが欲しいときは「文字なし、ロゴなし」と書く。flux-2 はこれを守るので、下流で実際のブランドを追加できます。
- 数えられて検証できる制約を与える。「ちょうど3本のボトル」「左はアンバー色、中央は透明、右はティール色」——具体的な指示こそが遵守性が発揮される場所です。
- プロンプトにネガティブスペースを確保する(「上部にタイトル用の十分な余白」)。特に画像がコピーの下に配置される場合に重要です。
レシピ 1——クリーンな白背景画像
目標:最も基本的な商品リスティング画像——1つの商品、継ぎ目のない背景、均一な余白、そのまま商品ページに配置できるもの。
A single matte-white ceramic coffee mug centered on a seamless light-grey studio background, three-quarter front angle, empty and unbranded. Soft even top-light with one subtle rim highlight down the left edge, a soft grounded contact shadow beneath. Studio e-commerce packshot, perfectly centered, wide even margins on all sides, photoreal, high detail, no text, no logo.

余白と中央揃えはプロンプトから直接来ています——これらを明示的に要求することで、切り抜き結果がリスティンググリッドで使えるようになります。
レシピ 2——プロンプト遵守性テスト
目標:モデルが正確で数えられる指示に従うことを証明する——これこそが商品作業でまず flux-2 を選ぶ理由です。
Product photo of exactly three glass spray bottles standing in a row on a white acrylic surface: the left bottle filled with pale amber liquid, the middle bottle filled with clear liquid, the right bottle filled with soft teal liquid. All three have matte-black fine-mist pump tops and blank labels with no writing. Even frontal studio light, soft reflections on the acrylic, seamless white background. Photoreal commercial product photography, sharp focus, no text anywhere in the image.

数えてみてください:ボトルは3本で、4本ではありません。左から右への充填液はアンバー色、透明、ティール色——順序も正しい。ポンプトップはマットブラック。ラベルは空白なので、後から実際のコピーを追加できます。これが報酬です——あなたが指定し、モデルが守り、画像はそのまま使えます。
レシピ 3——ライフスタイル/シーン画像
目標:商品をシーンに置きつつ埋もれさせない——白背景画像と並んで商品リスティングに表示する「使用中」画像。
Lifestyle e-commerce shot of a tan leather crossbody bag resting on a pale oak cafe table beside a folded newspaper and a cup of espresso, soft morning window light from the left, warm out-of-focus cafe interior in the background with creamy bokeh. The bag is the clear hero, sharp and well-lit, staged naturally but uncluttered. Photoreal, editorial product-in-use photography, warm neutral palette, shallow depth of field, no visible brand marks or text.

主役を明示し(「バッグが明確な主役で、シャープに」)、それ以外のすべてをぼかしに押し込めることで、商品をはっきりと識別可能にしつつストーリーを語れます——これがライフスタイル画像に必要なバランスです。
レシピ 4——多角度 PDP 画像セット
目標:商品詳細ページ用の角度セット——同じ商品の複数の一貫したビューで、照明と比率が一致しているもの。
A clean product-detail-page angle set of one pair of low-top canvas sneakers in off-white, shown as three separate views arranged left to right on a seamless light-grey background: a straight side profile, a three-quarter front angle, and a top-down overhead view. Consistent soft studio lighting and identical scale across all three, even spacing, soft contact shadows. Catalog-grade e-commerce photography, photoreal, crisp, unbranded, no text or labels.

「3つのビューで一貫した照明と同じ比率」を要求することで、3枚のばらばらなレンダリングではなく、同じ商品のように見えるセットになります。本物の360度撮影機材の代わりにはなりませんが、本撮影前に PDP レイアウトを素早く組み立てるには手軽な方法です。
タスク API で flux-2 を実行する
flux-2 は hiapi の非同期タスクプロトコルを使用します——タスクを作成し、ポーリングし、結果をダウンロードします。正しく押さえるべき点は1つだけ:resolution はメガピクセル形式です。"1K" ではなく "1 MP" を送ってください。そうしないと API は 400 を返し、値は 0.5 MP / 1 MP / 2 MP / 4 MP のいずれかでなければならないと通知します。
1. タスクを作成する
curl -s https://api.hiapi.ai/v1/tasks \
-H "Authorization: Bearer $HIAPI_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"model": "flux-2/text-to-image",
"input": {
"prompt": "A single matte-white ceramic coffee mug centered on a seamless light-grey studio background, three-quarter front angle, soft even top-light, photoreal e-commerce packshot, no text, no logo",
"aspect_ratio": "1:1",
"resolution": "1 MP"
}
}'
# -> {"code":200,"data":{"taskId":"tk-hiapi-..."},"message":"success"}
2. 完了するまでポーリングし、ダウンロードする
import os, time, requests
TOKEN = os.environ["HIAPI_TOKEN"]
BASE = "https://api.hiapi.ai/v1/tasks"
HEADERS = {"Authorization": f"Bearer {TOKEN}"}
def generate(prompt, aspect_ratio="1:1", resolution="1 MP"):
# create
r = requests.post(BASE, headers=HEADERS, json={
"model": "flux-2/text-to-image",
"input": {"prompt": prompt, "aspect_ratio": aspect_ratio, "resolution": resolution},
}).json()
task_id = r["data"]["taskId"]
# poll (a single image usually lands well under two minutes)
deadline = time.time() + 600
while time.time() < deadline:
task = requests.get(f"{BASE}/{task_id}", headers=HEADERS).json()["data"]
if task["status"] == "success":
# output[0].url is a temporary link — download the bytes now
url = task["output"][0]["url"]
return requests.get(url, timeout=120).content
if task["status"] == "fail":
raise RuntimeError(task.get("error"))
time.sleep(5)
raise TimeoutError(task_id)
img = generate("A single matte-white ceramic coffee mug on a seamless light-grey background, photoreal e-commerce packshot, no text")
open("mug.jpg", "wb").write(img)
output[0].url内の URL にはexpireAtタイムスタンプが付いています——短期リンクです。バイトをすぐダウンロードして自分のストレージに保存してください。オンラインの商品リスティングにホットリンクしないでください。
カタログ全体をバッチ生成する
実際のショップでは、1枚だけではなく、SKU ごとに1枚作ります。プロンプトのリストを管理し、上記の generate() 関数を再利用して、各結果を SKU 名で保存します:
catalog = {
"SKU-1001": "A single matte-white ceramic coffee mug on a seamless light-grey studio background, three-quarter angle, soft even top-light, photoreal e-commerce packshot, no text, no logo",
"SKU-1002": "A tan leather crossbody bag on a seamless light-grey studio background, front-on, soft studio light, grounded contact shadow, photoreal packshot, no visible brand marks",
"SKU-1003": "A pair of off-white low-top canvas sneakers, side profile, seamless light-grey background, crisp catalog lighting, photoreal, unbranded, no text",
}
for sku, prompt in catalog.items():
img = generate(prompt, aspect_ratio="1:1", resolution="1 MP")
open(f"{sku}.jpg", "wb").write(img)
print(f"{sku} done")
規模を拡大する前に、知っておくべきことがいくつかあります:
- 解像度がコストを決めます。
1 MPでは1枚あたり $0.05。追加のディテールが価値を持つフラッグシップ画像にのみ2 MP($0.075)や4 MP($0.125)に上げてください。200 SKU のカタログは1 MPで約 $10 です。予算を立てる前に最新の数値を料金で確認してください。 - タスクを並行実行する。各 SKU は独立したタスクです——複数のタスクを作成し、1つずつではなく並行してポーリングすれば、大量バッチも短い実時間で完了します。
- 一貫した「スタイル」句を保つ。上記の各プロンプトで共有されている末尾(「継ぎ目のないライトグレーのスタジオ背景……フォトリアルな白背景画像、文字なし」)に注目してください。この文言を固定することで、バッチ全体が寄せ集めではなく1つのカタログに見えます。
要点
- flux-2 の商品作業における強みはあなたの文字通りの要求を厳密に実行すること——正確な数、正確な色、空白ラベル——なので、制約を明示的に書いて守らせましょう。
- プロンプトで常に背景を明示し、ネガティブスペースを確保しましょう。これによりレンダリング画像がそのまま商品リスティングに使えます。
- タスク API では、
resolutionをメガピクセル(1 MP)で送り、/v1/tasks/{id}をsuccessになるまでポーリングし、output[0].urlが失効する前にダウンロードします。 - 価格は解像度とともに上がります——カタログのバッチには
1 MPを使い、2 MP/4 MPはフラッグシップ画像に取っておきましょう。
試す準備はできましたか?キーを取得し、model を flux-2/text-to-image に指定し、カタログをバッチ生成する前に料金ページで最新のレートを確認してください。