---
name: maker-ui-bbox-workflow
description: 通过 CLI 编排 Maker「游戏UI制作 · Bbox预排参考图（实验）」：复用当前识图，按需创建预排、分离与切图批次，检查并导出 PNG 资源包。用于此实验模板及其个人副本；普通「游戏UI制作」使用 maker-ui-workflow。
---

# Bbox 预排 UI 工作流

本 Skill 管理预排模板的独立执行流程。先读实际卡片、连线与参数，不按示例数量或标题序号猜输入。
官方模板 ID 为 `7e1cb6ad-732f-4dc3-a951-000000000015`；个人副本以分组关联的本 Skill 识别。
模板标记 `cliOnly`，整组只由 CLI 编排；用户仍可单独执行预排、生图和切图。
新实例只有原稿、识图输入与去文字步骤，示例批次只供预览，不复制为任务。
不要把普通模板转换成预排流程，也不要求画布自己识图决策。

## 准备与识图

1. 沿用用户已选项目，通过 `canvas pages`、`canvas inspect` 读取 page-id、canvas-id、revision
   与当前分组。操作使用当前 CLI schema，通过受控接口保存，不改写打开中的画布文件。
2. 调用 `canvas model-settings --target-dir <项目>`，识图按返回的 vision.source 执行；默认 Server API 不可用时由系统临时降级为 chatgpt-web，用户主动选择优先，不自行切换渠道。
   付费识图、生图遵循已有授权；本地预排不调用生图模型、不消耗模型积分。
3. 原始设计稿 → 原稿与识图输入 → 去文字与元素识别。先完成去字，再识别去字图的 UI
   与原稿的文字。local 由当前 AI 客户端识别；custom 用已配置 API；server 用画布两轮识图。已有任务不因接口不可用换渠道重做。
   chatgpt-web 仅复用同包的[网页识图协议](../maker-ui-workflow/references/chatgpt-web.md)，
   不因此切换为普通模板的拆图流程。
4. 用 `canvas recognition-input` 取当前输入，用 `canvas recognition-result` 校验两轮结果
   并按返回协议回填。Bbox 为 version=1、design-pixels、xywh，保留 design/cutSource 的
   路径、哈希、真实尺寸及 elements/texts。换图后重新识图，不能沿用示例坐标。
   当前原稿和去文字图身份未变且已有有效结果时直接复用，不再次调用识图或打开识图网页。

## 预排、分离与切图

1. 先判断素材复用、按钮状态及美术字需求，必要时修正当前识图清单。保存后调用
   `canvas sync-ui-batches`，input 如 `{"id":"分组ID","artText":["T001","T008"],"background":false}`，携带最新 revision。
   artText 填当前 Bbox 中所有需要图片化的文字 ID，每项独立建卡；没有时传 []。
   普通文字留作 Label，cutout=false 不自动提取；role=title 不等于美术字需求。旧 true 仅代表单个主标题，不用于多组美术字。
   background 决定是否额外还原识图清单未列出的环境背景；纯弹窗不默认补场景。
   接口按分类将素材以原尺寸紧凑装入图集，2048 仅为单边上限，画幅按实际占用选择支持的比例，记录每项裁切矩形，仅创建实际需要的“预排→分离→PNG”和资源包；
   空分类不建卡。同一结果重复调用不重复建卡，不触发识图、生图或扣费。
   已有卡片和产物保留；旧测试或换稿留下的卡片不要当作新批次完成。无结果、无任务且
   确认无人工修改的旧占位卡才可通过 delete-nodes 清理，不删除已生成素材。
   容量超限时停止说明需要拆分处理，不截断元素清单或宣称自动分画布已经完成。无需外部排版脚本。
2. 每批严格沿用：当前去文字图 → Bbox 本地预排卡 → 生图分离卡 → PNG 资源卡。
   本地预排以原稿 Bbox 像素为尺寸基准（小数宽高四舍五入），只移动、不缩放入格；去文字图分辨率不同时仅映射回该基准。素材间留 8 像素间隔，放不下才续批，单项超过 2048 像素停止说明，不缩小。它仍带原背景、遮挡物，不是已分离的最终素材。
3. 分离卡只引用对应批次的预排图，不改回整屏去字图，也不混入其它参考图。提示词按
   “保留原尺寸主体”“移除背景与覆盖物”“输出同坐标”分开写；原稿坐标不作为预排图上的定位坐标。
   不覆盖已有槽位清单，不重排 ID，不把预排卡当成付费生图卡。
4. 预排与分离必须输出当前 nativeLayout 记录的相同尺寸，不固定为 2048×2048。先看预排是否紧凑、主体清晰；不要将大面积空白图直接送生图。按已记录的实际矩形裁切，不做内容检测重排或缩放；更换 Bbox、来源或布局后先重做预排。
   下游使用本次生成记录的规划，不能用新规划解释旧结果。按上游状态恢复，不重复已完成生成。
5. 美术字是独立支线，引用原始设计稿；普通文字使用 texts 还原 Label。不要把普通文字
   塞进预排图集，也不要因去字图没有美术字就跳过该支线。
6. 同步完成后先 inspect 核对批次数、元素覆盖及连线。已获授权时运行分组到资源包，保留识图开启；缺少本地/网页识图结果时先回填、保存，
   再以最新 revision 继续。队列根据连线执行，预排、生图和裁切各有自己的完成状态。
   生图同页最多并发 3 张；明确失败默认最多重试 2 次（首次加重试共 3 次），沿用分组队列。
   结果未知、下载或保存失败不重新付费生成；本地预排不占用生图并发通道。

## 检查与恢复

- 核对每批主体完整、槽位顺序、默认/按下态、背景透明度、底板与图标分离。数量相同不代表质量通过；
  预排图只是参考约束，模型仍可能重绘、跨格、粘连。未复核资源保持 unreviewed。
- 空分类无需生成，资源包跳过已确认完成的空分类；来源过期时先更新来源。
- 切图失败先保留生成图，使用已有裁框与去底能力修正，不自动重新付费生图。
- 未知请求先查询原任务。Server API 恢复需复用原编号并显式确认；不把 unknown 当作失败重提。
- 完成必须逐项对照 Bbox：每个元素（含 duplicateOf 复用实例）有正常态绑定，按钮和页签还有按下态；
  每个选定美术字 ID 在 bindings.json 的 artTextBindings 中有对应 PNG，普通文字保留在 texts。
  缺项、失败、未知或过期都不报完成；美术字的 PNG 映射不代表视觉审核通过。
  实验模板整包导出会拒绝待完成、未连入资源包及缺失元素/状态；单卡下载不代表整套完成。
  超过 ZIP 上限时按资源卡分别下载并核对全集，不截断；超过规划容量时停止说明，不能承诺自动跨画布拆分。
- 结束后核对批次数与资源数量，将每批“预排 → 分离 → 资源”横向对应，类别纵向紧凑排列，
  资源包放在全部处理卡片底部。

## 交付边界

仅请求切图时，到 PNG 与含 bbox.json、bindings.json 的资源包结束。既有示例不能当新任务完成。
用户要求继续拼 UI 时，从同一归档版本取得 Bbox、PNG 与已确认的绑定，保留文字 Label 和原稿坐标；
正式素材归档到 `assets/ui/<界面>/images/`，显式生成 meta。
组装复用同包 `../maker-ui-workflow/scripts/assemble-ui.mjs`，输入 assembly.json，输出到不存在的
新目录；脚本的 schema 与坐标契约见[组装数据说明](../maker-ui-workflow/references/workflow.md)。
这里只复用组装工具和数据契约，不执行该文档的普通模板拆图步骤。打开 UI 编辑器左右、重叠对照，
不覆盖用户手工编辑，不自动构建、提交或发布游戏。
