AI 動画
Seedance、HappyHorse、PixVerse の各モデルで、テキスト・画像・動画・音声の入力からショート動画を非同期に生成します。
AI 動画はショート動画を非同期に生成します。生成リクエストを送信してタスクを作成し、success または failed になるまでタスクをポーリングします。
Seedance と HappyHorse は 1 つのエンドポイント POST /v1/video-generation/generate を共有し、model フィールドでモデルを選びます。PixVerse は独自のエンドポイントを持ち、リクエストの構造も異なります。3 つのファミリーが生成したタスクは、いずれも同じタスク・一覧・詳細エンドポイントから読み出します。
本ページのすべてのエンドポイントは OpenAPI の Base URL
https://api.marswave.ai/openapi を使用し、Authorization: Bearer $LISTENHUB_API_KEY
ヘッダーで API キーによる認証を行います。キーは
listenhub.ai/settings/api-keys
で作成できます。
モデルを選ぶ
3 つのファミリーに合計 4 つのモデルがあります。まず下の表で選び、次に各モデルのページで正確な制限と料金の注意点を確認してください。
| モデル | ファミリー | 生成エンドポイント | 主な用途 | 解像度 | 長さ |
|---|---|---|---|---|---|
doubao-seedance-2-fast (デフォルト) | Seedance | /v1/video-generation/generate | 高速なテキスト / 画像 / 動画からの生成 | 480p, 720p | 4-15 秒 |
doubao-seedance-2-pro | Seedance | /v1/video-generation/generate | より高品質な Seedance 生成、1080p まで対応 | 480p, 720p, 1080p | 4-15 秒 |
happyhorse | HappyHorse | /v1/video-generation/generate | 参考動画の編集、縦向きアスペクト比、より長い参考クリップ | 720p, 1080p | 3-15 秒 |
pixverse | PixVerse | /v1/video-generation/pixverse/generate | 9 つの能力モード:トランジション、フュージョン、スタイル変換、モーション模倣、リップシンク、マーケティング agent | 360p, 540p, 720p, 1080p | 1-60 秒 |
共有エンドポイントで model を省略した場合のデフォルトは doubao-seedance-2-fast です。PixVerse は共有エンドポイント上に独自の model デフォルトを持ちません。専用の pixverse/generate パスから呼び出し、そのエンドポイント自身の model フィールドでバージョン(pixverse、v6、v5、v4.5)を指定します。
| モデル | アスペクト比 | レート制限 |
|---|---|---|
doubao-seedance-2-fast | 16:9, 4:3, 1:1, 3:4, 9:16, 21:9 | 5 RPM |
doubao-seedance-2-pro | 16:9, 4:3, 1:1, 3:4, 9:16, 21:9 | 5 RPM |
happyhorse | 16:9, 4:3, 1:1, 3:4, 9:16, 21:9, 4:5, 5:4 | 5 RPM |
pixverse | 9:16, 16:9, 1:1, 4:3, 3:4 | 5 RPM |
モデルごとに制限が異なります。doubao-seedance-2-fast は 1080p に対応していません。
Seedance モデルは 4:5 と 5:4 に対応していません。happyhorse は 480p、
last_frame、audio_url に対応していません。対応していないモデル、アスペクト比、
解像度、長さを組み合わせたリクエストは 400 を返します。
Seedance
doubao-seedance-2-pro と doubao-seedance-2-fast:制限と料金の注意点。
HappyHorse
happyhorse:縦向きアスペクト比、参考動画の編集、より長い入力ウィンドウ。
PixVerse
専用エンドポイント上の 9 つの能力モード。リップシンクからマーケティング agent まで。
呼び出しの流れ
共有エンドポイントは Seedance と HappyHorse をカバーします。PixVerse も自身の generate / estimate パス上で同じ 3 ステップの流れに従います。詳細は PixVerse ページを参照してください。
クレジットを見積もる
費用の確認を表示する必要がある場合は、生成前に POST /v1/video-generation/estimate-credits(PixVerse は POST /v1/video-generation/pixverse/estimate-credits)を呼び出します。
タスクを作成する
POST /v1/video-generation/generate(PixVerse は POST /v1/video-generation/pixverse/generate)を呼び出します。レスポンスは taskId と episodeId を返します。
結果をポーリングする
status が success または failed になるまで GET /v1/video-generation/tasks/{taskId} をポーリングします。このエンドポイントはすべてのモデルファミリーで共通です。
入力コンテンツ
content 配列は 1-16 個の要素を受け取ります。含められるのは、テキストプロンプト 1 件まで、画像 9 枚まで、動画 3 本まで、音声 3 本までです。この配列は Seedance / HappyHorse の共有エンドポイントで使います。PixVerse では代わりにトップレベルの images、videos、audios フィールドを使います。
| タイプ | 必須フィールド | role | 説明 |
|---|---|---|---|
text | text | なし | 最大 2500 文字。Seedance モデルは最大 500 文字。 |
image_url | image_url.url | first_frame, last_frame, reference_image | last_frame には first_frame が必要です。フレーム role と参照 role は混在できません。 |
video_url | video_url.url | reference_video | inputVideoDuration が必要です。Seedance は 2-15 秒、HappyHorse は 3-60 秒の入力に対応。 |
audio_url | audio_url.url | reference_audio | 画像または動画の要素が少なくとも 1 つ必要です。happyhorse では非対応。 |
画像から動画を作る場合はフレーム role(first_frame、必要に応じて
last_frame)を使います。マルチモーダルな参照生成では参照
role(reference_image、reference_video、reference_audio)を使います。1
回のリクエストでフレーム role と参照 role を混在させないでください。
動画タスクを作成する
POST /v1/video-generation/generate
Seedance / HappyHorse 共有エンドポイントで非同期の動画生成タスクを作成します。クレジットはタスク作成時に差し引かれ、生成に失敗した場合は自動的に返還されます。PixVerse では POST /v1/video-generation/pixverse/generate を使ってください。
テキストから動画
curl -X POST "https://api.marswave.ai/openapi/v1/video-generation/generate" \
-H "Authorization: Bearer $LISTENHUB_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "doubao-seedance-2-fast",
"content": [
{
"type": "text",
"text": "A cinematic aerial shot of a quiet coastal city at sunrise"
}
],
"resolution": "720p",
"ratio": "16:9",
"duration": 5,
"generateAudio": true
}'const response = await fetch(
'https://api.marswave.ai/openapi/v1/video-generation/generate',
{
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.LISTENHUB_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
model: 'doubao-seedance-2-fast',
content: [
{
type: 'text',
text: 'A cinematic aerial shot of a quiet coastal city at sunrise',
},
],
resolution: '720p',
ratio: '16:9',
duration: 5,
generateAudio: true,
}),
},
)
const data = await response.json()
console.log('Task ID:', data.data.taskId)import os
import requests
response = requests.post(
'https://api.marswave.ai/openapi/v1/video-generation/generate',
headers={'Authorization': f'Bearer {os.environ["LISTENHUB_API_KEY"]}'},
json={
'model': 'doubao-seedance-2-fast',
'content': [
{
'type': 'text',
'text': 'A cinematic aerial shot of a quiet coastal city at sunrise',
}
],
'resolution': '720p',
'ratio': '16:9',
'duration': 5,
'generateAudio': True,
},
)
data = response.json()
print('Task ID:', data['data']['taskId'])レスポンス:
{
"code": 0,
"message": "",
"data": {
"taskId": "665f1d4e8b3a3f001234abcd",
"episodeId": "665f1d4e8b3a3f001234abce",
"status": "generating"
}
}画像から動画
1 枚の画像から始めるには first_frame を使います。終了フレームを制御したい場合にのみ last_frame を追加します。
curl -X POST "https://api.marswave.ai/openapi/v1/video-generation/generate" \
-H "Authorization: Bearer $LISTENHUB_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "doubao-seedance-2-pro",
"content": [
{
"type": "text",
"text": "The camera slowly pushes in while mist moves through the scene"
},
{
"type": "image_url",
"role": "first_frame",
"image_url": {
"url": "https://example.com/start-frame.jpg"
}
}
],
"resolution": "1080p",
"ratio": "16:9",
"duration": 5
}'参考動画
content に video_url を含める場合は、参考動画の長さ(秒)を inputVideoDuration に設定します。
curl -X POST "https://api.marswave.ai/openapi/v1/video-generation/generate" \
-H "Authorization: Bearer $LISTENHUB_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "happyhorse",
"content": [
{
"type": "text",
"text": "Restyle the subject as a polished product launch clip"
},
{
"type": "video_url",
"role": "reference_video",
"video_url": {
"url": "https://example.com/reference.mp4"
}
},
{
"type": "image_url",
"role": "reference_image",
"image_url": {
"url": "https://example.com/style-reference.jpg"
}
}
],
"resolution": "720p",
"ratio": "9:16",
"duration": 5,
"inputVideoDuration": 8,
"audioSetting": "auto"
}'リクエストパラメータ
| パラメータ | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
model | string | いいえ | doubao-seedance-2-fast | doubao-seedance-2-pro、doubao-seedance-2-fast、happyhorse のいずれか。 |
content | array | はい | - | 入力要素の配列。入力コンテンツ を参照。 |
resolution | string | いいえ | 720p | 480p、720p、1080p のいずれか。モデルの制限に従います。 |
ratio | string | いいえ | 16:9 | 16:9、4:3、1:1、3:4、9:16、21:9、4:5、5:4 のいずれか。モデルの制限に従います。 |
duration | integer | いいえ | 5 | 出力動画の長さ(秒)。Seedance は 4-15、HappyHorse は 3-15。 |
generateAudio | boolean | いいえ | true | 動画と一緒に音声を生成するかどうか。 |
seed | integer | いいえ | -1 | 乱数シード。-1 から 4294967295。-1 を指定するとランダム生成になります。 |
inputVideoDuration | integer | いいえ | 0 | video_url を使う場合は必須。Seedance は 2-15、HappyHorse は 3-60。 |
audioSetting | string | いいえ | auto | 動画編集ワークフロー向け。auto は音声を生成し、origin は元動画の音声を維持します。 |
解像度、アスペクト比、長さ、inputVideoDuration の制限はモデルごとに異なります。
モデル別のルールは
Seedance と
HappyHorse
を参照してください。
タスクを取得する
GET /v1/video-generation/tasks/{taskId}
タスクが終了状態になるまで、タスク詳細エンドポイントをポーリングします。このエンドポイントは PixVerse を含むすべてのモデルファミリーのタスクを返します。
curl "https://api.marswave.ai/openapi/v1/video-generation/tasks/{taskId}" \
-H "Authorization: Bearer $LISTENHUB_API_KEY"タスクのステータス:
| ステータス | 意味 |
|---|---|
pending | タスクが作成され、送信を待っています。 |
generating | プロバイダー側で生成が進行中です。 |
uploading | プロバイダーの出力が完成し、ListenHub が保存しています。 |
success | 動画が完成しました。保存された出力は videoUrl から取得します。 |
failed | 生成に失敗しました。該当する場合、クレジットは自動的に返還されます。 |
レスポンス:
{
"code": 0,
"message": "",
"data": {
"id": "665f1d4e8b3a3f001234abcd",
"taskId": "665f1d4e8b3a3f001234abcd",
"episodeId": "665f1d4e8b3a3f001234abce",
"status": "success",
"model": "doubao-seedance-2-fast",
"params": {
"content": [
{
"type": "text",
"text": "A cinematic aerial shot of a quiet coastal city at sunrise"
}
],
"resolution": "720p",
"ratio": "16:9",
"duration": 5,
"generateAudio": true,
"seed": -1
},
"videoUrl": "https://assets.listenhub.ai/video-generation/output.mp4",
"coverUrl": "https://assets.listenhub.ai/video-generation/cover.jpg",
"providerVideoUrl": "https://provider.example/video.mp4",
"duration": 5,
"resolution": "720p",
"ratio": "16:9",
"seed": 123456,
"creditCharged": 12,
"enabledShare": false,
"createdAt": 1700000000000,
"updatedAt": 1700000300000
}
}タスク一覧を取得する
GET /v1/video-generation/tasks
現在の API ユーザーの動画生成タスクを、作成日時の新しい順に一覧表示します。すべてのモデルファミリーのタスクが同じ一覧に表示されます。
curl "https://api.marswave.ai/openapi/v1/video-generation/tasks?page=1&pageSize=20&status=success" \
-H "Authorization: Bearer $LISTENHUB_API_KEY"クエリパラメータ
| パラメータ | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
page | integer | いいえ | 1 | ページ番号。 |
pageSize | integer | いいえ | 20 | 1 ページあたりの件数、最大 100。 |
status | string | いいえ | - | 任意のフィルタ:pending、generating、uploading、success、failed。 |
レスポンス:
{
"code": 0,
"message": "",
"data": {
"items": [
{
"id": "665f1d4e8b3a3f001234abcd",
"episodeId": "665f1d4e8b3a3f001234abce",
"status": "success",
"model": "doubao-seedance-2-fast",
"title": "A cinematic aerial shot of a quiet coastal city at sunrise",
"prompt": "A cinematic aerial shot of a quiet coastal city at sunrise",
"params": {
"content": [],
"resolution": "720p",
"ratio": "16:9",
"duration": 5,
"generateAudio": true,
"seed": -1
},
"videoUrl": "https://assets.listenhub.ai/video-generation/output.mp4",
"coverUrl": "https://assets.listenhub.ai/video-generation/cover.jpg",
"providerVideoUrl": "https://provider.example/video.mp4",
"seed": 123456,
"creditCharged": 12,
"createdAt": 1700000000000
}
],
"page": 1,
"pageSize": 20,
"total": 1
}
}クレジットを見積もる
POST /v1/video-generation/estimate-credits
Seedance / HappyHorse 共有エンドポイントでタスクを作成する前に、クレジット消費量を見積もります。PixVerse には独自の見積もりエンドポイント POST /v1/video-generation/pixverse/estimate-credits があります。クレジット消費量は固定ではありません。必ず対応する見積もりエンドポイントを呼び出して、指定するパラメータでの正確な値を確認してください。
curl -X POST "https://api.marswave.ai/openapi/v1/video-generation/estimate-credits" \
-H "Authorization: Bearer $LISTENHUB_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "doubao-seedance-2-fast",
"resolution": "720p",
"duration": 5,
"hasVideoInput": false,
"ratio": "16:9"
}'リクエストパラメータ
| パラメータ | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
model | string | はい | - | doubao-seedance-2-pro、doubao-seedance-2-fast、happyhorse のいずれか。 |
resolution | string | はい | - | 480p、720p、1080p のいずれか。モデルの制限に従います。 |
duration | integer | はい | - | 出力動画の長さ(秒)。 |
hasVideoInput | boolean | いいえ | false | 生成リクエストに video_url を含む場合は true を指定します。 |
inputVideoDuration | integer | いいえ | 0 | hasVideoInput が true の場合は必須。 |
ratio | string | いいえ | 16:9 | アスペクト比。 |
レスポンス:
{
"code": 0,
"message": "",
"data": {
"tokens": 155520,
"credits": 12
}
}エラー
| HTTP ステータス | 意味 |
|---|---|
400 | パラメータが不正、モデル / アスペクト比 / 解像度の組み合わせが非対応、または必須のメディアの長さが未指定。 |
402 | クレジット不足。 |
403 | タスクは存在しますが、現在の API ユーザーのものではありません。 |
404 | タスクが見つかりません。 |
429 | レート制限を超過しました(生成エンドポイントはユーザーごとに 5 RPM)。 |
PixVerse はこれらの HTTP ステータスに加えて、独自の数値 code を返します。詳細は
PixVerse のエラーコード
を参照してください。