cURL
curl https://api.apipod.ai/v1/videos/generations \
-H "Authorization: Bearer $APIPOD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "muse-video-i2v",
"prompt": "A corgi surfing at sunset, cinematic, slow motion",
"first_frame_image": "https://cdn.example.com/first-frame.jpg",
"duration": 10,
"aspect_ratio": "16:9",
"style_preset": "cinematic_realistic",
"generate_audio": true
}'import os
import requests
payload = {
"model": "muse-video-i2v",
"prompt": "A corgi surfing at sunset, cinematic, slow motion",
"first_frame_image": "https://cdn.example.com/first-frame.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-i2v",
"prompt": "A corgi surfing at sunset, cinematic, slow motion",
"first_frame_image": "https://cdn.example.com/first-frame.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-i2v",
"prompt": "A corgi surfing at sunset, cinematic, slow motion",
"first_frame_image": "https://cdn.example.com/first-frame.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-i2v",
"prompt": "A corgi surfing at sunset, cinematic, slow motion",
"first_frame_image": "https://cdn.example.com/first-frame.jpg",
"first_frame_image": "https://cdn.example.com/first-frame.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 图生视频以必填首帧加可选尾帧实现首帧 / 首尾帧生成,输出 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-i2v",
"prompt": "A corgi surfing at sunset, cinematic, slow motion",
"first_frame_image": "https://cdn.example.com/first-frame.jpg",
"duration": 10,
"aspect_ratio": "16:9",
"style_preset": "cinematic_realistic",
"generate_audio": true
}'import os
import requests
payload = {
"model": "muse-video-i2v",
"prompt": "A corgi surfing at sunset, cinematic, slow motion",
"first_frame_image": "https://cdn.example.com/first-frame.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-i2v",
"prompt": "A corgi surfing at sunset, cinematic, slow motion",
"first_frame_image": "https://cdn.example.com/first-frame.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-i2v",
"prompt": "A corgi surfing at sunset, cinematic, slow motion",
"first_frame_image": "https://cdn.example.com/first-frame.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-i2v",
"prompt": "A corgi surfing at sunset, cinematic, slow motion",
"first_frame_image": "https://cdn.example.com/first-frame.jpg",
"first_frame_image": "https://cdn.example.com/first-frame.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-i2v 让一张静态图动起来。传一张图,它就是首帧;传两张图,Muse Video 会在首帧到尾帧之间插值出一段镜头,让你精确控制运动从哪里开始、在哪里结束。
模型速览
| 公开模型 ID | muse-video-i2v |
| 输入 | 文本 + 图片(1-2 张) |
| 输出 | 带音频的视频 |
| 时长 | 5 / 10 / 20 / 30 / 40 / 50 / 60 秒(默认 5) |
| 清晰度 | 720p |
| 画幅 | 16:9、9:16、1:1、4:3、3:4(默认 16:9) |
| 计费 | 按输出秒数 |
参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
prompt | string | — | 必填,最多 4000 个字符。描述运动,不要描述画面内容。 |
first_frame_image | string | — | 必填。首帧的公网 URL。 |
image_urls | string[] | — | 可选。传第二个 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 可静音人声。 |
reference_images 传图在这里会被拒绝——那个别名属于 muse-video-r2v,它把每张图都当主体参考而不是关键帧。
只传首帧 vs 首尾帧
| 你传的 | 上游模式 | 效果 |
|---|---|---|
| 1 张图 | first-frame | 画面从静帧自然延续出运动。 |
| 2 张图 | first-last | 从首帧到第二张图的受控转场。 |
镜头穿过飘动的雾气缓缓推向灯塔,光束扫过画面,冷调蓝调时刻
调用流程
- 带
first_frame_image(可选在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-i2v",
"prompt": "镜头穿过飘动的雾气缓缓推向灯塔",
"first_frame_image": "https://cdn.example.com/lighthouse.jpg",
"duration": 5,
"aspect_ratio": "16:9"
}'
图片要求
- 使用可直接访问的公网 HTTPS 地址。会过期的签名链接、开了防盗链的域名、需要登录才能打开的地址都会在提交阶段失败。
- 人像、商品、风景都可以;首帧里的主体不要被遮挡。
- 真人照片尽量用光线充足的中远景——极近特写能给模型发挥的空间很小。
费用
按输出秒计费,且与参考生视频不同,这里的关键帧不计入费用:时长 × 每秒单价。授权
使用 APIPod API Key 作为 Bearer token 放在 Authorization 请求头。
请求体
application/json
APIPod 公开模型 ID。
Allowed value:
"muse-video-i2v"视频内容描述,必填,最多 4000 个字符。
Required string length:
1 - 4000必填。首帧图片的公网 URL。在 image_urls 中传第二个 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 即静音人声。
此页面对您有帮助吗?