HiAPI
ブログ

使用ガイド

wan2.7-video/text-to-video@pro でショート動画を制作:エンドツーエンドの hiapi API ワークフロー

Jul 2, 2026
wan2.7-video/text-to-video@pro でショート動画を制作:エンドツーエンドの hiapi API ワークフロー

ショート動画の成否はイテレーションの速さにかかっています。大量の候補クリップが、縦型フォーマットで、音声付きで、しかも素早く必要です。本ガイドはまさにその点を中心に、hiapi 上の wan2.7-video/text-to-video@pro——Alibaba 通義万相 2.7 のテキスト・トゥ・ビデオモデルで、最大 1080P 出力、ネイティブ音声、クリップは最長 15 秒——を使って解説します。以下の各リクエスト構造、パラメータの境界、エラーメッセージはすべて執筆時点の本番 API に対して実際に実行して検証したものであり、文中に埋め込まれた 2 本のデモクリップも、示したコードからそのまま生成されたものです。

モデルが提供するもの

wan2.7-video/text-to-video@pro は hiapi の統一非同期タスクエンドポイント(/v1/tasks)経由で提供されます。本番スキーマに対して検証済みの主な特徴は以下の通りです:

  • 出力:H.264 MP4、最大 1080P、ネイティブ AAC 音声トラック付き——モデルがプロンプトに応じて環境音や効果音を生成するため、別途の音声ステップは不要です。
  • 長さ:1 クリップ 2〜15 秒(整数秒)。
  • アスペクト比:16:9、9:16、1:1、4:3、3:4——Shorts/Reels/TikTok 系のフォーマットに合わせた真の縦型 9:16 で、クロップは不要です。
  • 課金:出力動画の秒数に応じた課金で、執筆時点では $0.167/秒から——5 秒の 1080P クリップで約 $0.84。バッチ生成の前に必ず料金ページで確認してください。

動画には同期モードがありません。タスクを作成し、完了までポーリングし、結果をダウンロードする必要があります。

最小の動作例(curl)

タスクを作成:

curl -X POST "https://api.hiapi.ai/v1/tasks" \
  -H "Authorization: Bearer sk-YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "wan2.7-video/text-to-video@pro",
    "input": {
      "prompt": "マクロ撮影のスタジオショット:ロイヤルブルーのインクの一滴が透明な水に落ち、スローモーションで広がり、インクの筋が雲のような形に展開する。背景は明るい白のシームレスバック、クリアなハイキー照明、かすかな環境のハミング音",
      "ratio": "16:9",
      "resolution": "1080P",
      "duration": 4
    }
  }'

レスポンス:

{"code": 200, "data": {"taskId": "tk-hiapi-01KWGGS29FDZ8NRJW49YRQZ65R"}, "message": "success"}

結果をポーリング:

curl "https://api.hiapi.ai/v1/tasks/tk-hiapi-01KWGGS29FDZ8NRJW49YRQZ65R" \
  -H "Authorization: Bearer sk-YOUR_KEY"

レンダリング中は data.status が handling になり、完了すると success に変わって data.output[0].url に MP4 が入ります。このリクエストからそのまま生成されたクリップがこちらです:

⚠️ 出力 URL はexpireAt タイムスタンプ付きの一時リンクです。タスク成功後すぐにファイルを自分のストレージにダウンロードしてください——直接ホットリンクしたりデータベースに保存したりしないでください。

完全な入力スキーマ(本番 API に対して検証済み)

API は input を厳密に検証し、未知のフィールドを拒否します。以下が受け付けられるフィールドの完全な一覧です——どこかからコピーしたものではなく、エンドポイントを直接プローブして得たものです:

フィールド 型 制約 必須か
prompt string シーンの説明;生成される音声も同時に制御する ✅
ratio string 16:9、9:16、1:1、4:3、3:4 のいずれか 任意
resolution string 720P または 1080P 任意
duration integer 2〜15(秒) 任意
negative_prompt string 抑制したい内容(例:ウォーターマーク、文字のオーバーレイ) 任意
seed integer リトライ間で再現可能にする 任意
watermark boolean サービスプロバイダーのウォーターマークを切り替える 任意

400 を避けるための落とし穴が 2 つあります:

  • フィールド名は ratio であり、aspect_ratio ではありません——hiapi の画像モデルは aspect_ratio を使いますが、この動画モデルは使いません。aspect_ratio を送ると additional properties 'aspect_ratio' not allowed が返ります。
  • duration はサーバー側で検証されます:duration: minimum: got 1, want 2 と maximum: got 999, want 15 が、2〜15 の範囲を外れたときに得られる正確なエラーです。

エンドツーエンドの Python:プロンプトを入力し、公開可能な MP4 を出力

これが完全なワークフローです——作成、ポーリング、ダウンロード——SDK は不要で、requests だけを使います:

import time
import requests

API = "https://api.hiapi.ai/v1/tasks"
HEADERS = {"Authorization": "Bearer sk-YOUR_KEY", "Content-Type": "application/json"}

def make_short(prompt: str, out_path: str, duration: int = 5,
               ratio: str = "9:16", seed: int | None = None) -> str:
    payload = {
        "model": "wan2.7-video/text-to-video@pro",
        "input": {
            "prompt": prompt,
            "ratio": ratio,               # 9:16 = 縦型ショート動画
            "resolution": "1080P",
            "duration": duration,          # 2..15 秒
            "negative_prompt": "文字のオーバーレイ, ウォーターマーク, 歪んだ手",
        },
    }
    if seed is not None:
        payload["input"]["seed"] = seed

    task_id = requests.post(API, headers=HEADERS, json=payload).json()["data"]["taskId"]

    while True:
        task = requests.get(f"{API}/{task_id}", headers=HEADERS).json()["data"]
        if task["status"] == "success":
            break
        if task["status"] == "fail":
            raise RuntimeError(f"task failed: {task.get('error')}")
        time.sleep(10)

    video_url = task["output"][0]["url"]   # 一時リンク——すぐにダウンロードすること
    with open(out_path, "wb") as f:
        f.write(requests.get(video_url, timeout=120).content)
    return out_path

make_short(
    "ゴールデンアワーの手持ち縦型ナイトマーケットのショット:屋台の店主が "
    "炎が舞い上がる中華鍋でジュージュー音を立てる麺をあおり、湯気とオレンジ色の火花が "
    "カメラに向かって渦を巻いて流れてくる。ネオンサインがボケた背景に柔らかなピンクとシアンでにじみ、浅い "
    "被写界深度、躍動感のある手持ちドキュメンタリータッチ、ジュージューという音とパチパチという音を伴う",
    "night-market.mp4",
    duration=5,
    seed=20260702,
)

この呼び出しから実際に生成されたクリップがこちらです——縦型 1080×1920、5 秒、ジュージューという音はプロンプトのテキストから生成されています:

私の実行では、4 秒の 16:9 クリップは約 3 分で完了し、5 秒の 9:16 クリップはもう少し長くかかりました——1 クリップあたり数分を見込み、約 10 秒ごとにポーリングし、エンドポイントを叩きすぎないようにしてください。

ショート動画のプロンプトのコツ:動きも音声もプロンプトが決める

スキーマにはカメラ制御やモーションのパラメータがありません——動き、テンポ、音に関するすべてはプロンプトの言葉で導きます。私のテストで効果があった方法:

  • カメラの挙動を明示的に名指す:例えば "handheld"(手持ち)、"slow push-in"(ゆっくり寄る)、"macro"(マクロ)、"shallow depth of field"(浅い被写界深度)。ナイトマーケットのクリップのドキュメンタリー風の揺れは、完全に "handheld" という一語から来ています。
  • 欲しい音声を描写する:モデルはプロンプトに応じて音を生成します。"sizzling and crackling sounds"(ジュージューという音とパチパチという音)も "gentle ambient hum"(かすかな環境のハミング音)も、出力音声トラックに現れました。
  • フックを先頭に置く:ショート動画では最初の 1 秒がすべてを決めます。最も躍動的な要素(炎で鍋をあおる、インクが水に落ちる)をプロンプト記述の冒頭に置きましょう。
  • negative_prompt を防御的に使う:"text overlay, watermark, distorted hands"(文字のオーバーレイ、ウォーターマーク、歪んだ手)は、メインプロンプトに影響を与えずに最もよくある瑕疵をきれいにできます。
  • イテレーション時は seed を固定する:seed を固定し、一度にプロンプトの一フレーズだけを変えて、そのフレーズが実際に何をしているかを観察しましょう。

最初のフレームを制御したい? ならばイメージ・トゥ・ビデオ版を使う

ワークフローが設計済みのキーフレームから始まる場合——製品画像、ブランドスタイルの最初のフレーム——テキスト・トゥ・ビデオは画像入力を受け付けません。姉妹モデルの wan2.7-video/image-to-video@pro なら可能です:{"url": "...", "type": "image"} オブジェクトからなる media 配列を受け付け、同じ prompt / resolution / duration フィールドと組み合わせて、提供したフレームを一から生成するのではなくアニメーション化します。同じタスクベースのフローで、同じ秒数課金です。実用的なパイプラインとしては、画像モデルで静止画を生成し、レビューを通った後に承認済みのフレームをアニメーション化する——そうすれば動画生成の費用は承認済みのフレームにだけかかります。

よくあるエラーとその実際の意味

  • invalid input: prompt: missing required field "prompt"——prompt が唯一の必須フィールドです。
  • invalid input: ratio: value must be one of '16:9', '9:16', '1:1', '4:3', '3:4'——モデルがサポートしないアスペクト比を渡した(または打ち間違えた)ということです。
  • invalid input: <root>: additional properties '...' not allowed——未知のフィールドです。スキーマは厳格なので、上の表を確認してください。
  • status: "fail" と TASK_FAILED——タスクが作成後に失敗しました。新しいタスクを作成してください(再現性を保つため seed を再利用します)。
  • ダウンロードしたファイルが小さい、または再生できない——期限切れの出力 URL を取得した可能性が高いです。expireAt を再確認し、success 後すぐにダウンロードしてください。

まとめ

1 回の POST、1 つのポーリングループ、1 回のダウンロード——テキストプロンプトから公開可能な音声付き縦型 MP4 までの距離はこれだけです。ショート動画のパイプラインを構築するなら、コンソールで API キーを取得し、上の Python 関数から始めて、モデルカタログの残りを眺めてみてください——同じ /v1/tasks パターン(seedance-2.0-fast ガイドで示している通り)がプラットフォーム上のすべての動画モデルに当てはまるので、後でモデルを変えるのは 1 行の変更で済みます。

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

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

APIドキュメントを読む