Skip to content

自定义生图

接口说明

基于提示词和可选的姿势、背景、服装素材选项,生成自定义 AI 图片。

INFO

此接口与 /v1/chat/image完全独立的业务,不共享会话,无需 conversationId

WARNING

该接口为同步阻塞接口,图片生成期间连接保持。生成过程通常需要 30~120 秒,请设置足够长的超时时间(建议 ≥ 150 秒)。

基本信息

项目说明
接口路径POST /v1/image/generate
响应类型application/json
认证方式API Key + 请求签名(认证说明

请求体

json
{
  "agentId": "a36b6b38-e94d-ad19-c170-ad8de3a1a018",
  "text": "sitting on a bench in a park",
  "language": "en",
  "gender": "female",
  "pose": "sitting",
  "background": "park",
  "outfit": "casual dress",
  "refImageId": "550e8400-e29b-41d4-a716-446655440000",
  "metadata": {}
}
字段类型必填说明
agentIdstring智能体 ID
textstring图片描述,用于引导生图风格和场景
languagestring语言代码,如 enzhja
genderstring性别过滤:malefemale
posestring姿势选项 code,来自 /v1/config/options
backgroundstring背景选项 code,来自 /v1/config/options
outfitstring服装选项 code,来自 /v1/config/options
refImageIdstring参考图 ID,由上传参考图接口返回的 imageId
metadataobject扩展字段,可传空对象 {}

TIP

posebackgroundoutfit 的可选值请通过 POST /v1/config/options 接口查询,传入 namespace: "custom_image"

响应格式

成功响应

json
{
  "code": 10200,
  "success": true,
  "message": "OK",
  "data": {
    "imageData": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..."
  },
  "traceId": "xEo3sQwB6KRuwFfG2BxNWwlLQhKrvg38",
  "timestamp": "1773298769366"
}
字段类型说明
data.imageDatastring生成的图片,格式为 data:image/png;base64,<数据>

错误响应

HTTP 状态码说明
401认证失败
400请求参数缺失或格式错误
404智能体不存在或未配置 comfy 工作流
500Dify 或 RunPod 内部服务错误

业务错误(HTTP 200):

message说明
Invalid API keyAPI Key 无效或已禁用
Too many requests, please try again later触发频率限制
API key usage limit reached达到总调用次数上限
Agent not found智能体不存在
Agent missing comfy prompt config智能体未配置 ComfyUI 工作流

客户端示例

javascript
async function generateCustomImage(apiKey, apiSecret, userId, params) {
  const { agentId, text, language = 'en', gender, pose, background, outfit, refImageId } = params

  const body = Object.fromEntries(
    Object.entries({ agentId, text, language, gender, pose, background, outfit, refImageId })
      .filter(([, v]) => v != null && String(v).trim() !== '')
  )

  const headers = await buildAuthHeaders(apiKey, apiSecret, userId, body)

  const controller = new AbortController()
  const timeoutId = setTimeout(() => controller.abort(), 150000) // 150s 超时

  try {
    const response = await fetch('/v1/image/generate', {
      method: 'POST',
      headers,
      body: JSON.stringify(body),
      signal: controller.signal,
    })

    const result = await response.json()
    if (!result.success) { console.error('生成失败:', result.message); return null }
    return result.data.imageData // "data:image/png;base64,..."
  } finally {
    clearTimeout(timeoutId)
  }
}

两步调用流程(含参考图)

javascript
// 第一步(可选):上传参考人脸图
const refImageId = await uploadRefImage(apiKey, apiSecret, userId, imageFile)

// 第二步:生成图片
const imageData = await generateCustomImage(apiKey, apiSecret, userId, {
  agentId: 'xxx',
  text: 'sitting on a bench in a park',
  language: 'en',
  refImageId,
})

素材选项查询

javascript
const response = await fetch('/v1/config/options', {
  method: 'POST',
  headers: await buildAuthHeaders(apiKey, apiSecret, userId, { namespace: 'custom_image', language: 'en' }),
  body: JSON.stringify({ namespace: 'custom_image', gender: 'female', language: 'en' }),
})

const { data } = await response.json()
// data 结构:{ "Pose": [{code, label, previewUrl}, ...], "Background": [...], "Outfit": [...] }
// 返回的 code 字段即为传入 pose/background/outfit 的值

Released under the MIT License.