帮你快速理解、总结文档立即下载

图片生成模型

最近更新时间:2026-10-29 18:04:58
我的收藏

概述

CMR Image API 根据文本提示词和可选的参考图、蒙版生成图片,适用于海报与素材制作、图片编辑等场景。你只需使用统一的接口和 CMR API Key,即可调用不同厂商的图片生成模型。提交后在实例配置的等待窗口内等待:窗口内到达终态则响应直接带结果,否则返回任务 ID,再通过查询接口轮询。文生图与编辑使用同一个创建接口。相关操作使用以下接口:
POST /v1/images/generations — 创建图片生成任务
GET /v1/images/generations/{task_id} — 查询单个任务
GET /v1/images/generations — 查询任务列表

前提条件

1. 建议提前阅读 使用约束 与 支持的模型提供商 了解相关信息。
2. 已创建模型路由实例,详细操作指导请参见 创建模型路由实例。
3. 已创建 BYOK 实例,详细操作指导请参见 创建 BYOK 实例。
4. 已创建模型路由访问密钥(API Key),详细操作指导请参见 创建模型路由访问密钥。
5. 已完成图片生成模型关联和模型路由策略配置,详细操作指导请参见 配置模型调度管理。

接口地址与鉴权

请求地址

POST {CMR_BASE_URL}/v1/images/generations
GET {CMR_BASE_URL}/v1/images/generations/{task_id}
GET {CMR_BASE_URL}/v1/images/generations
CMR_BASE_URL 为控制台展示的实例访问地址。请求使用 CMR 模型名称和 CMR API Key,无需填写厂商的接口地址或 API Key。

请求头

Header
必填
说明
Authorization
是
Bearer <CMR_API_KEY>
Content-Type
是
提交时固定为 application/json
X-User-Id
否
终端用户标识,交给支持滥用追踪的模型。不能写在请求体里
Idempotency-Key
否
交给支持幂等键的模型。CMR 不据此去重,再次提交会得到新任务

快速开始

将示例中的访问地址、API Key 和模型名称替换为自己的配置。

cURL

# ① 创建任务(窗口内完成时响应已含 result)
curl --request POST "${CMR_BASE_URL}/v1/images/generations" \\
--header "Authorization: Bearer ${CMR_API_KEY}" \\
--header "Content-Type: application/json" \\
--data '{
"model": "cmr-image",
"contents": [
{ "type": "text", "text": "一只戴墨镜的柴犬坐在冲浪板上,写实风格" }
],
"size": "1536x1024"
}'
# → {"id":"imgtask_01JQ8ZC3M9X7YB2KDVF6AHRW5B","status":"in_progress","error":null}

# ② 轮询任务状态,直到 status 为 completed、failed 或 expired
curl --request GET "${CMR_BASE_URL}/v1/images/generations/imgtask_01JQ8ZC3M9X7YB2KDVF6AHRW5B" \\
--header "Authorization: Bearer ${CMR_API_KEY}"

# ③ status=completed 后,从 result.data[0].url 或 result.data[0].b64_json 取图

Python

import os
import time
import requests

base_url = os.environ["CMR_BASE_URL"]
headers = {
"Authorization": f"Bearer {os.environ['CMR_API_KEY']}",
"Content-Type": "application/json",
}

# ① 创建任务
resp = requests.post(
f"{base_url}/v1/images/generations",
headers=headers,
json={
"model": "cmr-image",
"contents": [
{"type": "text", "text": "一只戴墨镜的柴犬坐在冲浪板上,写实风格"}
],
"size": "1536x1024",
},
timeout=120,
)
resp.raise_for_status()
task = resp.json()

# ② 未终态时轮询(建议间隔 2 秒以上)
while task["status"] in ("queued", "in_progress"):
time.sleep(2)
task = requests.get(
f"{base_url}/v1/images/generations/{task['id']}",
headers=headers,
timeout=30,
).json()

# ③ 获取结果
if task["status"] == "completed":
image = task["result"]["data"][0]
print(image.get("url") or image.get("b64_json"))
else:
print(task["error"])

创建任务

POST /v1/images/generations

请求参数

参数
类型
必填
说明
model
string
是
CMR 模型名称,可用值以控制台为准
contents
array
否
提示词与图片,见 素材结构。至少包含一个 type=text。与 prompt 二选一
prompt
string
否
单段提示词,由 CMR 转成一条文本内容。与 contents 同时出现返回 400
n
integer
否
独立生成张数,≥1。不填按 1 张提交。不是组图张数上限,模型自己的上限由模型判断
size
string
否
精确像素:auto 或 宽 x 高(如 1536x1024)。与 resolution 互斥
aspect_ratio
string
否
宽高比:auto 或 宽:高(如 3:2)。与精确像素同时填写时,比例必须一致(21:9 与 7:3 视为一致)
resolution
string
否
档位:512、1K、1.5K、2K、3K、4K、1080p,大小写不敏感。2K 不等于 2048×2048
quality
string
否
auto、low、medium、high、xhigh、max
background
string
否
auto、opaque、transparent。transparent 与 jpeg 同时填写返回 400
output_format
string
否
png、jpeg、webp。jpg 按 jpeg 处理
output_compression
integer
否
0~100,用于 JPEG、WebP
response_format
string
否
希望的交付形式:url 或 b64_json。模型能否照此返回以模型为准
seed
integer
否
随机种子,≥0。填写 0 会原样提交
negative_prompt
string
否
不希望出现的内容(按模型支持)
watermark
boolean
否
是否添加水印(按模型支持)
moderation
string
否
auto 或 low
input_fidelity
string
否
参考图保真度:high 或 low。必须同时有参考图
user
string
否
终端用户标识,用于审计。与请求头 X-User-Id 相互独立
continuation
string | object | array
否
上一张结果的 result.continuation,原样回传。非空,序列化后 ≤10MB
参数取值与模型能力:选填参数是否生效取决于所选模型。除 n 不填按 1 张、图片 role 不填按参考图外,未填写的选填参数 CMR 不自动补默认值。标准字段不能传 null。
size 写成档位或比例时会改记:size: "2K" 视为 resolution,size: "16:9" 视为 aspect_ratio。改记后与已填写字段冲突同样返回 400。
stream 只能省略或为 false。image、images、mask、async、wait、operation、provider_extra、safety_user_id、idempotency_key、n_explicit 出现在顶层返回 400。extra_body、extra_headers、extra_query、timeout 会被去掉,厂商参数写在顶层。

素材结构

contents 按数组顺序保留。没有图片为文生图,有图片为编辑或参考生图,没有单独的操作类型字段。不提供 /v1/images/edits。
类型
格式
说明
文本
{"type":"text","text":"..."}
提示词。一个任务至少一个;多条按顺序用换行拼接
图片
{"type":"image","role":"reference" | "mask","url":"...","id":"..."}
role 缺省 reference。url 为 HTTPS URL 或 data:image/<类型>;base64,...,不接受 HTTP 和裸 base64。id 可选,同一次请求内唯一
蒙版
role 为 mask 的图片
至多一张,且必须同时有一张 reference。模型不支持时忽略

请求示例

文生图:
{
"model": "cmr-image",
"contents": [
{ "type": "text", "text": "一只戴墨镜的柴犬坐在冲浪板上,写实风格" }
],
"size": "1536x1024"
}
参考图编辑:
{
"model": "cmr-image",
"contents": [
{ "type": "text", "text": "把沙发换成深绿色天鹅绒,保持光照不变" },
{ "type": "image", "role": "reference", "url": "https://example.com/room.jpg", "id": "room" }
],
"size": "1536x1024"
}

响应参数

响应体与「查询任务」的任务对象相同。
参数
类型
是否一定返回
说明
id
string
是
任务 ID,形如 imgtask_ 加 26 位字符
object
string
是
固定为 image
status
string
是
model
string
是
请求中的 CMR 模型名称
created_at
integer
是
创建时间,Unix 时间戳,单位为秒
completed_at
integer | null
是
到达终态的时间;未终态为 null
expires_at
integer
是
任务保留截止时间,创建后 24 小时。此后查询返回 404。不是图片 URL 的过期时间
error
object | null
是
失败或超时原因;成功和进行中为 null。字段见「错误响应」
result
object | null
否
仅终态返回。completed 为结果,failed、expired 为 null。进行中不返回该字段。字段见「查询任务」
情形
HTTP
响应
窗口内生成成功
200
status=completed,带 result
窗口内生成失败或结果无法保存
200
status=failed 或 expired,result 为 null,原因在 error
仍在生成,或等待窗口为 0
202
status=in_progress,无 result
参数不合法,或窗口内模型调用被拒绝
4xx / 5xx
错误对象,无任务 ID。任务若已创建,记为 failed(调用超时为 expired),可用列表找到

响应示例

{
"id": "imgtask_01JQ8ZC3M9X7YB2KDVF6AHRW5B",
"object": "image",
"status": "in_progress",
"model": "cmr-image",
"created_at": 1789000000,
"completed_at": null,
"expires_at": 1789086400,
"error": null
}
等待窗口由实例 ImageConfig.WaitSeconds 配置,取值 0~300 秒,缺省 15 秒,请求不能修改。为 0 时立即返回 202。返回 id 只表示任务已受理;是否已有图片看 status。

Provider 自定义参数

CMR 实例默认开启参数转换,并默认透传厂商自定义参数。按厂商要求将参数放入请求即可,无需逐个配置放行;如果实例已配置参数过滤规则,则按该规则处理。
例如,所选模型用单独字段控制组图时,可以这样请求:
{
"model": "cmr-image",
"contents": [
{ "type": "text", "text": "同一只柴犬的四个角度" }
],
"sequential_image_generation": "auto",
"sequential_image_generation_options": { "max_images": 4 }
}
n 仍是独立张数,CMR 不会把它改写成厂商的组图字段。如需设置默认值、修改参数值或过滤字段,可在目标 CMR 实例的参数转换配置中设置规则。通过管理 API 配置时,使用 CreateParamTranslationConfig 保存、TestParamTranslationConfig 预览;生图规则的端点填写 images_create(查询为 images_retrieve,列表为 images_list)。自定义参数的名称、填写层级和取值以厂商说明为准。更换模型或厂商后,请确认这些参数仍然适用。

查询任务

GET /v1/images/generations/{task_id}
路径参数 task_id 为创建时返回的 id。不使用请求体。任务存在时 HTTP 始终为 200。进行中的异步任务会向模型核对状态。距上次保存不足 2 秒的查询直接返回已保存状态。每次查询计入每分钟请求次数,被限流时返回 429。另一把 Key 的任务、不存在的任务、超过 24 小时的任务都返回 404。

响应参数

基本字段:
参数
类型
是否一定返回
说明
id
string
是
任务 ID
object
string
是
固定为 image
status
string
是
任务状态,参考 任务状态
created_at
integer
是
任务创建时间,Unix 时间戳,单位为秒
completed_at
integer | null
是
到达终态的时间;未终态为 null
expires_at
integer
是
任务保留截止时间,创建后 24 小时
model
string
是
创建请求中的模型名称
error
object | null
是
失败原因;成功和进行中为 null
result
object | null
否
仅终态返回。completed 时为结果,failed、expired 时为 null
任务失败:查询接口本身失败(如任务不存在、无权限)返回统一错误格式;任务生成失败是任务属性而非请求失败——查询仍返回 HTTP 200,失败原因在 error 字段中。
result(仅 status=completed):
参数
类型
是否一定返回
说明
result.created
integer
是
结果时间,Unix 时间戳,单位为秒
result.data
array
是
成功得到的图片
result.errors
array
是
部分图片失败时的错误,字段同 error,可带 index。全部成功时为 []。任务仍可以是 completed
result.background
string
否
模型实际使用的背景
result.quality
string
否
模型实际使用的质量
result.size
string
否
模型实际使用的尺寸。各张不一致时可能不返回
result.output_format
string
否
模型实际使用的编码
result.provider_details
object
否
模型返回的附加内容,结构以模型为准
result.continuation
string | object | array
否
多轮修改的回传内容。下一轮原样放入请求的 continuation
result.usage
object
否
用量。无法确定时不返回该字段
result.data[]:
参数
类型
是否一定返回
说明
result.data[].index
integer
是
这张图在本次结果中的下标,从 0 开始
result.data[].url
string | null
是
图片 URL。模型未返回时为 null
result.data[].b64_json
string | null
是
图片 base64。模型未返回时为 null。成功的图至少有 url 或 b64_json 之一
result.data[].expires_at
integer
否
模型给出的这张图的过期时间
result.data[].revised_prompt
string
否
模型改写后的提示词
result.data[].size
string
否
这张图的尺寸
result.data[].output_format
string
否
这张图的编码
result.data[].provider_details
object
否
这张图的附加字段,如水印图地址
用量 result.usage(模型未提供的项不返回,不补 0):
参数
类型
是否一定返回
说明
result.usage.input_tokens
integer
否
模型报告的输入 token
result.usage.output_tokens
integer
否
模型报告的输出 token
result.usage.total_tokens
integer
否
模型报告的总 token。CMR 不用输入与输出相加来填
result.usage.input_images
integer
否
参考图张数,不含蒙版
result.usage.generated_images
integer
否
实际交付张数(带 url 或 b64_json 的项)
result.usage.resolution
string
否
计费档:512、1k、1.5k、2k、2.5k、3k、3.5k、4k。按成图面积取最近一档,与请求的 resolution 不是同一取值表
result.usage.provider_details
object
否
模型用量中的附加字段

响应示例

{
"id": "imgtask_01JQ8ZC3M9X7YB2KDVF6AHRW4T",
"object": "image",
"status": "completed",
"created_at": 1789000000,
"completed_at": 1789000012,
"expires_at": 1789086400,
"model": "cmr-image",
"error": null,
"result": {
"created": 1789000012,
"data": [
{
"index": 0,
"url": "https://upstream.example.com/out.png",
"b64_json": null,
"size": "1536x1024",
"output_format": "png"
}
],
"errors": [],
"usage": {
"input_tokens": 18,
"output_tokens": 4160,
"total_tokens": 4178,
"input_images": 0,
"generated_images": 1,
"resolution": "1.5k"
}
}
}

查询任务列表

GET /v1/images/generations
只读已保存的记录,不向模型核对状态,也不返回图片。窗口内已经拿到结果的任务同样在列表中。仅返回当前 API Key 的任务。

请求参数

参数
类型
说明
status
string
按状态过滤:queued、in_progress、completed、failed、expired
model
string
按创建时的模型名称精确过滤
limit
integer
每页数量,1~100,默认 20
cursor
string
上一页返回的 next_cursor,原样回传。无法解析时返回 400
按创建时间从新到旧。不支持 offset。

响应参数

参数
类型
说明
object
string
固定为 list
data
array
任务列表。每项含 id、object、status、model、created_at、completed_at、expires_at、error,不含 result
has_more
boolean
是否还有更早的任务
next_cursor
string | null
下一页游标。没有下一页时为 null
has_more 为 true 时,下次请求带 cursor=<next_cursor>。需要图片时用 id 查询单任务。列表不计入每分钟请求次数。

任务状态

状态
说明
queued
状态枚举中的排队值,列表可按它过滤。当前受理后写入的状态是 in_progress
in_progress
生成中,此状态无 result
completed
生成成功,result 可用
failed
生成失败,原因见 error。含内容审核不通过、结果过大(result_too_large)、任务中断(interrupted)、模型返回无法识别(upstream_error、unknown_status)
expired
任务时限内未结束,默认 10 分钟。error.code 为 task_timeout。与 24 小时保留期不是同一件事
状态只会向前迁移;终态(completed / failed / expired)不再变化。建议轮询间隔 2 秒以上。创建满 24 小时后任务不可再查询。

结果地址说明

result.data[].url 为模型侧的临时下载地址,有效期因厂商而异,请在任务完成后尽快下载转存。
模型返回 b64_json 时,图片内容随任务保存至 expires_at(创建后 24 小时)。
任务的 expires_at 是记录保留截止,不是 URL 过期时间。模型若返回 result.data[].expires_at,以该字段为准。
URL 过期后访问会失败,CMR 不重新签发地址。

错误响应

请求失败时,CMR 返回统一的错误格式:
{
"error": {
"message": "size and resolution are mutually exclusive",
"type": "invalid_request_error",
"param": "size",
"code": "invalid_parameter"
}
}
参数
说明
error.message
错误说明;来自模型侧的错误保留原文
error.type
错误类型
error.param
相关请求参数;无法定位时为 null
error.code
错误码,以实际响应为准
这种响应没有任务 ID。参数错误、鉴权失败、在途任务超限和副本容量不足发生在创建任务之前,不会留下任务。窗口内模型调用本身失败时,任务记为 failed,调用超时记为 expired。
常见错误码
HTTP
type
code
场景与处理建议
400
invalid_request_error
invalid_parameter
字段缺失、类型不对、size 与 resolution 冲突、蒙版不合法、游标无法解析(invalid_cursor),按 error.param 修正。
400
invalid_request_error
unsupported_parameter
stream 不为 false,去掉该字段。
401
authentication_error
unauthorized
API Key 无效,检查 CMR_API_KEY。
403
permission_error
forbidden
Key 没有实例归属,或没有访问权限。
404
not_found_error
task_not_found
任务不存在、不属于当前 Key,或已超过 24 小时。编辑请改用创建接口并在 contents 中带图片;/v1/images/edits 返回 404。
429
rate_limit_error
rate_limit_exceeded
在途任务数达到 Key、用户组或实例的每分钟请求数配置,或查询达到每分钟次数。降低频率后重试。提交被拒绝时响应可能带 x-ratelimit-*-image_tasks。
502
api_error
upstream_error
模型返回内容无法识别,或模型报告失败。稍后重试;持续失败时用列表找到任务并联系支持。
503
api_error
server_overloaded
当前副本容量已满,本次没有创建任务。按 Retry-After 重试。
503
api_error
storage_unavailable
任务存储不可用,稍后重试。