内容生成异步接口(预览)
1. 接口介绍
该接口用于提交 AIGC 异步生成任务(覆盖文生图、图生图、图生视频、视频生视频),支持通过回调或查询结果接口获取任务执行状态和结果。
使用场景包括:
- 内容创作与素材库的自动化生产
- 营销活动海报与短视频的快速生成
1.1 接入指南
- 联系客户经理开通账号
- 同客户经理沟通详细需求与并发。根据您的需求,客户经理将为您开通对应的应用(SID)
- 访问控制台 - 数字证书 获取用于接口鉴权的 API Key
- 查阅下方的接口参数文档,了解如何构建请求以及如何解析响应数据
- 调用接口进行调试和测试
- 添加异常处理逻辑,以处理可能出现的错误和异常情况,增强代码的健壮性和稳定性
如果在接入过程中遇到任何技术问题,请联系客户经理以获取帮助。
当前接口处于预览状态,未来可能会有所调整,请以实际状态为准。
1.2 并发限制
图普采用 用户任务并发数 对内容生成接口进行并发控制,即任一时刻单个用户最多允许 N 个任务同时处理。用户任务并发数由三部分构成:
- 基础并发数:系统为用户固定保障的并发额度,不受系统忙时 / 闲时的资源波动影响,可稳定持续使用;
- 浮动并发数:基于系统实时资源情况动态调配的弹性并发额度,其可用性依赖于系统剩余资源量,在系统资源紧张时(忙时),该部分额度可能无法保障;
- 增购并发数:用户根据实际需求增购的额外并发额度,不受忙时 / 闲时限制。
当前测试用户任务并发数为 2;正式用户的内容生成任务并发数为 10(基础并发数)+ 5(浮动并发数),即任一时刻单个用户最多允许 10~15 个任务同时处理。若需调整并发数,请联系客户经理办理增购或配置调整。
2. 请求
2.1 请求地址
- v4(v3.1)
| 区域 | 请求地址 |
|---|---|
| 国内 | http://stage.api.open.tuputech.com/<version>/generation/async/<secretId> |
<secretId> 需替换为您的应用 SID,请联系客户经理为您开通及配置。关于 SID
详见 常见问题(FAQ)。
2.2 请求方法
POST
2.3 请求头
| 请求头名称 | 取值 | 是否必需 | 示例 | 说明 |
|---|---|---|---|---|
Content-Type | application/json | 是 | Content-Type: application/json | 请求数据类型为 JSON |
X-API-Key | <API Key> | 是 | X-API-Key: <API Key> | API Key 用于接口鉴权。请访问控制台 - 数字证书 获取 API Key |
2.4 超时时间及异常处理
建议配置超时时间 1 秒,在 HTTP 响应状态码非 200 或业务状态码不为 0 时进行重试。
由于模型基于请求流量动态伸缩,在空闲一定时间后会关闭(部分专用模型空闲一定时间后会关闭全部实例)。
由于模型冷启动耗时较长,部分请求可能无法处理,最终返回非 200 HTTP 状态码或业务状态码 101。该现象可能在以下情况下出现:
- 初次请求
- 长时间未调用后再次请求
- 请求流量突增
- 请求存在规律性的流量波动(例如每隔超过 5 分钟请求一批数据,或仅在工作日期间有大量请求)
针对以上情况,我们分别建议您:
- 间隔 2~3 分钟后重试
- 间隔 2~3 分钟后重试,并且后续保持至少每分钟 1 次调用
- 提前进行预热,或及时联系我们扩容
- 调整业务请求时间间隔到 5 分钟内,或联系我们调整实例保持策略。若您的业务仅在工作日期间有大量请求,节假日期间较少,请务必联系我们
2.5 请求参数说明 🔥
- v4(v3.1)
| 参数名称 | 类型 | 是否必需 | 说明 |
|---|---|---|---|
type | String | 是 | 任务类型,可选值: 文生图: text_to_image图生图: image_to_image图生视频: image_to_video视频生视频: video_to_video |
model | String | 是 | 模型名称。取值说明图生视频: • 视频配音(唇形同步与表情姿态生成): infinitetalk |
version | String | 是 | 模型版本或模型 ID。取值说明(按模型) 图生视频: • infinitetalk:v1(最新版本) |
config | Config | 是 | 任务配置,详见 Config 参数说明 |
input | InputParams | 是 | 输入内容参数,详见 InputParams 参数说明 |
output | OutputParams | 是 | 输出内容参数,详见 OutputParams 参数说明 |
callback | String | 否 | 回调地址,若为空则跳过结果回调 |
customInfo | Object<String, Any> | 否 | 自定义信息,为任务添加业务信息(如房间 ID、文件 ID 等)或其他扩展参数 |
Config 参数说明
| 参数名称 | 类型 | 是否必需 | 说明 |
|---|---|---|---|
mode | String | 否 | 内容生成模式。取值说明(按模型) 图生视频: • infinitetalk:single(单人),multi(多人) |
steps | Number | 否 | 生成步数,取值范围:[1, 100],默认为 20。取值说明(按模型) 图生视频: • infinitetalk:无需赋值 |
seed | Number | 否 | 随机种子,取值范围:[0, 4294967295],默认为 0。取值说明(按模型) 图生视频: • infinitetalk:无需赋值 |
controlNet | Object<String, Any> | 否 | ControlNet 参数。取值说明(按模型) 图生视频: • infinitetalk:无需赋值 |
workflow | Object<String, Any> | 否 | ComfyUI 工作流参数,用于自定义生成流程。取值说明(按模型) 图生视频: • infinitetalk:无需赋值 |
watermark | WatermarkConfig | 否 | AIGC 水印标识配置,详见 WatermarkConfig 参数说明 |
WatermarkConfig 参数说明
按照国家相关法规及政策文件规定,AIGC 内容制作者需要在生成内容中添加水印标识,以标识内容的来源,详见 相关政策文件 。
| 参数名称 | 类型 | 是否必需 | 说明 |
|---|---|---|---|
enabled | Boolean | 否 | 是否添加 AIGC 水印标识 |
type | String | 否 | AIGC 水印标识类型,可选值: • 显式水印标识: explicit• 隐式水印标识: implicit• 显式与隐式水印标识: all |
text | String | 否 | AIGC 显式水印标识文本,默认为 Generated by AI |
position | String | 否 | AIGC 显式水印标识位置,默认为 bottom_right。可选值:• 左上角: top_left• 左下角: bottom_left• 右上角: top_right• 右下角: bottom_right |
contentProducer | String | 否 | AIGC 隐式水印标识内容制作者编码 |
produceId | String | 否 | AIGC 隐式水印标识内容制作者分配的唯一 ID |
contentPropagator | String | 否 | AIGC 隐式水印标识内容传播平台编码 |
propagateId | String | 否 | AIGC 隐式水印标识内容传播平台分配的唯一 ID |
InputParams 参数说明
| 参数名称 | 类型 | 是否必需 | 说明 |
|---|---|---|---|
prompt | String | 否 | 提示词 |
negativePrompt | String | 否 | 负提示词 |
fileType | String | 否 | 输入文件类型,可选值:url、base64,默认为 url |
images | Array<String> | 否 | 输入图片链接或 base64。取值说明(按模型) 图生视频: • infinitetalk:最多支持 1 张图片 |
videos | Array<String> | 否 | 输入视频链接或 base64。取值说明(按模型) 图生视频: • infinitetalk:无需赋值 |
audios | Array<String> | 否 | 输入音频链接或 base64。取值说明(按模型) 图生视频: • infinitetalk:最多支持 2 段音频,分别对应单人与多人场景 |
OutputParams 参数说明
| 参数名称 | 类型 | 是否必需 | 说明 |
|---|---|---|---|
aspectRatio | String | 否 | 生成图片/视频时,输出的图片/视频宽高比,可选值:16:9、9:16、4:3、3:4,默认为 16:9 |
resolution | String | 否 | 生成图片/视频时,输出的图片/视频分辨率,可选值:480p、720p,默认为 480p |
maxImages | Number | 否 | 生成图片时,输出的图片最大候选数,取值范围:[1, 10],默认为 4 |
quality | String | 否 | 生成图片时,输出的图片质量,可选值:standard(标准)、enhanced(增强),默认为 standard |
duration | Number | 否 | 生成视频时,输出的视频最大时长,单位秒(该参数与 maxFrames 互斥),取值范围:[1, 10],默认为 10 |
frameRate | Number | 否 | 生成视频时,输出的视频帧率,取值范围:[25, 30],默认为 25 |
maxFrames | Number | 否 | 生成视频时,输出的视频最大帧数,取值范围:[25, 250],默认根据时长与帧率计算 |
2.6 请求示例
- v4(v3.1)
- 文生图
- 图生图
- 图生视频
- 视频生视频
{
"type": "text_to_image",
"model": "<model>",
"version": "v1",
"config": {
"mode": "single"
},
"input": {
"prompt": "A beautiful sunset over the ocean, digital art",
"negativePrompt": "dark, blurry, low quality",
"fileType": "url"
},
"output": {
"maxImages": 4
},
"callback": "<callback>",
"customInfo": {
"<key>": "<value>"
}
}
{
"type": "image_to_image",
"model": "<model>",
"version": "v1",
"config": {
"mode": "single"
},
"input": {
"prompt": "Convert to Van Gogh style",
"negativePrompt": "photorealistic",
"fileType": "url",
"images": ["<url>"]
},
"output": {
"maxImages": 2
},
"callback": "<callback>",
"customInfo": {
"<key>": "<value>"
}
}
{
"type": "image_to_video",
"model": "<model>",
"version": "v1",
"config": {
"mode": "single"
},
"input": {
"prompt": "Bird flying over mountain (10s video)",
"negativePrompt": "static, blurry",
"fileType": "url",
"images": ["<url>"],
"audios": ["<url>"]
},
"output": {
"maxFrames": 25
},
"callback": "<callback>",
"customInfo": {
"<key>": "<value>"
}
}
{
"type": "video_to_video",
"model": "<model>",
"version": "v1",
"config": {
"mode": "multi"
},
"input": {
"prompt": "Change to anime style",
"negativePrompt": "3D, realistic",
"fileType": "url",
"videos": ["<url>"]
},
"output": {
"maxFrames": 25
},
"callback": "<callback>",
"customInfo": {
"<key>": "<value>"
}
}
3. 同步响应
3.1 响应参数说明 🔥🔥
- v4(v3.1)
v3.1 说明
由于历史原因,在 v3.1 版本接口中,同步响应与回调请求的核心内容会先经过转义处理,最终以 json 字段(字符串类型)返回。因此,在解析该接口的业务数据时,需对 json 字段的取值额外执行一次转义还原逻辑,才能获取到原始的业务数据。除此之外,v3.1 与 v4 版本接口出入参数完全一致,相比之下 v4 版本接口更为直观。详见下方字段说明。
| 参数名称 | 类型 | 说明 |
|---|---|---|
signature | String | 同步响应或回调请求签名,由图普使用私钥签名,在需要时,您可以通过 图普公钥
进行验签以确保此响应内容来自图普(与您调用接口时使用的公私钥不同)。验签步骤:
|
json | String | 同步响应或回调请求经过 JSON 转义后的字符串,需进一步解析得到业务数据。
|
| 参数名称 | 类型 | 说明 |
|---|---|---|
code | Int | 状态码,详见 业务状态码 |
message | String | 状态信息 |
result | Result | 任务提交结果,详见 Result 参数说明 |
nonce | Float | 随机数(建议使用 Unix 时间戳或若干位随机整数) |
timestamp | Int | 当前服务器的 Unix 时间戳 |
Result 参数说明
| 参数名称 | 类型 | 说明 |
|---|---|---|
requestId | String | 任务 ID,长度为 20~64 的字符串(可能随着服务迭代发生变化) |
callback | String | 生成结果回调接口地址 |
3.2 响应示例
- v4(v3.1)
{
"code": 0,
"message": "success",
"result": {
"requestId": "<requestId>",
"callback": "<callback>"
},
"nonce": 1685000000,
"timestamp": 1685000000
}
4. 回调请求
4.1 请求地址
callback 参数指定的地址。
4.2 请求方法
POST
4.3 请求头
Content-Type: application/json
4.4 超时时间及异常处理
回调超时时间 5 秒,在 HTTP 响应状态码非 200 时进行重试,最多重试 3 次。
建议客户在处理回调时进行异步处理,响应回调时可以返回字符串或 JSON,示例如下:
// JSON
{
"message": "ok"
}
// 字符串
success
4.5 请求参数说明 🔥🔥🔥
- v4(v3.1)
v3.1 说明
由于历史原因,在 v3.1 版本接口中,同步响应与回调请求的核心内容会先经过转义处理,最终以 json 字段(字符串类型)返回。因此,在解析该接口的业务数据时,需对 json 字段的取值额外执行一次转义还原逻辑,才能获取到原始的业务数据。除此之外,v3.1 与 v4 版本接口出入参数完全一致,相比之下 v4 版本接口更为直观。详见下方字段说明。
| 参数名称 | 类型 | 说明 |
|---|---|---|
signature | String | 同步响应或回调请求签名,由图普使用私钥签名,在需要时,您可以通过 图普公钥
进行验签以确保此响应内容来自图普(与您调用接口时使用的公私钥不同)。验签步骤:
|
json | String | 同步响应或回调请求经过 JSON 转义后的字符串,需进一步解析得到业务数据。
|
| 参数名称 | 类型 | 是否必有 | 说明 |
|---|---|---|---|
code | Int | 是 | 状态码,详见 业务状态码 |
message | String | 是 | 状态信息 |
requestId | String | 是 | 任务 ID |
images | Array<GenerationOutput> | 否 | 生成的图片列表,详见 GenerationOutput 参数说明 |
videos | Array<GenerationOutput> | 否 | 生成的视频列表,详见 GenerationOutput 参数说明 |
customInfo | Object<String, Any> | 否 | 透传的自定义信息,请求参数中的 customInfo |
GenerationOutput 参数说明
| 参数名称 | 类型 | 是否必有 | 说明 |
|---|---|---|---|
url | String | 是 | 生成图片/视频时,生成的图片或视频内容 URL(有效期为 7 天) |
duration | Number | 否 | 生成视频时,生成的视频内容时长(单位:秒) |
4.6 回调请求解析伪代码
下述为不同使用场景下,解析回调请求的伪代码示例。
4.6.1 生成图片时获取图片 URL
// 1. 解析回调请求
result = parseJSON(CallbackRequest)
// 2. 校验任务是否处理成功,否的话进入错误处理流程
if (result.code != 0) {
handleError(result)
return
}
// 3. 遍历图片列表,获取每个图片的 URL
for (image of result.images) {
processImage(image.url)
}
4.6.2 生成视频时获取视频 URL
// 1. 解析回调请求
result = parseJSON(CallbackRequest)
// 2. 校验任务是否处理成功,否的话进入错误处理流程
if (result.code != 0) {
handleError(result)
return
}
// 3. 遍历视频列表,获取每个视频的 URL
for (video of result.videos) {
processVideo(video.url)
}
4.7 请求示例
- v4(v3.1)
{
"code": 0,
"requestId": "<requestId>",
"riskType": 1,
"suggestion": 1,
"customInfo": {
"roomId": "<roomId>"
},
"images": [
{
"url": "<url>"
}
],
"videos": [
{
"url": "<url>"
}
],
"nonce": 1685000000,
"timestamp": 1685000000
}
5. 任务耗时
内容生成任务耗时较长,具体耗时根据模型和任务类型而异,下述是部分任务的典型耗时情况。
| 任务类型 | 模型 | 耗时 |
|---|---|---|
| 图生视频 | infinitetalk | 每生成一秒视频,耗时约一分钟 |
6. 更新日志
| 日期 | 说明 |
|---|---|
| 2025-12-10 | 调整 v4 与 v3.1 版本接口说明 |
| 2025-12-09 | 新增内容生成任务耗时说明 |
| 2025-11-25 | 新增内容生成接口,支持多种内容生成模型 |