调用流程
视频生成是异步接口,一次完整调用包含以下步骤:
- 调用
GET /v1/models获取当前可用的视频模型 ID。 - 可选:将本地图片或视频上传到素材库,取得
assetUrl。 - 调用
POST /v1/generation/tasks创建视频生成任务。 - 保存响应中的
id或task_id,每隔 3~5 秒查询一次任务状态。 - 任务成功后读取响应中的视频地址;任务失败时记录错误信息并按需重试。
选择模型
先查询模型列表,并将返回的完整模型 ID 原样用作 model。不要根据展示名称自行拼接模型 ID;模型支持的时长、比例、分辨率和输入类型以实时返回结果及账户权限为准。
curl https://api.mindon.fun/v1/models \
-H "Authorization: Bearer YOUR_API_KEY"创建视频任务
调用 POST /v1/generation/tasks 创建任务。content 是按顺序排列的内容数组:文本提示词使用 text,参考图片使用 image_url,参考视频使用 video_url。
curl https://api.mindon.fun/v1/generation/tasks \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "doubao/doubao-seedance-2-0-260128",
"content": [
{
"type": "text",
"text": "海边日落,电影感镜头,海浪缓慢拍打礁石"
}
],
"duration": 5,
"resolution": "720p",
"ratio": "16:9",
"watermark": false
}'| 字段 | 必填 | 说明 |
|---|---|---|
model | 是 | 通过 GET /v1/models 获取的完整模型 ID。 |
content | 是 | 提示词及参考素材数组,至少包含一个有效内容项。 |
duration | 否 | 输出视频时长,单位为秒;可选值由模型决定。 |
resolution | 否 | 例如 480p、720p、1080p;仅传模型支持的值。 |
ratio | 否 | 画面比例,例如 16:9、9:16、1:1、4:3、3:4。 |
generate_audio | 否 | 是否生成音频,仅在当前模型支持时传入。 |
watermark | 否 | 是否添加水印,仅在当前模型支持时生效。 |
input_video_duration_sec | 视频输入时建议 | 参考视频的实际时长,单位为秒,用于准确估算视频输入用量。 |
创建成功通常会立即返回任务信息,而不会等待视频生成完成:
{
"id": "task_xxxxxxxxxxxxxxxx",
"task_id": "task_xxxxxxxxxxxxxxxx",
"object": "video",
"model": "doubao/doubao-seedance-2-0-260128",
"status": "queued",
"progress": 0,
"created_at": 1785729600
}不同任务可能只返回 id 或 task_id。客户端应兼容两者,并在收到响应后立即保存任务 ID。即使初始状态为 queued,也不代表任务异常。
轮询任务状态
使用创建响应中的任务 ID 请求 GET /v1/generation/tasks/{task_id}。推荐每隔 3~5 秒查询一次;发生临时网络错误时使用递增等待时间,不要同时对同一个任务发起大量查询。
curl https://api.mindon.fun/v1/generation/tasks/TASK_ID \
-H "Authorization: Bearer YOUR_API_KEY"| 状态 | 含义 | 客户端处理 |
|---|---|---|
queued | 任务已接收,等待处理。 | 继续轮询,不要重复创建相同任务。 |
running | 任务正在生成。 | 继续轮询,可显示 progress(如果响应提供)。 |
succeeded | 任务生成成功。 | 停止轮询,读取响应中的视频 URL 并及时保存。 |
failed | 任务生成失败。 | 停止轮询,记录 error 后决定是否重试。 |
为兼容不同模型返回格式,也建议将 success、completed 视为成功终态,将 error 视为失败终态。不要假设任务一定在固定时间内完成。
const apiKey = process.env.MINDON_API_KEY;
const taskId = "TASK_ID";
while (true) {
const response = await fetch(
`https://api.mindon.fun/v1/generation/tasks/${taskId}`,
{ headers: { Authorization: `Bearer ${apiKey}` } },
);
const task = await response.json();
if (!response.ok) throw new Error(task.error?.message ?? "查询任务失败");
if (["succeeded", "success", "completed"].includes(task.status)) {
console.log("生成成功", task);
break;
}
if (["failed", "error"].includes(task.status)) {
throw new Error(task.error?.message ?? "视频生成失败");
}
await new Promise((resolve) => setTimeout(resolve, 4000));
}素材库调用说明
Seedance 2.0 支持使用图片和视频作为参考素材。对于本地文件,推荐先调用 POST /v1/assets/upload 素材上传接口取得 assetUrl,再创建视频任务。上传完成后即可使用返回值,无需另外查询素材处理状态。
| 素材 | 格式 | 大小限制 | 引用方式 |
|---|---|---|---|
| 图片 | PNG、JPEG、WebP | 最大 10MB | image_url + reference_image |
| 视频 | MP4 | 最大 50MB | video_url + reference_video |
当前素材上传接口暂不支持音频。上传和创建任务时应使用相同的模型 ID。
1. 上传本地素材
curl https://api.mindon.fun/v1/assets/upload \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "model=doubao/doubao-seedance-2-0-260128" \
-F "file=@./reference.png"{
"assetUrl": "asset://asset-xxxxxxxx"
}assetUrl 是完整的素材引用地址。请将其视为不透明字符串并原样使用,不要提取、修改或自行拼接其中的素材 ID。
2. 使用图片素材创建任务
curl https://api.mindon.fun/v1/generation/tasks \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "doubao/doubao-seedance-2-0-260128",
"content": [
{
"type": "text",
"text": "让参考图中的人物自然转身,镜头缓慢向前推进"
},
{
"type": "image_url",
"image_url": {
"url": "asset://asset-xxxxxxxx"
},
"role": "reference_image"
}
],
"duration": 5,
"resolution": "720p",
"ratio": "16:9"
}'3. 使用视频参考素材
上传 MP4 文件后,将返回的 assetUrl 放入 video_url.url:
{
"model": "doubao/doubao-seedance-2-0-260128",
"content": [
{
"type": "text",
"text": "参考输入视频的动作节奏,生成新的电影感画面"
},
{
"type": "video_url",
"video_url": {
"url": "asset://asset-xxxxxxxx"
},
"role": "reference_video"
}
],
"input_video_duration_sec": 5,
"duration": 5,
"resolution": "720p",
"ratio": "16:9"
}4. 直接使用公网素材 URL
如果素材已经托管在公网,可以跳过上传步骤,直接把 HTTPS URL 放入 image_url.url 或 video_url.url。系统会自动处理素材,客户端仍使用创建任务时返回的同一个任务 ID 轮询。
{
"type": "image_url",
"image_url": {
"url": "https://example.com/reference.png"
},
"role": "reference_image"
}- URL 必须使用 HTTPS,并允许从公网直接下载。
- 不能依赖登录状态、Cookie、临时请求头或防盗链配置。
- 地址应直接返回素材文件,不能返回 HTML 页面。
- 正式生产环境推荐使用素材上传接口,避免外部 URL 失效。
5. 多素材引用
需要多个参考素材时,可以在 content 中继续添加 image_url 或 video_url 内容项。素材数量、类型组合和时长限制以模型当前能力为准。
常见状态码
| 状态码 | 含义 | 处理方式 |
|---|---|---|
| 400 | 请求字段、素材格式、模型或分辨率不支持。 | 检查模型 ID、content、文件格式和可选参数。 |
| 401 | API Key 缺失、无效或已停用。 | 检查 Authorization: Bearer 请求头。 |
| 402 | 账户额度不足。 | 补充额度后重新创建任务。 |
| 404 | 任务不存在或不属于当前账户。 | 确认任务 ID 和所使用的 API Key。 |
| 502 | 素材处理或生成服务暂时异常。 | 确认公网素材可访问,稍后重试;持续失败时联系技术支持。 |
| 503 | 当前模型暂时不可用。 | 稍后重试或通过 GET /v1/models 选择其他可用模型。 |
使用建议
- 上传素材和创建任务时使用同一个完整模型 ID。
- 在业务侧保存已上传素材的
assetUrl,避免重复上传相同文件。 - 不要自行构造素材地址,也不要把素材库当作永久文件存储服务。
- 生产环境不要使用 Base64 传递大文件,优先使用素材上传接口。
- 创建任务请求超时前不要盲目重试;应先确认是否已经取得任务 ID,避免重复计费。
- 视频生成成功后应及时将输出文件保存到自己的存储服务。