curl --request POST \
--url https://aireiter.com/api/openapi/submit \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "muse_video_ext",
"params": {
"prompt": "电影感宽银幕画面:金色夕阳下,一只雪豹沿雪山山脊走向镜头,细雪随风飘动,毛发逆光,低机位缓慢推近。声音是风声和雪地上的脚步声。无字幕、无 logo。",
"aspect_ratio": "16:9"
},
"out_task_id": "muse_ext_t2v_123456"
}'
curl --request POST \
--url https://aireiter.com/api/openapi/submit \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "muse_video_ext",
"params": {
"prompt": "Picture 1 里的男生站在卧室的拱形镜前,把 Picture 2 的印花 T 恤拉平,镜头推近胸前印花,再滑到 Picture 3 的袖标,最后拉回中景。手机手持拍摄质感,柔和自然光。",
"image_url": [
"https://example.com/person.jpg",
"https://example.com/print.jpg",
"https://example.com/sleeve.jpg"
],
"aspect_ratio": "9:16"
},
"out_task_id": "muse_ext_ref_123456"
}'
curl --request POST \
--url https://aireiter.com/api/openapi/submit \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "muse_video_ext",
"params": {
"prompt": "[Shot 1] 日出时山间湖泊的全景,水面升起薄雾,一条木船静静漂着,传来轻柔的鸟鸣。\n[Shot 2] At 00:04.000,镜头切到船桨周围水波扩散的特写,暖光在水面闪烁。\n[Shot 3] At 00:07.000,镜头切到无人机高空后拉,露出被松林山峦环绕的整片湖面。\n无字幕、无 logo。",
"aspect_ratio": "16:9"
},
"out_task_id": "muse_ext_shots_123456"
}'
import requests
url = "https://aireiter.com/api/openapi/submit"
payload = {
"model": "muse_video_ext",
"params": {
"prompt": "电影感宽银幕画面:金色夕阳下,一只雪豹沿雪山山脊走向镜头,细雪随风飘动,毛发逆光,低机位缓慢推近。声音是风声和雪地上的脚步声。无字幕、无 logo。",
"aspect_ratio": "16:9"
},
"out_task_id": "muse_ext_t2v_123456"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const url = "https://aireiter.com/api/openapi/submit";
const payload = {
model: "muse_video_ext",
params: {
prompt: "电影感宽银幕画面:金色夕阳下,一只雪豹沿雪山山脊走向镜头,细雪随风飘动,毛发逆光,低机位缓慢推近。声音是风声和雪地上的脚步声。无字幕、无 logo。",
aspect_ratio: "16:9"
},
out_task_id: "muse_ext_t2v_123456"
};
const headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
};
fetch(url, {
method: "POST",
headers: headers,
body: JSON.stringify(payload)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
func main() {
url := "https://aireiter.com/api/openapi/submit"
payload := map[string]interface{}{
"model": "muse_video_ext",
"params": map[string]interface{}{
"prompt": "电影感宽银幕画面:金色夕阳下,一只雪豹沿雪山山脊走向镜头,细雪随风飘动,毛发逆光,低机位缓慢推近。声音是风声和雪地上的脚步声。无字幕、无 logo。",
"aspect_ratio": "16:9",
},
"out_task_id": "muse_ext_t2v_123456",
}
jsonData, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
req.Header.Set("Authorization", "Bearer <token>")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
}
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
public class Main {
public static void main(String[] args) throws Exception {
String url = "https://aireiter.com/api/openapi/submit";
String payload = """
{
"model": "muse_video_ext",
"params": {
"prompt": "电影感宽银幕画面:金色夕阳下,一只雪豹沿雪山山脊走向镜头,细雪随风飘动,毛发逆光,低机位缓慢推近。声音是风声和雪地上的脚步声。无字幕、无 logo。",
"aspect_ratio": "16:9"
},
"out_task_id": "muse_ext_t2v_123456"
}
""";
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(payload))
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
<?php
$url = "https://aireiter.com/api/openapi/submit";
$payload = [
"model" => "muse_video_ext",
"params" => [
"prompt" => "电影感宽银幕画面:金色夕阳下,一只雪豹沿雪山山脊走向镜头,细雪随风飘动,毛发逆光,低机位缓慢推近。声音是风声和雪地上的脚步声。无字幕、无 logo。",
"aspect_ratio" => "16:9"
],
"out_task_id" => "muse_ext_t2v_123456"
];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer <token>",
"Content-Type: application/json"
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
{
"statusCode": 200,
"message": "",
"data": {
"out_task_id": "muse_ext_t2v_123456",
"status": "pending",
"created_at": "2026-11-04T06:03:28.242Z"
}
}
{
"statusCode": 400,
"message": "请求参数无效",
"ok": false
}
{
"error": {
"code": 401,
"message": "身份验证失败,请检查您的API密钥"
}
}
{
"error": {
"code": 500,
"message": "服务器内部错误,请稍后重试"
}
}
Muse Video Ext
Muse Video Ext 视频生成
- 异步处理模式,返回任务 ID 用于后续查询
- 支持文生视频,或最多 9 张参考图生视频
- 每次生成 1 段 10 秒、720p、自带音轨的视频
- 提示词里写时间点即可在场景间切换镜头
POST
/
api
/
openapi
/
submit
curl --request POST \
--url https://aireiter.com/api/openapi/submit \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "muse_video_ext",
"params": {
"prompt": "电影感宽银幕画面:金色夕阳下,一只雪豹沿雪山山脊走向镜头,细雪随风飘动,毛发逆光,低机位缓慢推近。声音是风声和雪地上的脚步声。无字幕、无 logo。",
"aspect_ratio": "16:9"
},
"out_task_id": "muse_ext_t2v_123456"
}'
curl --request POST \
--url https://aireiter.com/api/openapi/submit \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "muse_video_ext",
"params": {
"prompt": "Picture 1 里的男生站在卧室的拱形镜前,把 Picture 2 的印花 T 恤拉平,镜头推近胸前印花,再滑到 Picture 3 的袖标,最后拉回中景。手机手持拍摄质感,柔和自然光。",
"image_url": [
"https://example.com/person.jpg",
"https://example.com/print.jpg",
"https://example.com/sleeve.jpg"
],
"aspect_ratio": "9:16"
},
"out_task_id": "muse_ext_ref_123456"
}'
curl --request POST \
--url https://aireiter.com/api/openapi/submit \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "muse_video_ext",
"params": {
"prompt": "[Shot 1] 日出时山间湖泊的全景,水面升起薄雾,一条木船静静漂着,传来轻柔的鸟鸣。\n[Shot 2] At 00:04.000,镜头切到船桨周围水波扩散的特写,暖光在水面闪烁。\n[Shot 3] At 00:07.000,镜头切到无人机高空后拉,露出被松林山峦环绕的整片湖面。\n无字幕、无 logo。",
"aspect_ratio": "16:9"
},
"out_task_id": "muse_ext_shots_123456"
}'
import requests
url = "https://aireiter.com/api/openapi/submit"
payload = {
"model": "muse_video_ext",
"params": {
"prompt": "电影感宽银幕画面:金色夕阳下,一只雪豹沿雪山山脊走向镜头,细雪随风飘动,毛发逆光,低机位缓慢推近。声音是风声和雪地上的脚步声。无字幕、无 logo。",
"aspect_ratio": "16:9"
},
"out_task_id": "muse_ext_t2v_123456"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const url = "https://aireiter.com/api/openapi/submit";
const payload = {
model: "muse_video_ext",
params: {
prompt: "电影感宽银幕画面:金色夕阳下,一只雪豹沿雪山山脊走向镜头,细雪随风飘动,毛发逆光,低机位缓慢推近。声音是风声和雪地上的脚步声。无字幕、无 logo。",
aspect_ratio: "16:9"
},
out_task_id: "muse_ext_t2v_123456"
};
const headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
};
fetch(url, {
method: "POST",
headers: headers,
body: JSON.stringify(payload)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
func main() {
url := "https://aireiter.com/api/openapi/submit"
payload := map[string]interface{}{
"model": "muse_video_ext",
"params": map[string]interface{}{
"prompt": "电影感宽银幕画面:金色夕阳下,一只雪豹沿雪山山脊走向镜头,细雪随风飘动,毛发逆光,低机位缓慢推近。声音是风声和雪地上的脚步声。无字幕、无 logo。",
"aspect_ratio": "16:9",
},
"out_task_id": "muse_ext_t2v_123456",
}
jsonData, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
req.Header.Set("Authorization", "Bearer <token>")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
}
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
public class Main {
public static void main(String[] args) throws Exception {
String url = "https://aireiter.com/api/openapi/submit";
String payload = """
{
"model": "muse_video_ext",
"params": {
"prompt": "电影感宽银幕画面:金色夕阳下,一只雪豹沿雪山山脊走向镜头,细雪随风飘动,毛发逆光,低机位缓慢推近。声音是风声和雪地上的脚步声。无字幕、无 logo。",
"aspect_ratio": "16:9"
},
"out_task_id": "muse_ext_t2v_123456"
}
""";
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(payload))
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
<?php
$url = "https://aireiter.com/api/openapi/submit";
$payload = [
"model" => "muse_video_ext",
"params" => [
"prompt" => "电影感宽银幕画面:金色夕阳下,一只雪豹沿雪山山脊走向镜头,细雪随风飘动,毛发逆光,低机位缓慢推近。声音是风声和雪地上的脚步声。无字幕、无 logo。",
"aspect_ratio" => "16:9"
],
"out_task_id" => "muse_ext_t2v_123456"
];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer <token>",
"Content-Type: application/json"
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
{
"statusCode": 200,
"message": "",
"data": {
"out_task_id": "muse_ext_t2v_123456",
"status": "pending",
"created_at": "2026-11-04T06:03:28.242Z"
}
}
{
"statusCode": 400,
"message": "请求参数无效",
"ok": false
}
{
"error": {
"code": 401,
"message": "身份验证失败,请检查您的API密钥"
}
}
{
"error": {
"code": 500,
"message": "服务器内部错误,请稍后重试"
}
}
时长固定 10 秒,分辨率固定 720p,成片自带生成的音轨。
video_length 和 resolution 可以不传。不支持参考视频、参考音频、首尾帧、seed、negative_prompt,也不能关闭音轨。Authorizations
string
必填
所有接口均需要使用 Bearer Token 进行认证。获取 API Key:访问 API Key 管理页面 获取您的 API Key。使用时在请求头中添加:
Authorization: Bearer YOUR_API_KEY
Body
string
必填
模型名称,固定为
muse_video_ext。object
必填
模型参数对象。
显示 params 对象属性
显示 params 对象属性
string
必填
视频生成的文本描述,支持中文和英文。必填,且去掉首尾空白后不能为空。有参考图时,可以在提示词里用
Picture 1、Picture 2 指代第 1、第 2 张图。多个镜头时,每个镜头单独写一段,并用时间点标出切换位置,例如:[Shot 1] 客厅全景,女生举着挂在衣架上的 T 恤……
[Shot 2] At 00:04.000,镜头切到白墙前,男生穿上这件 T 恤……
提示词里出现真实品牌、球队或 logo 名称,可能无法通过内容审核,任务会以失败结束。请改用不带名称的描述后重试。
string | string[]
参考图 URL,必须可由公网直接访问。也可传单张字符串。不传就是文生视频。
- 最多 9 张
- 所有图片的原始大小合计不超过 11 MiB
- 推荐 PNG、JPEG、WebP
blob: 地址。string
默认值:"auto"
视频宽高比:
auto- 默认值。有参考图时跟随参考图的构图,纯文字时为16:91:116:99:164:33:43:22:3
string
默认值:"10"
视频时长,固定为
"10"。可以不传。string
默认值:"720p"
输出分辨率,固定为
720p。可以不传。string
必填
发起方任务 ID。用户自定义的任务标识,必填。仅支持字母、数字、下划线和横线,长度为 1-64 个字符。后续可使用该 ID 查询任务状态和结果。
Response
string
发起方任务 ID,可用于查询结果。
string
初始状态,通常为
"pending"。string
创建时间,ISO 格式。
Query Task
本模型是异步视频生成。提交任务后,请使用out_task_id 查询任务状态。也可参见 获取任务状态。
string
必填
提交任务时传入的发起方任务 ID。
curl --request POST \
--url https://aireiter.com/api/openapi/query \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"out_task_id": "muse_ext_t2v_123456"
}'
output 数组会包含生成的视频,元素含 video 字段。
生成耗时因输入而异:纯文字通常约 1 到 2 分钟,参考图较多时可能需要几分钟,请持续轮询,不要重复提交。
使用说明
| 输入 | image_url | aspect_ratio |
|---|---|---|
| 文生视频 | 不要传,或空数组 | 不传默认 16:9;也可指定 |
| 参考图生视频 | 1–9 张,合计不超过 11 MiB | 建议用 auto 跟随参考图,或指定 |
- 切点时间可靠:提示词里写的时间点,实际切换误差在 1 秒以内。
- 商品上的文字、印花和 logo 在各镜头间保持一致。
- 人物在切镜后可能与参考图有差异。需要同一个人保持可辨认时,建议最多 2 个切点,并在每个镜头里重复写他的外貌描述。
Request Examples
curl --request POST \
--url https://aireiter.com/api/openapi/submit \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "muse_video_ext",
"params": {
"prompt": "电影感宽银幕画面:金色夕阳下,一只雪豹沿雪山山脊走向镜头,细雪随风飘动,毛发逆光,低机位缓慢推近。声音是风声和雪地上的脚步声。无字幕、无 logo。",
"aspect_ratio": "16:9"
},
"out_task_id": "muse_ext_t2v_123456"
}'
curl --request POST \
--url https://aireiter.com/api/openapi/submit \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "muse_video_ext",
"params": {
"prompt": "Picture 1 里的男生站在卧室的拱形镜前,把 Picture 2 的印花 T 恤拉平,镜头推近胸前印花,再滑到 Picture 3 的袖标,最后拉回中景。手机手持拍摄质感,柔和自然光。",
"image_url": [
"https://example.com/person.jpg",
"https://example.com/print.jpg",
"https://example.com/sleeve.jpg"
],
"aspect_ratio": "9:16"
},
"out_task_id": "muse_ext_ref_123456"
}'
curl --request POST \
--url https://aireiter.com/api/openapi/submit \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "muse_video_ext",
"params": {
"prompt": "[Shot 1] 日出时山间湖泊的全景,水面升起薄雾,一条木船静静漂着,传来轻柔的鸟鸣。\n[Shot 2] At 00:04.000,镜头切到船桨周围水波扩散的特写,暖光在水面闪烁。\n[Shot 3] At 00:07.000,镜头切到无人机高空后拉,露出被松林山峦环绕的整片湖面。\n无字幕、无 logo。",
"aspect_ratio": "16:9"
},
"out_task_id": "muse_ext_shots_123456"
}'
import requests
url = "https://aireiter.com/api/openapi/submit"
payload = {
"model": "muse_video_ext",
"params": {
"prompt": "电影感宽银幕画面:金色夕阳下,一只雪豹沿雪山山脊走向镜头,细雪随风飘动,毛发逆光,低机位缓慢推近。声音是风声和雪地上的脚步声。无字幕、无 logo。",
"aspect_ratio": "16:9"
},
"out_task_id": "muse_ext_t2v_123456"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const url = "https://aireiter.com/api/openapi/submit";
const payload = {
model: "muse_video_ext",
params: {
prompt: "电影感宽银幕画面:金色夕阳下,一只雪豹沿雪山山脊走向镜头,细雪随风飘动,毛发逆光,低机位缓慢推近。声音是风声和雪地上的脚步声。无字幕、无 logo。",
aspect_ratio: "16:9"
},
out_task_id: "muse_ext_t2v_123456"
};
const headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
};
fetch(url, {
method: "POST",
headers: headers,
body: JSON.stringify(payload)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
func main() {
url := "https://aireiter.com/api/openapi/submit"
payload := map[string]interface{}{
"model": "muse_video_ext",
"params": map[string]interface{}{
"prompt": "电影感宽银幕画面:金色夕阳下,一只雪豹沿雪山山脊走向镜头,细雪随风飘动,毛发逆光,低机位缓慢推近。声音是风声和雪地上的脚步声。无字幕、无 logo。",
"aspect_ratio": "16:9",
},
"out_task_id": "muse_ext_t2v_123456",
}
jsonData, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
req.Header.Set("Authorization", "Bearer <token>")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
}
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
public class Main {
public static void main(String[] args) throws Exception {
String url = "https://aireiter.com/api/openapi/submit";
String payload = """
{
"model": "muse_video_ext",
"params": {
"prompt": "电影感宽银幕画面:金色夕阳下,一只雪豹沿雪山山脊走向镜头,细雪随风飘动,毛发逆光,低机位缓慢推近。声音是风声和雪地上的脚步声。无字幕、无 logo。",
"aspect_ratio": "16:9"
},
"out_task_id": "muse_ext_t2v_123456"
}
""";
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(payload))
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
<?php
$url = "https://aireiter.com/api/openapi/submit";
$payload = [
"model" => "muse_video_ext",
"params" => [
"prompt" => "电影感宽银幕画面:金色夕阳下,一只雪豹沿雪山山脊走向镜头,细雪随风飘动,毛发逆光,低机位缓慢推近。声音是风声和雪地上的脚步声。无字幕、无 logo。",
"aspect_ratio" => "16:9"
],
"out_task_id" => "muse_ext_t2v_123456"
];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer <token>",
"Content-Type: application/json"
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
{
"statusCode": 200,
"message": "",
"data": {
"out_task_id": "muse_ext_t2v_123456",
"status": "pending",
"created_at": "2026-11-04T06:03:28.242Z"
}
}
{
"statusCode": 400,
"message": "请求参数无效",
"ok": false
}
{
"error": {
"code": 401,
"message": "身份验证失败,请检查您的API密钥"
}
}
{
"error": {
"code": 500,
"message": "服务器内部错误,请稍后重试"
}
}