将 Seedance 1.0 Pro 250528 与 Comfy Router 配合使用
通过 Comfy Router 调用 byteplus/seedance-1-0-pro-250528:endpoint、请求形状以及 Router 返回的响应。
将 Seedance 1.0 Pro 250528 与 Comfy Router 配合使用
通过 Comfy Router 调用 byteplus/seedance-1-0-pro-250528:endpoint、请求形状以及 Router 返回的响应。
byteplus/seedance-1-0-pro-250528 的 API 参考,由 Comfy Router 提供,来源为 BytePlus。
输入: 文本, 图像 · 输出: 视频
快速开始
在你的 Comfy 工作区中创建一个密钥,并将其导出为 COMFY_API_KEY。Python 和 TypeScript 代码片段使用 Comfy SDK(pip install comfy-sdk 和 npm install @comfyorg/sdk);cURL 代码片段则是通过原始 HTTP 发起的同一调用。
模型 ID: byteplus/seedance-1-0-pro-250528
端点: POST https://api.comfy.org/v2/models/byteplus/seedance-1-0-pro-250528
[tab] 等待结果 ``python Python theme={null} from comfy_sdk import Comfy # 从环境变量中读取 COMFY_API_KEY。 # SDK 会自动创建幂等键,并在自动重试时复用它。 with Comfy() as client: result = client.models.run( "byteplus/seedance-1-0-pro-250528", { "content": [ { "text": "A red fox trotting through a snowy pine forest", "type": "text", }, ], "duration": 5, "ratio": "16:9", "resolution": "720p", }, ) print(result)``typescript TypeScript theme={null} import { comfy } from "@comfyorg/sdk"; // 从环境变量中读取 COMFY_API_KEY。 // SDK 会自动创建幂等键,并在自动重试时复用它。 const { data } = await comfy.models.run("byteplus/seedance-1-0-pro-250528", { content: [ { text: "A red fox trotting through a snowy pine forest", type: "text", }, ], duration: 5, ratio: "16:9", resolution: "720p", }); console.log(data);``bash cURL theme={null} curl https://api.comfy.org/v2/models/byteplus/seedance-1-0-pro-250528 \ -H "X-API-Key: $COMFY_API_KEY" \ -H "Idempotency-Key: $(uuidgen)" \ -H "Content-Type: application/json" \ -d "{\"content\": [{\"text\":\"A red fox trotting through a snowy pine forest\",\"type\":\"text\"}], \"duration\": 5, \"ratio\": \"16:9\", \"resolution\": \"720p\"}"``
[tab] 加入队列并稍后收集 将相同的请求体发送到POST https://api.comfy.org/v2/models/byteplus/seedance-1-0-pro-250528/requests。运行一经受理,Router 就会立即返回201和request_id;结果就绪后,可以从本进程或其他进程收集。队列投递 详细介绍了状态查询、取消和结果收集。 ``python Python theme={null} import asyncio from comfy_sdk import AsyncComfy # 从环境变量中读取 COMFY_API_KEY。 # 每次 submit() 调用都会生成自己的 Idempotency-Key,并在自动重试时复用它。 async def main(): async with AsyncComfy() as client: handle = await client.models.submit( "byteplus/seedance-1-0-pro-250528", { "content": [ { "text": "A red fox trotting through a snowy pine forest", "type": "text", }, ], "duration": 5, "ratio": "16:9", "resolution": "720p", }, ) print("request_id:", handle.request_id) # 加上模型 ID,另一个进程需要的信息就齐全了 # 轮询直到请求完成,每次等待服务器指定的 Retry-After。 async for update in handle.iter_events(): print(update.status, update.queue_position) # 提供商自己的载荷,与 models.run() 返回的值相同。 # 失败或已取消的请求会在这里抛出带类型的 Router 错误。 result = await handle.get() print(result) asyncio.run(main())``typescript TypeScript theme={null} import { comfy } from "@comfyorg/sdk"; // 从环境变量中读取 COMFY_API_KEY。 // 每次 submit() 调用都会生成自己的 Idempotency-Key,并在自动重试时复用它。 const handle = await comfy.models.submit("byteplus/seedance-1-0-pro-250528", { content: [ { text: "A red fox trotting through a snowy pine forest", type: "text", }, ], duration: 5, ratio: "16:9", resolution: "720p", }); console.log("requestId:", handle.requestId); // 加上模型 ID,另一个进程需要的信息就齐全了 // 轮询直到请求完成,每次等待服务器指定的 Retry-After。 for await (const update of handle.events()) { console.log(update.status, update.queuePosition); } // 与 models.run() 返回的结果相同。失败或已取消的请求会在这里被拒绝。 const result = await handle.get(); console.log(result.data);``bash cURL theme={null} # 1. 提交。Router 会返回 201,以及 request_id、status_url、response_url 和 cancel_url。 curl https://api.comfy.org/v2/models/byteplus/seedance-1-0-pro-250528/requests \ -H "X-API-Key: $COMFY_API_KEY" \ -H "Idempotency-Key: $(uuidgen)" \ -H "Content-Type: application/json" \ -d "{\"content\": [{\"text\":\"A red fox trotting through a snowy pine forest\",\"type\":\"text\"}], \"duration\": 5, \"ratio\": \"16:9\", \"resolution\": \"720p\"}" # 2. 轮询直到状态为 COMPLETED,每次响应都会指定需要等待的 Retry-After 秒数。 REQUEST_ID="<request_id from the 201 body>" curl -i https://api.comfy.org/v2/models/byteplus/seedance-1-0-pro-250528/requests/$REQUEST_ID/status \ -H "X-API-Key: $COMFY_API_KEY" # 3. 收集。返回 200 和模型的原生输出;若仍在运行,则返回 202 和状态响应体。 curl https://api.comfy.org/v2/models/byteplus/seedance-1-0-pro-250528/requests/$REQUEST_ID \ -H "X-API-Key: $COMFY_API_KEY"``
Schema
输入
callback\_url string (uri)
已忽略。为兼容 BytePlus 的请求结构而接受该字段,但在任务提交前会将其移除,因此永远不会发送回调;请改为轮询任务状态路由获取结果。
格式:uri
content object[] required
模型用于生成视频的输入内容
content\[].audio\_url object
输入音频对象。仅 Seedance 2.5、2.0、2.0 fast 和 2.0 mini 支持音频输入。Seedance 2.0、2.0 fast 和 2.0 mini 不能仅使用音频,必须至少包含 1 张图像或 1 段视频;Seedance 2.5 支持纯音频输入。
content\[].audio\_url.url string required
音频 URL、Base64 编码或资产 ID。 音频 URL:音频的公开 URL(wav、mp3)。 Base64:格式为 data:audio/\<format>;base64,\<content> 资产 ID:格式为 asset://\<ASSET\_ID>
content\[].draft\_task object
仅 Seedance 2.5 支持。要渲染为最终视频的 Draft 任务。它必须是唯一的内容项。 最终视频会复用 Draft 任务的提示词、输入资产、时长、比例、种子、generate\_audio 和 omni\_reference\_task\_type;请勿再次发送这些参数。resolution 默认为且仅支持 1080p。
content\[].draft\_task.id string required
使用 draft 设为 true 创建 Draft 视频时返回的任务 ID。
content\[].image\_url object
content\[].image\_url.url string required
用于图生视频生成的图像内容(当 type 为 "image\_url" 时) 图片 URL:请确保图片 URL 可访问。 Base64 编码内容:格式必须为 data:image/\<format>;base64,\<content> 资产 ID:格式为 asset://\<ASSET\_ID>
content\[].role string
内容项的角色/位置。 对于图像:first\_frame、last\_frame 或 reference\_image。 对于视频:reference\_video(仅 Seedance 2.5、2.0、2.0 fast 和 2.0 mini 支持)。 对于音频:reference\_audio(仅 Seedance 2.5、2.0、2.0 fast 和 2.0 mini 支持)。
可能的值:first_frame、last_frame、reference_image、reference_video、reference_audio
content\[].text string
模型的输入文本信息。包含文本提示词和可选参数。
文本提示词(必填):使用中英文字符描述要生成的视频。
参数(可选):在文本提示词后添加 --\[parameters] 以控制视频规格:
- \--resolution(--rs):480p、720p、1080p(默认:720p)
- \--ratio(--rt):21:9、16:9、4:3、1:1、3:4、9:16、9:21、adaptive(默认:16:9 或 adaptive)
- \--duration(--dur):3 至 12 秒(默认:5)
- \--framepersecond(--fps):24(默认:24)
- \--watermark(--wm):true/false(默认:false)
- \--seed(--seed):-1 至 2^32-1(默认:-1)
- \--camerafixed(--cf):true/false(默认:false)
示例:"A beautiful landscape --ratio 16:9 --resolution 720p --duration 5"
这是 Comfy 侧的防护限制,而非 BytePlus 的约束。BytePlus 未公布 文本长度上限,并在测试中接受了 40,000 个字符(2026-09-17)。 它按字符而非字节计数,因此多字节提示词在传输途中的大小可能达到 该限制的数倍。它只约束这一个字段,而非整个请求: content 是数组,而单请求的正文大小限制才约束整个文档。 Comfy Router(/v2/models/byteplus/\{model})是执行该限制的接口; 在直接调用 v1 /proxy 时,则由 BytePlus 自己的校验器作出响应。 该值设置得远高于真实流量,因此它永远不会裁定真实提示词,如果调用方 需要更多,可以提高该限制。
content\[].type string required
输入内容的类型
可能的值:text、image_url、video_url、audio_url、draft_task
content\[].video\_url object
输入视频对象。仅 Seedance 2.5、2.0、2.0 fast 和 2.0 mini 支持视频输入。
content\[].video\_url.url string required
视频 URL 或资产 ID。 视频 URL:视频的公开 URL(mp4、mov)。 资产 ID:格式为 asset://\<ASSET\_ID>
draft boolean (default: false)
仅 Seedance 2.5 支持。生成 480p 的 Draft 视频;分辨率必须为 480p。 将返回的任务 ID 传入 draft_task 内容项以渲染最终的 1080p 视频。Draft 任务 ID 的有效期为 7 天。
duration integer
视频时长,单位为秒。Seedance 1.0 pro 和 1.0 pro fast:\[2,12]。
可能的值:2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
execution\_expires\_after integer
任务超时阈值,单位为秒。默认 172800(48 小时)。范围:\[3600, 259200]。
范围:3600 至 259200
generate\_audio boolean (default: true)
Seedance 2.5、2.0、2.0 fast、2.0 mini 和 1.5 pro 支持。生成的视频是否包含与画面同步的音频。 是:模型输出带同步音频的视频。 否:模型输出无声视频。在支持该功能的模型上,生成的音轨会由提供商与视频分开进行内容审核;若音频未通过审核,会被报告为 content_policy_violation,而且由于每次运行的音频都不同,对于提供商在其他方面可以接受的输入,这种拒绝可能是间歇性的。如果出现这种情况,请传入 false 以获取无声视频;仅当音频是被拒绝的模态时这才会起作用,同步的 Router 响应会将其标记为 refusal_subject: output_audio(排队中的请求尚无法识别出这一点)。Seedance 2.5 的最终渲染会从其 Draft 任务继承 generate_audio,因此请改用 false 重新创建 Draft。
model string
要调用的模型 ID。支持的模型:seedance-1-5-pro-251215、seedance-1-0-pro-250528、seedance-1-0-pro-fast-251015、dreamina-seedance-2-0-260128、dreamina-seedance-2-0-fast-260128、dreamina-seedance-2-0-mini 和 dreamina-seedance-2-5-260628。直接对 POST /proxy/byteplus/api/v3/contents/generations/tasks 发起 v1 调用时 MUST 提供该字段,代理会以 400 拒绝任何其他取值以及缺省该字段的请求。它 NOT 在本 Schema 的 required 列表中,因为 Comfy Router 会从 /v2/models/byteplus/\{model} 的 {model} 路径段填充它,因此 Router 调用方会省略该字段。
output\_format string (default: "mp4")
仅适用于 Seedance 2.5。输出视频的容器格式。 mp4: 通用容器(H.264/AAC,yuv420p),兼容性广,文件大小更小。 mov: 专业容器(H.264 High 4:4:4 Predictive/PCM,yuv444p),颜色精度高,适合后期制作;文件大小更大。
可选值:mp4、mov
ratio string
已生成视频的宽高比。Seedance 2.0、2.0 fast 与 2.0 mini、1.5 pro 默认:adaptive。 Seedance 2.5 首帧 / 首尾帧生成:输出会跟随首帧的宽高比,因此只接受 adaptive(或省略该字段);具体比例会在派发前以 400 拒绝。在这些模式下,Seedance 2.0 接受具体比例。
可选值:16:9、4:3、1:1、3:4、9:16、21:9、9:21、adaptive
resolution string
视频分辨率。Seedance 2.5、2.0、2.0 fast 与 2.0 mini、1.5 pro、1.0 lite 默认:720p。Seedance 1.0 pro 与 pro-fast 默认:1080p。 注意:Seedance 2.0、2.0 fast 与 2.0 mini 不支持 1080p。Seedance 2.5 支持 480p、720p 和 1080p。
可选值:480p、720p、1080p、4k
return\_last\_frame boolean (default: false)
是否返回已生成视频的最后一帧图像。 true: 返回已生成视频的最后一帧图像。将该参数设为 true 后,你可以通过调用“查询视频生成任务信息”获取最后一帧图像。最后一帧图像为 PNG 格式,其像素宽度和高度与已生成视频一致,并且不包含水印。使用该参数可以生成多个连续视频:将前一个已生成视频的最后一帧作为下一个视频任务的首帧,从而快速生成多个连续视频。 false: 不返回已生成视频的最后一帧图像。
seed integer
用于控制随机性的种子整数。范围:\[-1, 2^32-1]。-1 表示使用随机种子。
范围:-1 到 4294967295
service\_tier string
处理所用的服务层级。Seedance 2.5、2.0 与 2.0 fast 不支持 flex(离线推理)。
可选值:default、flex
watermark boolean (default: false)
已生成的视频是否包含水印。
生成自 Router 在 GET /v2/models/byteplus/seedance-1-0-pro-250528/openapi.json 提供的 Schema,与它在请求到达提供商之前用于校验调用的文档相同。
输出
content object
视频生成任务完成后的输出,其中包含输出视频的下载 URL,以及在 BytePlus 返回的情况下,其最后一帧的下载 URL。video_url 和 last_frame_url 均被重新托管到 Comfy 存储上;此处的其他所有字段均为 BytePlus 自有字段。可为空:BytePlus 在任务完成 24 小时后清除这些 URL,因此此后轮询一个已成功的文档时,content 可能缺失或为 null。
content.last\_frame\_url string
生成视频最后一帧的下载 URL,当请求设置了 return_last_frame 时返回。不要根据此 URL 推断图像格式:BytePlus 在请求侧将最后一帧记录为 PNG,Router 会重新托管它收到的任何字节,并根据上游的 Content-Type 或内容嗅探来确定类型,而 image/jpeg 只是两者都失败时的最终回退。Router 将最后一帧重新托管到 Comfy 存储并重写此字段,因此它通常是一个 Comfy 签名的 URL,有效期最长 24 小时。该 URL 在签发时按 24 小时签名,并从 23 小时的备忘中重放,因此之后的轮询返回的 URL 可能仅剩一小时有效期。当无法执行重新托管时,该字段会保留 BytePlus 自己的 URL,而 BytePlus 会在任务完成 24 小时后清除该 URL。无论哪种情况,链接都会过期,因此请下载该帧,而不要存储 URL。
content.output\_format string
生成视频的容器格式(mp4 或 mov),当 BytePlus 将其嵌套在 content 中时提供。Seedance 模型更常将其作为 content 的顶层同级字段返回,参见顶层的 output_format 字段。Router 会读取两者中存在的那个。
content.upstream\_expires\_at string (date-time)
RFC 3339 时间,表示上游 URL 失效的时间:取 URL 自身携带的最早签名时间加有效期,当 updated_at 存在时,不晚于任务的 updated_at 加 24 小时(BytePlus 文档中记载的 URL 生命周期);否则取任务的 updated_at 加 24 小时。仅当存在 upstream_video_url 或 upstream_last_frame_url 时提供,当两个来源都未给出时间时省略。与重新托管的 video_url / last_frame_url 的生命周期无关。
格式:date-time
content.upstream\_last\_frame\_url string
BytePlus 自己的最后一帧下载 URL,与重新托管的 last_frame_url 并列按原样返回,其条款与 upstream_video_url 相同:仅限已选择加入的工作区,仅限 Seedance 2.x,在 BytePlus 清除后缺失,并且在 upstream_expires_at 之前属于持有者凭证。
content.upstream\_video\_url string
BytePlus 自己的输出视频下载 URL,与重新托管的 video_url 并列按原样返回。仅当任务由 Comfy 在服务器端已选择加入的工作区轮询 Seedance 2.x 任务时才提供(没有请求参数);对其他所有情况均缺失,包括解析不到任何工作区的凭证(例如未绑定到工作区的传统 API 密钥),并且在 BytePlus 于生成 24 小时后清除其 URL 后缺失。它是预签名的对象存储 URL,因此属于持有者凭证:任何持有它的人都可以在过期前下载视频,因此请将其视为机密。它在 upstream_expires_at 过期;在 Seedance 2.5 上,BytePlus 将其限制为 100 次下载,其中一次会被 Router 自身的重新托管消耗。
content.video\_url string
输出视频的下载 URL。Router 将视频重新托管到 Comfy 存储并重写此字段,因此它通常是一个 Comfy 签名的 URL,有效期最长 24 小时。该 URL 在签发时按 24 小时签名,并从 23 小时的备忘中重放,因此之后的轮询返回的 URL 可能仅剩一小时有效期。当无法执行重新托管时,该字段会保留 BytePlus 自己的 URL,而 BytePlus 会在任务完成 24 小时后清除该 URL,并在某些模型上将其限制为 100 次下载。无论哪种情况,链接都会过期,因此请下载视频,而不要存储 URL。
created\_at integer
任务创建的时间。该值为 UNIX 时间戳,单位为秒。
duration number
生成视频的时长,单位为秒。声明为数字而非整数,是因为 BytePlus 在此并不一致:已观察到视频任务返回整秒,而 BytePlus 的其他同类接口会报告带小数的时长,因此客户端不能假定该值为整数。这是 BytePlus 自有字段,在已完成的视频任务上返回并原样转发。
error object
错误信息。如果任务成功,则返回 null。如果任务失败,则返回错误信息。
error.code string
上游 ModelArk 错误码。SensitiveContentDetected、InputTextSensitiveContentDetected、InputImageSensitiveContentDetected、InputVideoSensitiveContentDetected、InputAudioSensitiveContentDetected、OutputTextSensitiveContentDetected、OutputImageSensitiveContentDetected、OutputVideoSensitiveContentDetected 和 OutputAudioSensitiveContentDetected 表示内容策略拒绝。一个系列可能带有以点分隔的原因,例如 InputImageSensitiveContentDetected.PrivacyInformation、OutputVideoSensitiveContentDetected.PolicyViolation 或 OutputImageSensitiveContentDetected.DeepFake。这是一个开放字符串,而不是枚举:其他错误码描述验证和提供商故障。Router 会在 HTTP 400 错误信封和 HTTP 200 失败任务响应中识别策略系列,但不会覆盖传输故障。
error.message string
报错信息
id string
视频生成任务的 ID
model string
该任务所使用的模型名称和版本
output\_format string
生成视频的容器格式(mp4 或 mov),在顶层作为 content 的同级字段返回,Seedance 视频任务查询正是在此处返回该字段。这是 BytePlus 的自有字段,原样转发。
resolution string
生成视频的分辨率,例如 1080p。这是 BytePlus 的自有字段,在成功的视频任务中返回,并原样转发。
seed integer
该任务实际使用的生成种子。这是 BytePlus 的自有字段,在成功的视频任务中返回,并原样转发。
格式:int64
status string
任务的状态
可能的值:queued、running、cancelled、succeeded、failed、expired
updated\_at integer
任务最后更新的时间。该值为 UNIX 时间戳,单位为秒。
usage object
本次请求的 token 用量
usage.completion\_tokens integer
模型生成的 token 数量
usage.total\_tokens integer
对于视频生成模型,不计算输入 token 数量,默认值为 0。因此 total\_tokens = completion\_tokens。
示例
输入
{
"content": [
{
"text": "A red fox trotting through a snowy pine forest",
"type": "text"
}
],
"duration": 5,
"ratio": "16:9",
"resolution": "720p"
}
输出
{
"content": {
"last_frame_url": "https://example.invalid/byteplus/seedance-1-0-pro-250528/last-frame",
"video_url": "https://example.invalid/byteplus/seedance-1-0-pro-250528/generated.mp4"
},
"created_at": 1767225600,
"duration": 5,
"error": null,
"id": "3f7a1b28-5c0d-4e91-8a6f-1b2c3d4e5f60",
"model": "seedance-1-0-pro-250528",
"output_format": "mp4",
"resolution": "1080p",
"seed": 1234567890123,
"status": "succeeded",
"updated_at": 1767225730
}
发布前须知
SDK 会生成 Idempotency-Key 并在自动重试中复用它。手动重试时,请复用原始 key。Router 最长可保持连接 10 分钟。
请求失败时,Router 会发送 X-Comfy-Error-Type 响应头说明原因。422 表示 Router 在调用提供商之前就拒绝了输入,413 表示请求体超出了 Router 可接受的大小。已生成的资源请及时下载,因为结果 URL 会过期。
上文任何字段描述中提到的尺寸限制,都是提供商对该字段自身的限定,引自提供商的规范。Router 会对整个请求体另行设置上限,base64 编码的媒体内容也计入其中:参见请求体大小。
本页记录的是通过 Comfy Router 调用的某一个合作伙伴模型。同一个 comfy-sdk / @comfyorg/sdk 包还提供第二个客户端,用于在 Comfy Cloud 上运行完整的 ComfyUI 工作流图:Comfy(api_key=...) / new Comfy({ apiKey }),并带有 client.workflows、client.assets 和 client.jobs。请参阅 Comfy SDKs。
[card] 请求头 身份验证、幂等性、请求 ID、错误分类、重试节奏、消费限额。
[card] 使用 Router API 模型发现、验证错误、重试与计费。
[card] 限制 Router 目前不支持的功能,以及替代方案。