Seedance 2.0
ModelArk 公式のタスク API で Seedance 2.0 の動画を生成します: テキストから動画、最初と最後のフレーム、画像・動画・音声の参照に対応し、480p から 4K まで。
Seedance 2.0 は ByteDance の動画生成モデル(Dreamina Seedance 2.0)です。ModelArk 公式のタスクのリクエストボディを送信し、返されたタスク ID を保持して、そのタスクから完成した動画を読み取ります。画像・動画・音声は URL として content に入れます。
モデル ID
| モデル ID | 解像度 | 備考 |
|---|---|---|
dreamina-seedance-2-0 | 480p、720p、1080p、4K | フルモデル |
dreamina-seedance-2-0-fast | 480p、720p | 1 秒あたりの価格がより低い |
dreamina-seedance-2-0-mini | 480p、720p | 1 秒あたりの価格が最も低い |
3 つの ID はいずれも同じパラメータを受け付けます。現在の価格はモデルページを参照してください。
クイックサンプル
curl https://api.seedrouter.ai/v1/contents/generations/tasks \
-H "Authorization: Bearer $SEEDROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "dreamina-seedance-2-0",
"content": [{"type": "text", "text": "A red paper boat drifts across a calm pond at sunrise, slow dolly-in"}],
"resolution": "720p",
"ratio": "16:9",
"duration": 5,
"generate_audio": true
}'エンドポイント
POST https://api.seedrouter.ai/v1/contents/generations/tasks| ヘッダー | 値 |
|---|---|
| Authorization | Bearer YOUR_API_KEY |
| Content-Type | application/json |
リクエストボディは、ModelArk 公式の「動画生成タスクの作成」リクエストそのものです。すでに ModelArk を呼び出している場合は、ベース URL を https://api.seedrouter.ai/v1 に、API キーを差し替えるだけです。レスポンスは {"id": "task_..."} であり、完成した動画ではありません。API キーはサーバー側のコードに保管してください。
パラメータ
| 名前 | 型 | 必須 | 既定値 | 説明 |
|---|---|---|---|---|
model | string | はい | — | 上記 3 つのモデル ID のいずれか。 |
content | object[] | はい | — | プロンプトとメディア。下記を参照してください。 |
resolution | enum | いいえ | 720p | 480p、720p、1080p、4k。Fast と Mini の ID は 480p と 720p のみ受け付けます。 |
ratio | enum | いいえ | adaptive | 16:9、4:3、1:1、3:4、9:16、21:9、adaptive。 |
duration | integer | いいえ | 5 | 4〜15 秒、またはモデルに任せる場合は -1。 |
generate_audio | boolean | いいえ | true | 動画と一緒に音声を生成します。 |
watermark | boolean | いいえ | false | ウォーターマークを入れます。 |
return_last_frame | boolean | いいえ | false | 最後のフレームも画像 URL として返します。 |
execution_expires_after | integer | いいえ | 172800 | 3600〜259200 秒。この時間を過ぎても完了していないタスクは expired になり、課金されません。 |
priority | integer | いいえ | 0 | 0〜9。 |
safety_identifier | string | いいえ | — | エンドユーザーを識別する 1〜64 文字。ハッシュ値でも構いません。 |
service_tier | enum | いいえ | default | default のみ。 |
content_filter | boolean | いいえ | true | SeedRouter の拡張パラメータ。false にすると、このリクエストのコンテンツフィルタリングを無効にします。 |
content の項目
| 項目 | 形式 | ロール | 上限 |
|---|---|---|---|
| テキスト | {"type": "text", "text": "..."} | — | 1 つ。 |
| 画像 | {"type": "image_url", "image_url": {"url": "https://..."}, "role": "..."} | first_frame、last_frame、reference_image | 参照画像は最大 9 枚。 |
| 動画 | {"type": "video_url", "video_url": {"url": "https://..."}, "role": "reference_video"} | reference_video | 最大 3 つ。 |
| 音声 | {"type": "audio_url", "audio_url": {"url": "https://..."}, "role": "reference_audio"} | reference_audio | 最大 3 つ。参照画像または参照動画が必要です。 |
未知のフィールドは拒否されます。次のものには対応していません: seed、callback_url(代わりにタスクをポーリングしてください)、draft と draft_task、tools、1.x 専用の frames と camera_fixed、そして output_format と omni_reference_task_type(Seedance 2.5 専用)。タスクのキャンセルや削除はできません。
モード
モードは content の項目から決まります。モードを指定するパラメータはありません。
| モード | content |
|---|---|
| テキストから動画 | テキスト項目 1 つ |
| 最初のフレーム | テキスト(任意)+ ロールが first_frame の画像 1 枚、またはロールなしの画像 1 枚 |
| 最初と最後のフレーム | テキスト(任意)+ first_frame の画像 1 枚 + last_frame の画像 1 枚 |
| マルチモーダル参照 | テキスト + reference_image、reference_video、reference_audio の項目を自由に組み合わせたもの |
最初のフレームを使うモードは、参照項目と組み合わせられません。画像が複数ある場合や他のメディアを含む場合は、すべての画像に role が必要です。
参照の例
curl https://api.seedrouter.ai/v1/contents/generations/tasks \
-H "Authorization: Bearer $SEEDROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "dreamina-seedance-2-0",
"content": [
{"type": "text", "text": "The character from the image walks through the market in the video, same camera move"},
{"type": "image_url", "image_url": {"url": "https://example.com/character.png"}, "role": "reference_image"},
{"type": "video_url", "video_url": {"url": "https://example.com/market.mp4"}, "role": "reference_video"}
],
"ratio": "adaptive",
"duration": 8
}'例の URL は、ご自身のアクセス可能なファイルに置き換えてください。
メディア入力
この API は URL 参照のみを受け付けます。base64、data: URL、asset:// ID、multipart アップロードは受け付けません。Playground は選択されたファイルをストレージにアップロードしてから、その URL を送信します。
メディアは公開 HTTP(S) URL で、モデルの公式の制限を満たす必要があります:
| メディア | フォーマット | 制限 |
|---|---|---|
| 画像 | JPEG、PNG、WebP、BMP、TIFF、GIF、HEIC、HEIF | 30 MB 未満、幅と高さは 300〜6000 px、アスペクト比(幅 / 高さ)は 0.4〜2.5、参照画像は 1〜9 枚 |
| 動画 | MP4、MOV(H.264 または H.265) | 1 本あたり 2〜15 秒、最大 3 本、合計 15 秒以下、200 MB 以下、24〜60 FPS、幅と高さは 300〜6000 px、アスペクト比は 0.4〜2.5、407,696〜8,295,044 ピクセル(幅 × 高さ) |
| 音声 | WAV、MP3 | 1 本あたり 2〜15 秒、最大 3 本、合計 15 秒以下、参照画像または参照動画が必要、15 MB 以下 |
実在の人物の顔を含む参照画像・参照動画には、モデルが対応していません。
メディアはタスクの開始時、生成の前に検証されます。メディアがこれらの制限のいずれかに違反したタスクは、invalid_request_error と、違反した規則を示すメッセージ(例: The request was rejected: content reference videos must total at most 15 seconds.)とともに failed で終了し、課金されません。その時点で読み取れないファイルはそのままモデルに渡され、モデルが受け付けるか拒否するかを判断します。いずれの場合も、失敗したタスクは課金されません。
課金に影響する要素
現在のレートはモデルの料金セクションで確認してください。Seedance 2.0 は公式の単位である動画トークンで課金されます:
video tokens = (output seconds + reference video seconds) × width × height × 24 / 1024100 万トークンあたりのレートは、出力解像度と、リクエストに参照動画が含まれるかどうかで決まります。参照動画を含むリクエストは、すべてのトークンに低いレートが適用されます。テキスト・画像・音声の入力は課金されません。16:9 の場合、1 秒あたりのトークン数は 480p(864×496)で 10,044、720p で 21,600、1080p で 48,600、4K で 194,400 です。
課金額は完成した動画が報告するトークン数(usage.completion_tokens)に基づくため、duration: -1 は実際に生成された長さで課金されます。レンダリングされたクリップは、指定した長さをわずかに超えます。5 秒・720p・16:9 のリクエストは 121 フレームをレンダリングし、108,000 ではなく 108,900 トークンを報告します。最終的な課金額はアカウントの使用履歴で確認してください。失敗したタスクと期限切れのタスクは課金されません。
出力スキーマ
送信するとタスク ID が返ります:
{"id": "task_..."}タスクを取得する
curl https://api.seedrouter.ai/v1/contents/generations/tasks/YOUR_TASK_ID \
-H "Authorization: Bearer $SEEDROUTER_API_KEY"status が succeeded、failed、expired のいずれかになるまで、10〜20 秒ごとにポーリングしてください。ポーリング中のネットワークタイムアウトは生成の失敗を意味しません。タスク ID を保持して確認を再開してください。進捗確認のために別のタスクを作成しないでください。
ポーリングの完全な例
上記の Python 送信例のあとに実行してください。
import time
deadline = time.monotonic() + 1800
while time.monotonic() < deadline:
result = requests.get(
f"https://api.seedrouter.ai/v1/contents/generations/tasks/{task_id}",
headers={"Authorization": f"Bearer {os.environ['SEEDROUTER_API_KEY']}"},
timeout=30,
)
result.raise_for_status()
task = result.json()
if task["status"] == "succeeded":
print(task["content"]["video_url"])
break
if task["status"] in ("failed", "expired"):
raise RuntimeError(task["error"]["message"])
time.sleep(15)
else:
raise TimeoutError(f"Still waiting. Resume polling task {task_id}.")成功したタスク
{
"id": "task_...",
"model": "dreamina-seedance-2-0",
"status": "succeeded",
"content": {
"video_url": "https://static.seedrouter.ai/media/tasks/task_example/0.mp4",
"last_frame_url": "https://static.seedrouter.ai/media/tasks/task_example/last_frame/0.jpg"
},
"usage": {"completion_tokens": 108900, "total_tokens": 108900},
"seed": 42,
"resolution": "720p",
"ratio": "16:9",
"duration": 5,
"framespersecond": 24,
"generate_audio": true,
"draft": false,
"output_format": "mp4",
"service_tier": "default",
"execution_expires_after": 172800,
"priority": 0,
"created_at": 1790321515,
"updated_at": 1790321652
}| フィールド | 意味 |
|---|---|
id | 以降の照会のためにこの ID を保持してください。 |
status | queued、running、succeeded、failed、expired のいずれか。 |
content.video_url | 生成された動画。 |
content.last_frame_url | return_last_frame が true のときの最後のフレーム。 |
usage.completion_tokens | 完成した動画の動画トークン数。課金対象の数量です。 |
duration、resolution、ratio、framespersecond、seed | 実際にレンダリングされた値。seed はモデルが選んだ値です。 |
created_at、updated_at | 秒単位の Unix タイムスタンプ。 |
error | 失敗または期限切れのタスクでの {"code", "message"}。 |
動画 URL は当社のストレージでホストされています。長期保存が必要な場合は、ファイルをご自身のストレージに保存してください。
タスクの一覧
curl "https://api.seedrouter.ai/v1/contents/generations/tasks?page_num=1&page_size=20&filter.status=succeeded" \
-H "Authorization: Bearer $SEEDROUTER_API_KEY"過去 7 日間のタスクオブジェクトを新しい順に並べた {"total": N, "items": [...]} を返します。page_num と page_size は 1〜500 です(既定値は 1 と 20)。フィルター: filter.status、filter.model、filter.task_ids(複数指定可)、filter.service_tier。
エラー
タスク作成前に拒否されたリクエストは、HTTP エラーと error オブジェクトを返し、課金されません。受理後に失敗したタスクは、照会時に HTTP 200 と status: "failed"(または "expired")、そして error オブジェクトを返します。コンテンツフィルタリングによって出力が差し止められた場合は content_policy_violation で失敗し、execution_expires_after を超えて実行されたタスクは task_expired とともに expired で終了します。
コード・HTTP ステータス・リトライの指針は共通エラーカタログを参照してください。
{
"id": "task_...",
"model": "dreamina-seedance-2-0",
"status": "failed",
"error": {
"code": 60001,
"message": "The request was rejected by the content policy. Please revise the prompt or input images."
}
}送信自体がタイムアウトした場合は、再送信の前にタスクの一覧を確認してください。最初のリクエストが受理されている可能性があります。
ヒント
- 被写体・動作・カメラワーク・照明を、完全な文で記述してください。
- 下書きは 480p と短い
durationで作り、採用するものを高い解像度でレンダリングしてください。 return_last_frameでショットをつなげます。返されたフレームを次のタスクのfirst_frameとして使ってください。
