文档大类概览
概览
完整调用流程:
1. 上传素材POST
返回素材 URL 和文件元数据。
https://files.sudashuiapi.com返回素材 URL 和文件元数据。
2. 创建任务POST
提交文生视频或参考素材生视频任务。
/v1/video/generations提交文生视频或参考素材生视频任务。
3. 查询任务GET
轮询任务状态和结果。
/v1/video/generations/{task_id}轮询任务状态和结果。
4. 获取结果
成功后拿到视频地址。
data.result_url 或 creations[0].url成功后拿到视频地址。
文档大类上传素材文件
上传素材文件
POSThttps://files.sudashuiapi.com
上传图片、音频或视频。响应中的 url 可用于 imageUrls、audioUrls、videoUrls、firstFrameUrl 或 lastFrameUrl;其余字段用于描述已上传文件。
curl --location 'https://files.sudashuiapi.com' \
-H 'Authorization: Bearer 你的_API_Key' \
--form 'file=@"/D:/Users/24553/Pictures/004.jpg"'
const form = new FormData();
form.append("file", fileInput.files[0]);
const response = await fetch("https://files.sudashuiapi.com", {
method: "POST",
headers: {
"Authorization": "Bearer 你的_API_Key"
},
body: form
});
const data = await response.json();
import requests
with open(r"D:/Users/24553/Pictures/004.jpg", "rb") as f:
response = requests.post(
"https://files.sudashuiapi.com",
headers={"Authorization": "Bearer 你的_API_Key"},
files={"file": f},
)
print(response.json())
<?php
$ch = curl_init("https://files.sudashuiapi.com");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer 你的_API_Key"],
CURLOPT_POSTFIELDS => [
"file" => new CURLFile("D:/Users/24553/Pictures/004.jpg")
]
]);
echo curl_exec($ch);
{
"url": "https://files.sudashuiapi.com/proxy/uploads/20260826/1787710210571-665e406a-2c82-4753-b0bc-9c4a0b0d2b31-03e6015fdd3ab97aa764f5221799d69a.png",
"key": "uploads/20260826/1787710210571-665e406a-2c82-4753-b0bc-9c4a0b0d2b31-03e6015fdd3ab97aa764f5221799d69a.png",
"size": 899870,
"contentType": "image/png",
"expiresAt": "2026-08-26T04:10:10.571Z"
}
| 字段 | 类型 | 说明 |
|---|---|---|
url | string | 素材访问 URL,创建视频任务时放入对应的素材字段。 |
key | string | 素材在文件存储中的对象键,一般无需在视频请求中传入。 |
size | integer | 文件大小,单位为字节。 |
contentType | string | 文件 MIME 类型,例如 image/png。 |
expiresAt | string | 响应中的时间字段,使用 ISO 8601 格式。 |
文件类型与限制
| 类型 | MIME Type | 扩展名 | 上传大小 |
|---|---|---|---|
| 图片 | image/jpeg | .jpeg, .jpg | 单张小于 30 MB |
| 图片 | image/png | .png | 单张小于 30 MB |
| 图片 | image/webp | .webp | 单张小于 30 MB |
| 视频 | video/mp4 | .mp4 | 单个小于 50 MB |
| 视频 | video/quicktime | .mov | 单个小于 50 MB |
| 音频 | audio/mpeg | .mp3 | 单个小于 15 MB |
| 音频 | audio/wav | .wav | 单个小于 15 MB |
文档大类创建视频生成任务
创建视频生成任务
POSThttps://api.sudashuiapi.com/v1/video/generations
获取可用模型
可用模型和模型能力会持续更新。本页面不固定展示模型列表,请通过模型接口或模型广场查看最新可用模型及详细参数。
curl https://api.sudashuiapi.com/v1/models \
-H "Authorization: Bearer 你的_API_Key"
不要额外传 resolution,分辨率由模型名决定。
基础参数
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
model | string | 是 | 必须是 /v1/models 或模型广场中当前可用的模型名,分辨率由模型名决定。 |
prompt | string | 建议填写 | 提示词,支持 @image1、@audio1、@video1 等引用。 |
duration | number | 是 | 通用文档范围为 4 到 15 秒;具体可用时长以模型广场中的单模型说明为准。 |
metadata.payload | string | 是 | JSON 字符串,不能直接传 JSON 对象。 |
不要在外层传
images、imageUrls、videoUrls、audioUrls、firstFrameUrl、lastFrameUrl、aspectRatio、mode、resolution。metadata.payload 参数
metadata.payload 是一个 JSON 字符串。它内部的 JSON 对象支持以下字段:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
aspectRatio | string | 是 | 画面比例 |
mode | string | 是 | 生成模式:references 或 frames |
imageUrls | string[] | 否 | 图片 URL 数组,references 模式使用;可用数量以模型广场中的模型说明为准 |
videoUrls | string[] | 否 | 视频 URL 数组,references 模式使用;可用数量以模型广场中的模型说明为准 |
audioUrls | string[] | 否 | 音频 URL 数组,references 模式使用;可用数量以模型广场中的模型说明为准 |
firstFrameUrl | string | 条件必填 | 首帧图片 URL,frames 模式必填 |
lastFrameUrl | string | 条件必填 | 尾帧图片 URL,frames 模式必填 |
不同模型支持的时长、参考图片、参考视频、参考音频数量可能不同。下表保留通用调用范围,实际请求请根据模型广场中的模型说明调整。
aspectRatio 可选值
1:1 3:4 4:3 9:16 16:9 21:9 adaptivemode 可选值
references frames参数规则
mode=references:用于文生视频、图片参考、视频参考、音频参考,以及多素材组合参考。mode=frames:用于首尾帧视频。mode=frames时必须传firstFrameUrl和lastFrameUrl。mode=frames时不能传imageUrls、videoUrls、audioUrls。mode=references时不能传firstFrameUrl、lastFrameUrl。metadata.payload内不能传model、resolution、duration、prompt。
素材顺序对应
| 数组字段 | 数组位置 | prompt 引用 |
|---|---|---|
imageUrls | imageUrls[0] / imageUrls[1] | @image1 / @image2 |
audioUrls | audioUrls[0] / audioUrls[1] | @audio1 / @audio2 |
videoUrls | videoUrls[0] / videoUrls[1] | @video1 / @video2 |
@image1 对应第一张图片,不是文件名中的数字。图片、音频、视频的编号互不影响。
生成任务素材限制
| 素材类型 | 数量限制 | 大小限制 | 时长限制 | 其他限制 |
|---|---|---|---|---|
| 图片 | 以模型广场说明为准 | 单张小于 30 MB | - | 支持 jpg / jpeg / png / webp |
| 音频 | 以模型广场说明为准 | 单个小于 15 MB | 以模型广场说明为准 | 支持 mp3 / wav |
| 视频 | 以模型广场说明为准 | 单个小于 50 MB | 以模型广场说明为准 | 像素和格式要求以模型广场说明为准 |
imageUrls、audioUrls、videoUrls 的可用数量由具体模型决定,请以模型广场上对应模型的详细说明为准。创建任务响应
创建成功响应
创建成功后会返回任务对象。请保存 task_id,用于后续查询。
{
"id": "task_DrwbCgmERlqqvftqyf2o59FaWynwJPDN",
"task_id": "task_DrwbCgmERlqqvftqyf2o59FaWynwJPDN",
"object": "video",
"model": "sd-api-2-fast-720p",
"status": "queued",
"progress": 0,
"created_at": 1780990464
}
创建失败响应
参数不合法、鉴权失败或其他请求错误时,会返回失败响应。常见参数错误示例:
{
"code": "fail_to_fetch_task",
"message": "{\"state\":\"failed\",\"err_code\":\"invalid_request\",\"message\":\"duration must be from 4 to 15 seconds.\",\"creations\":[]}",
"data": null
}
创建任务场景示例
文生视频
无素材curl https://api.sudashuiapi.com/v1/video/generations \
-H "Authorization: Bearer 你的_API_Key" \
-H "Content-Type: application/json" \
-d '{
"model": "sd-api-2-fast-720p",
"prompt": "一只可爱的小猫,电影感镜头",
"duration": 4,
"metadata": {
"payload": "{\"aspectRatio\":\"16:9\",\"mode\":\"references\"}"
}
}'
const response = await fetch("https://api.sudashuiapi.com/v1/video/generations", {
method: "POST",
headers: {
"Authorization": "Bearer 你的_API_Key",
"Content-Type": "application/json"
},
body: JSON.stringify({
model: "sd-api-2-fast-720p",
prompt: "一只可爱的小猫,电影感镜头",
duration: 4,
metadata: {
payload: JSON.stringify({ aspectRatio: "16:9", mode: "references" })
}
})
});
const data = await response.json();
import json
import requests
response = requests.post(
"https://api.sudashuiapi.com/v1/video/generations",
headers={
"Authorization": "Bearer 你的_API_Key",
"Content-Type": "application/json",
},
json={
"model": "sd-api-2-fast-720p",
"prompt": "一只可爱的小猫,电影感镜头",
"duration": 4,
"metadata": {
"payload": json.dumps({"aspectRatio": "16:9", "mode": "references"})
},
},
)
print(response.json())
<?php
$payload = [
"model" => "sd-api-2-fast-720p",
"prompt" => "一只可爱的小猫,电影感镜头",
"duration" => 4,
"metadata" => [
"payload" => json_encode(["aspectRatio" => "16:9", "mode" => "references"])
]
];
$ch = curl_init("https://api.sudashuiapi.com/v1/video/generations");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer 你的_API_Key",
"Content-Type: application/json"
],
CURLOPT_POSTFIELDS => json_encode($payload, JSON_UNESCAPED_UNICODE)
]);
echo curl_exec($ch);
单图参考生视频
@image1{
"model": "sd-api-2-fast-720p",
"prompt": "让 @image1 里的小猫动起来,电影感镜头",
"duration": 4,
"metadata": {
"payload": "{\"aspectRatio\":\"16:9\",\"mode\":\"references\",\"imageUrls\":[\"https://files.sudashuiapi.com/proxy/xxx/cat.jpg\"]}"
}
}
多图参考生视频
@image1 + @image2{
"model": "sd-api-2-fast-720p",
"prompt": "让 @image1 里的角色进入 @image2 的场景中,自然运镜,电影感镜头",
"duration": 4,
"metadata": {
"payload": "{\"aspectRatio\":\"16:9\",\"mode\":\"references\",\"imageUrls\":[\"https://files.sudashuiapi.com/proxy/xxx/character.jpg\",\"https://files.sudashuiapi.com/proxy/xxx/scene.jpg\"]}"
}
}
图片 + 音频参考
@image1 + @audio1{
"model": "sd-api-2-fast-720p",
"prompt": "让 @image1 里的角色跟着 @audio1 的节奏做动作",
"duration": 4,
"metadata": {
"payload": "{\"aspectRatio\":\"16:9\",\"mode\":\"references\",\"imageUrls\":[\"https://files.sudashuiapi.com/proxy/xxx/character.jpg\"],\"audioUrls\":[\"https://files.sudashuiapi.com/proxy/xxx/music.mp3\"]}"
}
}
视频参考
@video1{
"model": "sd-api-2-fast-720p",
"prompt": "参考 @video1 的动作,把主体变成可爱小猫,动画风格",
"duration": 4,
"metadata": {
"payload": "{\"aspectRatio\":\"16:9\",\"mode\":\"references\",\"videoUrls\":[\"https://files.sudashuiapi.com/proxy/xxx/reference.mp4\"]}"
}
}
图片 + 视频 + 音频参考
@image1 + @video1 + @audio1{
"model": "sd-api-2-fast-720p",
"prompt": "让 @image1 里的角色参考 @video1 的动作,并跟随 @audio1 的节奏,生成电影感视频",
"duration": 4,
"metadata": {
"payload": "{\"aspectRatio\":\"16:9\",\"mode\":\"references\",\"imageUrls\":[\"https://files.sudashuiapi.com/proxy/xxx/character.jpg\"],\"videoUrls\":[\"https://files.sudashuiapi.com/proxy/xxx/action.mp4\"],\"audioUrls\":[\"https://files.sudashuiapi.com/proxy/xxx/music.mp3\"]}"
}
}
多图 + 多音频 + 多视频参考
多素材组合{
"model": "sd-api-2-fast-720p",
"prompt": "让 @image1 的角色在 @image2 的场景中,参考 @video1 的动作,配合 @audio1 的节奏,结尾参考 @video2 的镜头运动",
"duration": 6,
"metadata": {
"payload": "{\"aspectRatio\":\"16:9\",\"mode\":\"references\",\"imageUrls\":[\"https://files.sudashuiapi.com/proxy/xxx/character.jpg\",\"https://files.sudashuiapi.com/proxy/xxx/scene.jpg\"],\"videoUrls\":[\"https://files.sudashuiapi.com/proxy/xxx/action.mp4\",\"https://files.sudashuiapi.com/proxy/xxx/camera.mp4\"],\"audioUrls\":[\"https://files.sudashuiapi.com/proxy/xxx/music.mp3\",\"https://files.sudashuiapi.com/proxy/xxx/effect.wav\"]}"
}
}
首尾帧生成视频
frames首尾帧模式使用 firstFrameUrl 和 lastFrameUrl,不要再传 imageUrls。
{
"model": "sd-2-1080p",
"prompt": "从第一张图自然过渡到第二张图,电影感镜头",
"duration": 6,
"metadata": {
"payload": "{\"aspectRatio\":\"16:9\",\"mode\":\"frames\",\"firstFrameUrl\":\"https://files.sudashuiapi.com/proxy/xxx/first.jpg\",\"lastFrameUrl\":\"https://files.sudashuiapi.com/proxy/xxx/last.jpg\"}"
}
}
文档大类查询任务
查询任务
GEThttps://api.sudashuiapi.com/v1/video/generations/{task_id}
curl https://api.sudashuiapi.com/v1/video/generations/task_DrwbCgmERlqqvftqyf2o59FaWynwJPDN \
-H "Authorization: Bearer 你的_API_Key"
const response = await fetch(
"https://api.sudashuiapi.com/v1/video/generations/task_DrwbCgmERlqqvftqyf2o59FaWynwJPDN",
{ headers: { "Authorization": "Bearer 你的_API_Key" } }
);
const data = await response.json();
import requests
response = requests.get(
"https://api.sudashuiapi.com/v1/video/generations/task_DrwbCgmERlqqvftqyf2o59FaWynwJPDN",
headers={"Authorization": "Bearer 你的_API_Key"},
)
print(response.json())
<?php
$ch = curl_init("https://api.sudashuiapi.com/v1/video/generations/task_DrwbCgmERlqqvftqyf2o59FaWynwJPDN");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer 你的_API_Key"]
]);
echo curl_exec($ch);
状态说明
| 外层状态 | 内层 state | 含义 |
|---|---|---|
SUBMITTED | queueing | 已提交,排队中 |
IN_PROGRESS | processing | 生成中 |
SUCCESS | success | 生成成功 |
FAILURE | failed | 生成失败 |
成功示例
{
"code": "success",
"message": "",
"data": {
"task_id": "task_DrwbCgmERlqqvftqyf2o59FaWynwJPDN",
"status": "SUCCESS",
"result_url": "https://files.sudashuiapi.com/proxy/generating/output.mp4",
"progress": "100%",
"data": {
"state": "success",
"message": "",
"err_code": "",
"creations": [
{
"id": "6a27c2007f67cc1d1c5bdcc7",
"url": "https://files.sudashuiapi.com/proxy/generating/output.mp4",
"cover_url": "https://files.sudashuiapi.com/proxy/generating/first.jpg"
}
]
}
}
}
失败示例
{
"code": "success",
"message": "",
"data": {
"task_id": "task_mDlJcHGjpem3n6aR4I0DeiYMOqvtWAA6",
"status": "FAILURE",
"fail_reason": "Real human faces are not supported.",
"result_url": "Real human faces are not supported.",
"progress": "100%",
"data": {
"state": "failed",
"message": "Real human faces are not supported.",
"err_code": "Real human faces are not supported.",
"creations": []
}
}
}
文档大类错误响应
错误响应
参数错误
{
"code": "fail_to_fetch_task",
"message": "{\"state\":\"failed\",\"err_code\":\"invalid_request\",\"message\":\"duration must be from 4 to 15 seconds.\",\"creations\":[]}",
"data": null
}
常见错误原因
| 错误原因 | 说明 |
|---|---|
duration must be from 4 to 15 seconds | 时长不在 4-15 秒范围内。 |
metadata.payload.aspectRatio must be one of... | 画面比例不合法。 |
metadata.payload.mode must be one of... | 生成模式不合法。 |
Do not pass top-level images... | 媒体参数不能放外层。 |
unauthorized | 缺少或使用了无效 API Key。 |