Grok Imagine 2.0 Ext
Grok Imagine 2.0 Ext 图层与选区编辑
使用 segment 获取对象图层和精确遮罩,并通过 region_edit 按多边形、矩形或对象索引编辑指定区域。
POST
segment 和 region_edit 均使用现有异步图片入口。创建任务后保存 task_id,再轮询 获取任务状态;不要等待创建请求直接返回图层或图片。操作概览
完整链路:
source_task_id 和 image_id 不可互换。segment 使用来源任务 ID;region_edit 使用图片资产 ID。编辑后重新获取图层时,将本次 region_edit 的 task_id 作为新的 source_task_id。请求头
string
必填
使用 Bearer Token:
Bearer <APIMART_API_KEY>。string
必填
固定为
application/json。string
可选。付费的
region_edit 强烈建议使用。支持 1–191 个可见 ASCII 字符,推荐 UUID。每次新的逻辑操作使用一个新 Key。网络失败重试同一次请求时,必须复用原 Key 和完全相同的请求体。409 idempotency_in_progress。如果返回 idempotency_result_indeterminate,停止自动重提并保留原 Key;尤其不要为结果不确定的付费 region_edit 生成新 Key。
异步任务流程
创建任务成功返回 HTTP200,任务 ID 位于 data[0].task_id。随后查询:
pending、processing、completed 或 failed。建议从 2 秒间隔开始轮询,逐步退避到最多 5 秒,并设置 10 分钟总超时。切换源图或离开页面时,使用 AbortController 终止旧轮询。
获取图层:segment
请求参数
string
默认值:"grok-imagine-2.0-ext"
必填
固定为
grok-imagine-2.0-ext。string
默认值:"segment"
必填
获取图层时固定为
segment。string
必填
当前用户已完成的 Grok 单图任务 ID。来源任务必须成功、属于图片任务,且最终结果仅包含一张图片。不要同时发送
image_id 或 image_index;服务端会从来源任务解析对应资产。boolean
默认值:"true"
是否返回 COCO compressed RLE。需要精确描边、画笔或多边形编辑时应显式设为
true。boolean
默认值:"false"
仅查询分段缓存,未命中时不回源。不能与
refresh=true 同时使用。boolean
默认值:"false"
传递给上游的缓存提示,不代表本地一定命中缓存。
boolean
默认值:"false"
强制跳过缓存重新获取。不要用于普通编辑器流程,也不能与
cache_only=true 同时使用。segment 不需要 prompt,也不要发送 billing_model_name、n、size 或 response_format。
请求示例
- 实时获取
- 仅探测缓存
cache_only=true 时,缓存未命中仍是成功任务。根据 cache_status 判断:hit 可直接显示图层,miss 表示尚无缓存。不要用 cached 字段判断是否命中。
完成响应
segment 的 data.result 直接是分段结果,不包在 images 中:
没有有效
mask_rle 或 mask_url 的对象只能用于矩形近似编辑,不能标记为精确图层。
解码 mask_rle
mask_rle.counts 是 COCO 压缩计数字符串,不是 Base64,也不是 zlib。数据按列优先顺序展开;第一个 run 表示背景像素数,此后在背景和前景之间交替。
以下 TypeScript 将结果转换为浏览器常用的行优先二值数组:
mask_rle.counts 写入日志、埋点、URL 或错误上报。
转换为精确选区
region_edit 使用归一化多边形:
mask_url 的像素,图片服务器必须允许当前站点跨域访问,并且要在设置 src 前指定 image.crossOrigin = "anonymous",或通过 fetch 获取 Blob。否则图片绘制到 Canvas 后会污染画布,无法再读取像素。图层轮廓优先直接解码 mask_rle,不依赖跨域读取源图。
编辑选区:region_edit
请求参数
string
默认值:"grok-imagine-2.0-ext"
必填
固定为
grok-imagine-2.0-ext。string
默认值:"region_edit"
必填
编辑选区时固定为
region_edit。string
必填
当前源图的资产 ID。首次编辑使用 segment 响应中的
result.image_id;连续编辑使用上次编辑返回的新 image_id。string
必填
描述如何修改选区,去除首尾空格后不能为空。
array
精确多边形选区,推荐用于正式图层和画笔编辑。坐标归一化到
0~1,支持 outer 和可选 holes。number[][]
矩形选区,每项为
[x1,y1,x2,y2]。可使用归一化坐标;使用像素坐标时必须同时传 mask_size。integer[]
segment 返回的原始
objects[].index。上游按对象边界框编辑,因此只适合快速联调或矩形近似模式。integer[]
像素
boxes 使用的 [height,width]。两个值都必须为正整数。selection_regions、boxes、object_indices 至少有一个非空。接口允许组合,但建议一次只使用一种,避免重叠选区和语义不清。
三种选区方式
- 精确多边形(推荐)
- 归一化矩形
- 像素矩形
- 对象索引
points 可使用扁平数组,也兼容 [[x0,y0],[x1,y1],...]。每项必须是 0~1 的有限数字,每个 ring 至少包含 3 对坐标。完成响应
result.images[0].items[0]。兼容旧响应时,可读取同一下标的 url[0] 和 image_ids[0],但必须同时拿到可展示的 HTTP(S) URL 和新的 image_id。
expires_at 为准,不要在前端硬编码固定小时数。需要长期展示时应及时下载或转存。
连续编辑
一次编辑完成后,应同时更新三个值并清除旧图层缓存:- 再次获取图层:
source_task_id = 本次 region_edit 的 task_id - 再次编辑:
image_id = 本次 region_edit 返回的新 image_id - 不要把
image_id传给segment,也不要继续使用上一张图片的旧image_id
错误处理
部分越界的正整数
object_indices 可能在创建后异步失败,因此创建请求成功不代表编辑一定成功。
计费说明
segment免费,完成任务的cost和credits_cost均为0,但仍需正常鉴权并满足来源任务条件。region_edit为付费操作。以任务完成响应中的cost和credits_cost为准,不要在前端硬编码价格。- 不要发送内部计费字段
billing_model_name。
前端接入检查
- API Key 只保存在后端或 BFF。
segment只发送来源source_task_id,不发送image_id或image_index。region_edit使用 segment 返回的image_id,并至少提供一种选区。- 正式图层编辑使用
selection_regions;object_indices仅为矩形近似。 mask_size始终按[height,width]解析,并正确处理图片显示区域的缩放和留白。- 同一次网络重试复用原
Idempotency-Key,收费请求结果不确定时不自动换 Key 重提。 - 任务完成后同时校验 URL 和新
image_id,连续编辑时清理旧图层和旧轮询。