cURL
curl https://api.apipod.ai/v1/videos/generations \
-H "Authorization: Bearer $APIPOD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "muse-video-r2v",
"prompt": "A corgi surfing at sunset, cinematic, slow motion",
"image_urls": ["https://cdn.example.com/ref-character.jpg", "https://cdn.example.com/ref-scene.jpg"],
"duration": 10,
"aspect_ratio": "16:9",
"style_preset": "cinematic_realistic",
"generate_audio": true
}'import os
import requests
payload = {
"model": "muse-video-r2v",
"prompt": "A corgi surfing at sunset, cinematic, slow motion",
"image_urls": ["https://cdn.example.com/ref-character.jpg", "https://cdn.example.com/ref-scene.jpg"],
"duration": 10,
"aspect_ratio": "16:9",
"style_preset": "cinematic_realistic",
"generate_audio": True
}
response = requests.post(
"https://api.apipod.ai/v1/videos/generations",
headers={
"Authorization": f"Bearer {os.environ['APIPOD_API_KEY']}",
"Content-Type": "application/json",
},
json=payload,
timeout=60,
)
response.raise_for_status()
print(response.json())package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
"os"
)
func main() {
payload := map[string]any{}
if err := json.Unmarshal([]byte(`{
"model": "muse-video-r2v",
"prompt": "A corgi surfing at sunset, cinematic, slow motion",
"image_urls": ["https://cdn.example.com/ref-character.jpg", "https://cdn.example.com/ref-scene.jpg"],
"duration": 10,
"aspect_ratio": "16:9",
"style_preset": "cinematic_realistic",
"generate_audio": true
}`), &payload); err != nil {
panic(err)
}
body, err := json.Marshal(payload)
if err != nil {
panic(err)
}
req, err := http.NewRequest(http.MethodPost, "https://api.apipod.ai/v1/videos/generations", bytes.NewReader(body))
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer "+os.Getenv("APIPOD_API_KEY"))
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println(resp.Status)
}use reqwest::Client;
use serde_json::json;
use std::env;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let payload = json!({
"model": "muse-video-r2v",
"prompt": "A corgi surfing at sunset, cinematic, slow motion",
"image_urls": ["https://cdn.example.com/ref-character.jpg", "https://cdn.example.com/ref-scene.jpg"],
"duration": 10,
"aspect_ratio": "16:9",
"style_preset": "cinematic_realistic",
"generate_audio": true
});
let response = Client::new()
.post("https://api.apipod.ai/v1/videos/generations")
.bearer_auth(env::var("APIPOD_API_KEY")?)
.json(&payload)
.send()
.await?
.error_for_status()?;
println!("{}", response.text().await?);
Ok(())
}const response = await fetch("https://api.apipod.ai/v1/videos/generations", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.APIPOD_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify(
{
"model": "muse-video-r2v",
"prompt": "A corgi surfing at sunset, cinematic, slow motion",
"image_urls": ["https://cdn.example.com/ref-character.jpg", "https://cdn.example.com/ref-scene.jpg"],
"image_urls": ["https://cdn.example.com/ref-character.jpg", "https://cdn.example.com/ref-scene.jpg"],
"duration": 10,
"aspect_ratio": "16:9",
"style_preset": "cinematic_realistic",
"generate_audio": true
}
),
});
if (!response.ok) {
throw new Error(`APIPod request failed: ${response.status} ${await response.text()}`);
}
console.log(await response.json());{
"code": 200,
"message": "success",
"data": {
"task_id": "vid_task_01JEXAMPLE"
}
}MU Video
Muse Video 参考生视频
Muse Video 参考生视频用 1-4 张参考图保持人物、商品与场景一致,生成 5-60 秒 720P 带原生音频的视频。
POST
https://api.apipod.ai
/
v1
/
videos
/
generations
cURL
curl https://api.apipod.ai/v1/videos/generations \
-H "Authorization: Bearer $APIPOD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "muse-video-r2v",
"prompt": "A corgi surfing at sunset, cinematic, slow motion",
"image_urls": ["https://cdn.example.com/ref-character.jpg", "https://cdn.example.com/ref-scene.jpg"],
"duration": 10,
"aspect_ratio": "16:9",
"style_preset": "cinematic_realistic",
"generate_audio": true
}'import os
import requests
payload = {
"model": "muse-video-r2v",
"prompt": "A corgi surfing at sunset, cinematic, slow motion",
"image_urls": ["https://cdn.example.com/ref-character.jpg", "https://cdn.example.com/ref-scene.jpg"],
"duration": 10,
"aspect_ratio": "16:9",
"style_preset": "cinematic_realistic",
"generate_audio": True
}
response = requests.post(
"https://api.apipod.ai/v1/videos/generations",
headers={
"Authorization": f"Bearer {os.environ['APIPOD_API_KEY']}",
"Content-Type": "application/json",
},
json=payload,
timeout=60,
)
response.raise_for_status()
print(response.json())package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
"os"
)
func main() {
payload := map[string]any{}
if err := json.Unmarshal([]byte(`{
"model": "muse-video-r2v",
"prompt": "A corgi surfing at sunset, cinematic, slow motion",
"image_urls": ["https://cdn.example.com/ref-character.jpg", "https://cdn.example.com/ref-scene.jpg"],
"duration": 10,
"aspect_ratio": "16:9",
"style_preset": "cinematic_realistic",
"generate_audio": true
}`), &payload); err != nil {
panic(err)
}
body, err := json.Marshal(payload)
if err != nil {
panic(err)
}
req, err := http.NewRequest(http.MethodPost, "https://api.apipod.ai/v1/videos/generations", bytes.NewReader(body))
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer "+os.Getenv("APIPOD_API_KEY"))
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println(resp.Status)
}use reqwest::Client;
use serde_json::json;
use std::env;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let payload = json!({
"model": "muse-video-r2v",
"prompt": "A corgi surfing at sunset, cinematic, slow motion",
"image_urls": ["https://cdn.example.com/ref-character.jpg", "https://cdn.example.com/ref-scene.jpg"],
"duration": 10,
"aspect_ratio": "16:9",
"style_preset": "cinematic_realistic",
"generate_audio": true
});
let response = Client::new()
.post("https://api.apipod.ai/v1/videos/generations")
.bearer_auth(env::var("APIPOD_API_KEY")?)
.json(&payload)
.send()
.await?
.error_for_status()?;
println!("{}", response.text().await?);
Ok(())
}const response = await fetch("https://api.apipod.ai/v1/videos/generations", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.APIPOD_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify(
{
"model": "muse-video-r2v",
"prompt": "A corgi surfing at sunset, cinematic, slow motion",
"image_urls": ["https://cdn.example.com/ref-character.jpg", "https://cdn.example.com/ref-scene.jpg"],
"image_urls": ["https://cdn.example.com/ref-character.jpg", "https://cdn.example.com/ref-scene.jpg"],
"duration": 10,
"aspect_ratio": "16:9",
"style_preset": "cinematic_realistic",
"generate_audio": true
}
),
});
if (!response.ok) {
throw new Error(`APIPod request failed: ${response.status} ${await response.text()}`);
}
console.log(await response.json());{
"code": 200,
"message": "success",
"data": {
"task_id": "vid_task_01JEXAMPLE"
}
}muse-video-r2v 生成忠于你所关心对象成片。它不锁定某一帧,而是让你交出一到四张参考图——一个角色、一件商品、一个场景——它围绕这些参考构图,在全片保持身份与材质细节。
模型速览
| 公开模型 ID | muse-video-r2v |
| 输入 | 文本 + 图片(1-4 张) |
| 输出 | 带音频的视频 |
| 时长 | 5 / 10 / 20 / 30 / 40 / 50 / 60 秒(默认 5) |
| 清晰度 | 720p |
| 画幅 | 16:9、9:16、1:1、4:3、3:4(默认 16:9) |
| 计费 | 按输出秒数 |
参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
prompt | string | — | 必填,最多 4000 个字符。描述动作,不要描述参考图。 |
image_urls | string[] | — | 必填,1-4 个公网图片 URL。 |
duration | integer | 5 | 只能是 5、10、20、30、40、50、60。 |
aspect_ratio | string | 16:9 | 输出画幅,与参考图无关。 |
resolution | string | 720p | 目前仅支持 720p。 |
style_preset | string | none | 与文生视频相同的七档预设。 |
generate_audio | boolean | true | 设为 false 可静音人声。 |
每张参考图的作用
| 参考图数量 | 适合场景 |
|---|---|
| 1 张 | 单一主体——一个角色或一件商品,放进新场景。 |
| 2-3 张 | 主体加环境,避免模型自己编背景。 |
| 4 张 | 多角度主体一致性,例如商品四面图或角色设定稿。 |
提示词写法
描述发生什么,而不是主体长什么样——外观已经由参考图承载了。点明镜头和运动通常就够了。角色走过雨夜夜市,霓虹倒映在湿沥青上,肩部高度跟拍,浅景深
调用流程
- 带
image_urls与提示词调用POST /v1/videos/generations。 - 取
data.task_id。 - 轮询
GET /v1/videos/status/{task_id}直到completed。 - 从
data.result下载。
curl https://api.apipod.ai/v1/videos/generations \
-H "Authorization: Bearer $APIPOD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "muse-video-r2v",
"prompt": "角色走过雨夜夜市,肩部高度跟拍",
"image_urls": [
"https://cdn.example.com/character-front.jpg",
"https://cdn.example.com/night-market.jpg"
],
"duration": 10,
"aspect_ratio": "9:16",
"style_preset": "cyberpunk_neon"
}'
参考图要求
- 只接受公网 HTTPS 地址——会过期的签名链接、需要登录的域名在提交阶段就会失败。
- 一个主体一张图。角色设定稿、商品抠图、场景底图都很合适。
- 真人参考图要光线充足、正面清楚;极端裁切会丢失身份细节。
- 本模型的参考图不计入费用:计费为
时长 × 每秒单价。
授权
使用 APIPod API Key 作为 Bearer token 放在 Authorization 请求头。
请求体
application/json
APIPod 公开模型 ID。
Allowed value:
"muse-video-r2v"视频内容描述,必填,最多 4000 个字符。
Required string length:
1 - 4000必填。1-4 张参考图(人物、商品或场景),视频会保持与之一致。
Required array length:
1 - 4 elements参考图公网 URL。
视频时长(秒)。
可用选项:
5, 10, 20, 30, 40, 50, 60 生成视频的画幅比例。
可用选项:
16:9, 9:16, 1:1, 4:3, 3:4 输出清晰度。MU Video 目前仅支持 720p。
可用选项:
720p 视频风格预设。
可用选项:
none, cinematic_realistic, 2d_anime, 3d_xianxia, american_comic, cyberpunk_neon, ecommerce_ugc 是否生成人声与音效。设为 false 即静音人声。
此页面对您有帮助吗?