チュートリアル
FASHN Try-On v1.6 API:動作する curl と Python のリクエスト例
FASHN Try-On v1.6 は hiapi 上のバーチャル試着(image-to-image)モデルです。人物写真と衣類写真の 2 枚を入力すると、合成された着用イメージを返します。本記事は開発者向けの fashn try-on api 実践ガイドです。実際に完走した /v1/tasks リクエスト、オンラインパラメータバリデーターで照合済みの完全な入力 schema、そしてパラメータ表には書かれていない本番環境の詳細を含みます。
モデルページとオンライン体験:FASHN Try-On v1.6。
1. 構築する内容 + 前提条件
全体の流れは標準的な非同期タスクパターンです。まず POST でタスクを作成し、タスクが終端状態になるまでポーリングし、その後出力画像をダウンロードします。
必要なもの:
- API key(
sk-...)。hiapi クイックスタート から取得できます。 - 公開アクセス可能な 2 つの画像 URL:
model_image用の人物写真と、garment_image用の衣類写真。
2. 最小動作例
タスク作成(curl)
curl -s https://api.hiapi.ai/v1/tasks \
-H "Authorization: Bearer sk-YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "fashn-tryon-v1.6",
"input": {
"model_image": "https://cdn.example.com/person.jpg",
"garment_image": "https://cdn.example.com/shirt.png"
}
}'
レスポンス——これは受け付けられたタスクであり、完成画像ではありません:
{"code":200,"data":{"taskId":"tk-hiapi-01M5D3JTGD12PFF3SFM9JRNPAZ"},"message":"success"}
model_image と garment_image が唯一の必須フィールドです。その他のフィールドにはデフォルト値があります。
結果のポーリング(curl)
curl -s https://api.hiapi.ai/v1/tasks/tk-hiapi-01M5D3JTGD12PFF3SFM9JRNPAZ \
-H "Authorization: Bearer sk-YOUR_KEY"
タスクが完了すると data.status: "success" が返り、画像は data.output[0].url にあります:
{
"code": 200,
"data": {
"status": "success",
"model": "fashn-tryon-v1.6",
"storage": "temp",
"output": [
{ "type": "image", "url": "https://temp.hiapi.ai/.../...-0.png", "expireAt": 1793119887 }
]
},
"message": "success"
}
ここでは expireAt が重要です。出力は一時ストレージに保存されます(TTL 約 7 日)。これらのバイトデータを直ちにダウンロードまたは転送してください。直接ホットリンクしないでください。
Python でエンドツーエンド実行
import time, requests
API = "https://api.hiapi.ai"
KEY = "sk-YOUR_KEY"
HEADERS = {"Authorization": f"Bearer {KEY}", "Content-Type": "application/json"}
def try_on(model_image, garment_image, **opts):
payload = {
"model": "fashn-tryon-v1.6",
"input": {"model_image": model_image, "garment_image": garment_image, **opts},
}
r = requests.post(f"{API}/v1/tasks", json=payload, headers=HEADERS, timeout=30)
r.raise_for_status()
task_id = r.json()["data"]["taskId"]
while True: # poll until terminal
time.sleep(3)
d = requests.get(f"{API}/v1/tasks/{task_id}", headers=HEADERS, timeout=30).json()["data"]
if d.get("status") == "success":
return d["output"][0]["url"]
if d.get("status") in ("fail", "error"):
raise RuntimeError(f"task failed: {d}")
url = try_on(
"https://cdn.example.com/person.jpg",
"https://cdn.example.com/shirt.png",
category="tops", mode="quality",
)
print(url)
3. 入力 schema(オンラインバリデーターで検証済み)
fashn-tryon-v1.6 はクローズド schema を使用します。以下に列挙されていないフィールドは拒否されるため、hiapi が公開していない FASHN ネイティブの追加パラメータを持ち込むことはできません。
| フィールド | 必須か | 型 | 受け付ける値 |
|---|---|---|---|
model_image |
はい | string (URL) | 人物写真 |
garment_image |
はい | string (URL) | 衣類写真 |
category |
いいえ | enum | tops, bottoms, one-pieces, auto |
mode |
いいえ | enum | performance, balanced, quality |
garment_photo_type |
いいえ | enum | auto, model, flat-lay |
output_format |
いいえ | enum | png, jpeg |
seed |
いいえ | integer | 再現性のために使用 |
segmentation_free |
いいえ | boolean | — |
これをどう確認したか:{"model":"fashn-tryon-v1.6","input":{}} を送信すると次が返ります。
invalid input: model_image: missing required field "model_image"; garment_image: missing required field "garment_image"
上記の各列挙値は無効な値を送信して確認しました。たとえば mode: value must be one of 'performance', 'balanced', 'quality' です。num_samples、num_images、または表にない任意のフィールドを渡すと additional properties '...' not allowed が返ります——複数サンプルのオプションはありません。1 回のリクエストで 1 枚の画像が返ります。異なる結果が必要な場合は、複数回の呼び出しで seed を変えてください。
4. 本番環境の実践
- 検証は課金より前に行われます。 無効な入力は HTTP
400とレスポンスボディ{"code":400,"data":null,"error_code":"INVALID_REQUEST","message":"invalid input: ..."}を返し、タスクは作成されません——不正な形式のリクエストには課金されません。有効なリクエストはcode:200とtaskIdを返します。 - 再送信ではなく再ポーリングを。
POST /v1/tasksのたびに新しい(課金対象の)タスクが作成されます。ポーリングリクエストがタイムアウトした場合は、すでに持っているtaskIdのポーリングを続けてください。レスポンスの喪失はタスクの失敗を意味しません。 - ポーリングの代わりにコールバックを。 バッチ処理では、自分でポーリングする代わりにコールバックを登録し、タスクが最終状態に達したときに hiapi から通知を受け取れます——具体的なフィールドは 統一非同期 API リファレンスドキュメント を参照してください。上記の例はポーリングを使用しています。
5. 実際に 1 回実行した結果
上記の最小リクエストを実行しました——768×1152 の人物写真と 768×1152 の衣類画像で、mode と category を省略しました:
- レイテンシ: タスクオブジェクト上で
createdからcompletedまで約 13 秒。 - 出力: 単一の PNG、サイズは 768×1152、つまり縦向きの画像です。モデルページには出力サイズは人物写真に従うと記載されており(検証済みの実行では 972×1296 と 768×1152 の 2 サイズが測定されています)、今回の実行もこれと一致しました——
width/height/aspect_ratioフィールドはないため、人物写真のサイズが出力サイズを決めます。 - ステータスの経路: ポーリング中はまず
archivingが表示され、その後successに変わりました。storageはtempでした。 - デフォルト値は確かに有効です。
modeとcategoryを省略しても成功したため、この 2 つの画像 URL が本当に唯一必須の入力です——モデルは衣類の種類を自動認識します。
課金は出力画像の枚数に基づいて計算され、選択した mode によって変わりません。現在の料金は 料金ページ を確認してください。
関連リンク
よくある質問
どのフィールドが必須ですか? model_image と garment_image のみで、どちらも公開アクセス可能な URL である必要があります。
1 回の呼び出しで複数のバリエーションを生成できますか? いいえ——num_samples と num_images は schema によって拒否されます。1 回のリクエストで 1 枚の画像が返ります。異なる結果を得るには呼び出し間で seed を変えてください。
出力サイズを制御するには? 直接設定することはできません。結果は人物写真のサイズに従います——入力した 768×1152 は 768×1152 の出力を生成しました。
結果 URL の有効期間はどれくらいですか? 出力は一時ストレージに保存され、expireAt(約 7 日)が付きます。これらのバイトデータを直ちにダウンロードしてください。
品質モードで価格は変わりますか? いいえ——performance、balanced、quality のいずれでも、出力画像の枚数に基づいて課金されます。
関連記事
すべての記事を見る →-
チュートリアル
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 チュートリアル
リクエスト優先の実践デモ:プロンプトから動画クリップへの呼び出しを構築し、リクエストを送信し、完了状態をポーリングし、結果をダウンロードする