クイックスタート

ゼロから AI 動画生成までを約 5 分で。

最初に必読: Seedance 2.0 には モデルが 1 つではなく 6 つ あります。「自動モード判定」は存在しません — 入力タイプに応じて正しい model 値を選択する必要があります。完全なマトリクスは モデル概要 を参照してください。

前提条件

ベース URL

https://api.evolink.ai

ステップ 1: API キーを保存する

export EVOLINK_API_KEY="your-api-key-here"

ステップ 2: 適切なモデルを選択する

手元の素材に応じて選びます。

入力使用するモデル
テキストプロンプトのみseedance-2.0-text-to-video
1〜2 枚の参照画像seedance-2.0-image-to-video
画像 + 動画 + 音声(マルチモーダル)seedance-2.0-reference-to-video

より高速かつ低価格な生成が必要ですか? 上記いずれのモデル名にも fast- プレフィックスを追加できます。例: seedance-2.0-fast-text-to-videoFast モデル を参照してください。

ステップ 3: 最初のリクエストを送る

以下は text-to-video の例です。

import os
import requests

response = requests.post(
    "https://api.evolink.ai/v1/videos/generations",
    headers={
        "Authorization": f"Bearer {os.environ['EVOLINK_API_KEY']}",
        "Content-Type": "application/json"
    },
    json={
        "model": "seedance-2.0-text-to-video",
        "prompt": "A golden retriever running through a sunlit meadow, cinematic slow motion",
        "duration": 5,
        "quality": "720p",
        "aspect_ratio": "16:9"
    }
)

task = response.json()
print(f"Task ID: {task['id']}")
print(f"Status: {task['status']}")

レスポンス(HTTP 200)

{
    "id": "task-unified-1774857405-abc123",
    "object": "video.generation.task",
    "created": 1774857405,
    "model": "seedance-2.0-text-to-video",
    "status": "pending",
    "progress": 0,
    "type": "video",
    "task_info": {
        "can_cancel": true,
        "estimated_time": 165,
        "video_duration": 5
    },
    "usage": {
        "billing_rule": "per_second",
        "credits_reserved": 50,
        "user_group": "default"
    }
}

billing_rule は常に per_second です。duration の値が長いほど料金は高くなります。

ステップ 4: 動画をポーリングで取得する

すべての生成リクエストは非同期です。タスク ID を使って結果をポーリングします。

import time

task_id = task["id"]

while True:
    status = requests.get(
        f"https://api.evolink.ai/v1/tasks/{task_id}",
        headers={"Authorization": f"Bearer {os.environ['EVOLINK_API_KEY']}"}
    )
    result = status.json()

    if result["status"] == "completed":
        print(f"Video URL: {result['results'][0]}")
        break
    if result["status"] == "failed":
        print("Generation failed")
        break

    print(f"Progress: {result['progress']}%")
    time.sleep(5)

重要: 生成された動画 URL は 24 時間 有効です。早めに自前のストレージへダウンロードして保存してください。

本番運用では、ポーリングよりも Webhookcallback_url)を推奨します。

よくある落とし穴

症状原因対処
model で 400 invalid_request"model": "seedance-2.0" と書いたフルモデル ID(例: seedance-2.0-text-to-video)を使用
image_urls を渡してエラーtext-to-video はメディア入力を受け付けないseedance-2.0-image-to-video を使用
quality: "1080p" が拒否される1080p はサポートされていない480p または 720p を使用
30 MB または 6000 px を超える画像が拒否される画像入力の上限を超過許容範囲まで圧縮(image-to-video 参照)

次のステップ