チュートリアル
Kling 2.5 Turbo 画像から動画へのAPIの使い方(curl + Python)
実行可能なファーストフレームからの動画生成ウォークスルー:タスクの作成、ポーリング、MP4のダウンロード——そして厳格な入力スキーマの完全なリスト。
TL;DR
kling-2.5-turbo/image-to-videoは1枚のファーストフレーム画像を5秒または10秒の動画クリップに変換します。2枚目の画像URLを渡すと最終フレームを固定できます。このモデルはHiAPIの非同期タスクAPI上で動作します——まずPOST /v1/tasksでタスクを作成し、次にGET /v1/tasks/{taskId}をポーリングして生成されたMP4を取得します。- 出力料金は1秒あたり$0.06です:5秒クリップは$0.30、10秒クリップは$0.60。課金は完了した出力の秒数に基づき、入力が無効で失敗したタスクは出力を生成せず、課金もされません。
- 入力スキーマは厳格かつ閉鎖的です。必須:
image_urls(配列、1〜2項目——複数形であることに注意)、prompt、duration(5 または 10 のみ)。オプション:aspect_ratio、negative_prompt、cfg_scale。単数形のimage_urlは即座に拒否されます。 - このモデルはHiAPIで公開済みです:モデルページを開く でまずブラウザ上で試してから、以下のAPIに接続してください。
構築するものと準備するもの
この記事を読み終えると、動作するファーストフレーム → 動画の呼び出しが手に入ります:画像とモーションプロンプトを送信し、タスクをポーリングし、MP4をダウンロードします。まず2つのものを準備する必要があります:
- HiAPIダッシュボード からAPIキーを取得——すべてのリクエストは
Authorization: Bearer sk-...の形式で送信する必要があります。まだ作成していない場合は、認証ドキュメント を参照してください。 - 公開アクセス可能なファーストフレーム画像のURL。作成呼び出しは入力の構造のみを検証します。画像は実際にはタスク実行時に取得されるため、localhost やプライベートURLは後で失敗するタスクを作成してしまいます(詳細は後述)。
これは画像から動画への生成なので、モデルIDは kling-2.5-turbo/image-to-video です。プロンプトのみから動画を生成したい場合は、別の テキストから動画へのエンドポイント があります。
最小限の動作例(curl)
タスクを作成します。モデル名はトップレベルに置き、モデルが読み取るすべての内容は input 内に置きます:
curl -s -X POST https://api.hiapi.ai/v1/tasks \
-H "Authorization: Bearer sk-YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "kling-2.5-turbo/image-to-video",
"input": {
"prompt": "The perfume bottle rotates slowly on the marble stand, light glints across the glass, petals drift down, slow orbit",
"image_urls": ["https://static.hiapi.ai/gallery/2026/10/4852c542c4447593.jpg"],
"duration": 5,
"aspect_ratio": "9:16"
}
}'
作成に成功するとタスクIDが返されます——動画ではありません:
{ "code": 200, "data": { "taskId": "tk-hiapi-01M5CW..." }, "message": "success" }
次に、status が終態になるまで詳細エンドポイントをポーリングします:
curl -s https://api.hiapi.ai/v1/tasks/tk-hiapi-01M5CW... \
-H "Authorization: Bearer sk-YOUR_KEY"
タスク実行中は非終態のステータスが表示されます。完了後、data.output[0].url の下でMP4 URLを取得できます:
{
"code": 200,
"data": {
"status": "success",
"model": "kling-2.5-turbo/image-to-video",
"storage": "temp",
"output": [{ "url": "https://temp.hiapi.ai/kling-i2v/tk-hiapi-01M5CW.mp4?expireAt=1761350400" }]
},
"message": "success"
}
この output[0].url は一時リンクです——アプリ内で直接ホットリンク参照するのではなく、すぐにダウンロードしてください(本番環境の注意事項 を参照)。
最小限の動作例(Python)
SDKは不要です——HiAPIタスクAPIは純粋なHTTPインターフェースなので、標準ライブラリで十分です:
import time
import requests
API = "https://api.hiapi.ai/v1/tasks"
HEADERS = {"Authorization": "Bearer sk-YOUR_KEY", "Content-Type": "application/json"}
def create(image_url: str, prompt: str, duration: int = 5) -> str:
payload = {
"model": "kling-2.5-turbo/image-to-video",
"input": {
"prompt": prompt,
"image_urls": [image_url], # 1–2 items; 2nd = last frame
"duration": duration, # 5 or 10 only
},
}
r = requests.post(API, json=payload, headers=HEADERS, timeout=60)
body = r.json()
task_id = (body.get("data") or {}).get("taskId")
if not task_id:
raise RuntimeError(f"create failed: {body}")
return task_id
def wait(task_id: str, timeout_s: int = 600, interval: int = 5) -> str:
deadline = time.time() + timeout_s
while time.time() < deadline:
r = requests.get(f"{API}/{task_id}", headers=HEADERS, timeout=30)
task = r.json().get("data") or {}
status = task.get("status")
if status == "success":
return task["output"][0]["url"]
if status == "fail":
err = task.get("error") or {}
raise RuntimeError(f"task failed: {err.get('code')} {err.get('message')}")
time.sleep(interval)
raise TimeoutError(f"task {task_id} did not finish in {timeout_s}s")
task_id = create(
"https://static.hiapi.ai/gallery/2026/10/4852c542c4447593.jpg",
"slow orbit around the product, light glints across the glass, petals drift down",
duration=5,
)
mp4_url = wait(task_id)
# Download immediately — the URL is short-lived.
with requests.get(mp4_url, stream=True, timeout=120) as resp:
resp.raise_for_status()
with open("clip.mp4", "wb") as f:
for chunk in resp.iter_content(1 << 16):
f.write(chunk)
print("saved clip.mp4")
本番環境の注意事項
ポーリングかコールバックを使用する。 5秒ごとのポーリング(上記の通り)が最もシンプルな方法であり、例で使用している方法です。結果をプッシュ通知で受け取りたい場合は、作成呼び出しがトップレベルの callback オブジェクト——{"url": "https://you/webhook", "when": "final"}——を受け付け、タスクが終態になるとHiAPIがあなたのエンドポイントにPOSTリクエストを送信します。正確なwebhookの契約については タスク作成ドキュメント を参照してください。ほとんどの単一クリップタスクでは、タスク詳細エンドポイント のポーリングで十分です。
常に data.status に基づいて分岐し、作成呼び出しのHTTPステータスコードには基づかないでください。 作成が 200 を返すのは受け付けられたという意味であり、レンダリングされたという意味ではありません。詳細エンドポイントが status: "success" を返したときのみ、クリップは実際に存在します。
出力URLは一時リンクとして扱ってください。 storage は temp であり、URLは期限切れになるため、タスク成功後すぐにMP4をダウンロードしてください(または独自のストレージバケットにコピーしてください)。HiAPIのURLをエンドユーザーに直接提供しないでください。
コスト管理。 完了した出力の秒数に対して支払います——$0.06/秒——そのため5秒クリップは$0.30、10秒クリップは$0.60です。プロンプトとファーストフレームを反復する間は5秒でレンダリングし、満足したら10秒で再実行してください。最新の価格は 価格ページ を参照してください。
実測ノートと注意事項
この記事のすべての内容は、単なるパラメータ表ではなく、実際のエンドポイントへの実際のリクエストに基づいています(スキーマは2026-10-21に再検証済み):
- フィールドは
image_urls(複数形)であり、スキーマは閉鎖的です。 自然に見えるimage_urlを送信すると、タスク作成前に失敗します:
認識できないフィールド({ "code": 400, "error_code": "INVALID_REQUEST", "message": "invalid input: image_urls: missing required field \"image_urls\"; <root>: additional properties 'image_url' not allowed" }mode、タイポなど)は同様に拒否されます——黙って無視される追加フィールドは存在しません。 durationは列挙型であり、範囲ではありません。5と10のみ受け付けます。7はduration: value must be one of 5, 10を返します。image_urlsは1または2項目を含みます。 1つのURLはファーストフレームです。2つ目のURLは最終フレームを固定し、制御されたトランジションを実現します。3つのURLはmaxItems: got 3, want 2を返します。空の配列はminItems: got 0, want 1を返します。- 実際に存在するオプションフィールド:
aspect_ratioは16:9、9:16、1:1、4:3、3:4、21:9のみ受け付けます。cfg_scaleの上限は1です(99を渡すとcfg_scale: maximum: got 99, want 1を返します)。negative_promptは文字列でなければなりません。aspect_ratioを省略すると、モデルはファーストフレームに従います。 - 作成呼び出しは構造のみを検証し、到達可能性は検証しません——これが最もハマりやすいポイントです。 構文的に有効だがアクセスできない画像URLは
200とtaskIdを返し、その後タスクは非同期で失敗に変わります:
このタスクは{ "data": { "status": "fail", "error": { "code": "INVALID_REQUEST", "message": "The image URL is not readable. Please provide a valid public HTTP(S) URL or an accessible file path and try again." } } }outputを生成せず、課金もされません——失敗は費用を発生させません——しかし、作成レスポンスだけをチェックすると成功したと誤解してしまいます。これこそがポーリングループでdata.statusに基づいて判断すべき理由です。
関連コンテンツ
- Kling 2.5 Turbo 画像から動画へのモデルページ —— コード不要でブラウザ上で試せます。
- Kling 2.5 Turbo テキストから動画へ —— 開始フレーム不要で、プロンプトから直接生成します。
- Kling 2.5 Turbo プロンプトテンプレート6選 —— コピーしてすぐ使えるプロンプトで、製品、縦型、旅行、グルメ、ペット、トランジションをカバーします。
- タスク作成 と タスク詳細 ドキュメント —— コールバックを含む完全な非同期タスクリファレンス。
- クイックスタート —— HiAPIを初めて呼び出す場合、ここが5分でわかるバージョンです。
よくある質問
クリップはどのくらいの長さにできますか? 5秒または10秒です——これらはスキーマが受け付ける唯一の2つの duration 値です。
結末を制御できますか? はい。image_urls に2つのURLを入れます:1つ目は開始フレーム、2つ目は最終フレームです。モデルはその間を補間してモーションを生成します。
作成は200を返すのに、なぜタスクが fail になるのですか? 作成呼び出しはJSONがスキーマに準拠しているかどうかだけを検証します。画像はタスク実行時に取得されるため、アクセスできないURLやプライベートURLはタスクを作成した後、タスクを失敗させます。常に詳細エンドポイントから data.status を読み取り、ファーストフレームURLが公開アクセス可能であることを確認してください。
失敗したタスクは課金されますか? いいえ。完了した出力の秒数に対して課金されるため、入力が無効で失敗したタスクは output を生成せず、課金もされません。
アスペクト比の制御はありますか? aspect_ratio はオプションで、16:9、9:16、1:1、4:3、3:4、21:9 を受け付けます。空にするとファーストフレームに従います。
関連記事
すべての記事を見る →-
チュートリアル
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 チュートリアル
リクエスト優先の実践デモ:プロンプトから動画クリップへの呼び出しを構築し、リクエストを送信し、完了状態をポーリングし、結果をダウンロードする