0. 结论先行
唯一真相
发布后的素材包以 R2 中的
发布后的素材包以 R2 中的
manifest.json + 同目录文件 为唯一清单。数据库只记录生产任务、审核与成本,不复制“已发布包清单”。终局流水线
规格化 → 批量生成 → 抠图/清边 → 派生尺寸 → 自动质检 → 失败回炉 → 人工抽检 → manifest 打包 → 原子发布 → Workshop 自动出现。
规格化 → 批量生成 → 抠图/清边 → 派生尺寸 → 自动质检 → 失败回炉 → 人工抽检 → manifest 打包 → 原子发布 → Workshop 自动出现。
核心边界
模型返回成功不等于素材合格。透明度、边缘、尺寸、主体完整性、包内一致性和授权信息全部过闸,才允许发布。
模型返回成功不等于素材合格。透明度、边缘、尺寸、主体完整性、包内一致性和授权信息全部过闸,才允许发布。
首版范围
先做人物、角色、道具、UI 元件和普通背景;头发、玻璃、烟雾、火焰等半透明难例进入增强队列,不拖死主线。
先做人物、角色、道具、UI 元件和普通背景;头发、玻璃、烟雾、火焰等半透明难例进入增强队列,不拖死主线。
1. 目标与非目标
目标
- 同一批素材共享风格、视角、光源、尺寸和留白。
- 输出透明 PNG/WebP、缩略图、预览图与 manifest。
- 每个失败有明确原因,可重跑某一步而非整包重做。
- 发布后无需登记,现有
GET /v1/games/assets自动列出。 - 模型、提示词、种子、成本、质检结果全可追溯。
非目标
- 首版不训练自有基础生成模型。
- App 不持有模型或 R2 写入密钥。
- 不把人工审美完全伪装成自动化。
- 未注明来源/授权的素材不进正式库。
- 不做“上传成功即发布”的危险捷径。
2. 总体架构
Workshop / API→任务编排器→生成适配器→抠图与派生→质检引擎→审核台→打包发布器→R2 / Workshop
| 组件 | 职责 | 不负责 |
|---|---|---|
| Asset API | 创建/查看/取消任务,批准发布,读取进度 | 不执行重型图像处理 |
| Orchestrator | 状态机、幂等、重试、并发、预算、任务拆分 | 不理解具体模型 SDK |
| Provider Adapter | 统一不同生成服务的输入输出 | 不决定素材是否合格 |
| Cutout Worker | 主体分割、alpha matting、去白边、边缘净化 | 不覆盖原始文件 |
| QA Worker | 机器指标、视觉审查与规则判定 | 不直接覆盖失败品 |
| Packager | manifest、校验和、目录布局、原子发布 | 不维护第二份发布清单 |
3. 一单素材怎样走完
- 创建 brief:包名、用途、风格、类型、数量、画布、视角、光线、调色板、授权、透明背景要求。
- 冻结风格 DNA:先生成 4–8 张候选;选中后锁 style prompt、negative prompt、seed family、palette 和构图规则。
- 展开 shot list:把“20 个道具”拆成 20 个有稳定 ID 的 item,单项可重跑。
- 生成原图:保留模型原始响应;后续产物从原图派生。
- 抠图:主体 mask → alpha matte → 去色边 → 小孔修复 → 阴影策略 → 透明 PNG。
- 派生:标准画布、缩略图、1x/2x、WebP 预览、可选 sprite sheet。
- 自动质检:文件、像素、边缘、视觉、一致性、授权六道闸。
- 失败回炉:按原因回到必要步骤;边缘坏只重抠,主体缺失才重生成。
- 人工抽检:首包全检;稳定后抽样,低置信项强制检。
- 原子发布:先写 staging,完整校验后复制到正式前缀,最后写 manifest;manifest 出现才代表包可见。
4. 抠图程序
普通主体通道
成熟分割模型产粗 mask,alpha matting 精修边缘;适用于角色、物件、UI 图标,是首版主通道。
成熟分割模型产粗 mask,alpha matting 精修边缘;适用于角色、物件、UI 图标,是首版主通道。
半透明增强通道
头发、玻璃、烟雾、火焰走专用 matting + 人工抽检;不能用硬阈值把半透明切没。
头发、玻璃、烟雾、火焰走专用 matting + 人工抽检;不能用硬阈值把半透明切没。
source.png → foreground segmentation → trimap / alpha matting → edge color decontamination(去白边/绿边) → remove islands + fill tiny holes → preserve soft shadow(按素材规格) → crop bbox + safe padding → standard transparent canvas → asset.png + mask.png + debug_edge.png
| 指标 | 首版判据 | 失败动作 |
|---|---|---|
| 背景残留 | 透明区高不透明孤岛面积受限 | 重做 mask/连通域清理 |
| 主体完整 | 主体不接触裁切安全线;无缺肢/缺角 | 扩大 bbox 或重生成 |
| 白边/色边 | 边缘环色差低于包内基准 | decontaminate 重跑 |
| 软边 | 不得把 alpha 全二值化 | 转增强 matting |
| 空图 | 有效 alpha bbox 必须落在规格范围 | 直接判失败 |
具体阈值必须用真实素材集校准;蓝图只钉测量方法,不把未测数字写成永恒真理。
5. 六道质量闸门
Q1 文件闸
格式、解码、尺寸、色彩空间、alpha、大小、checksum。
格式、解码、尺寸、色彩空间、alpha、大小、checksum。
Q2 几何闸
主体 bbox、留白、锚点、方向、像素密度、画布一致。
主体 bbox、留白、锚点、方向、像素密度、画布一致。
Q3 边缘闸
背景残留、锯齿、白边、孔洞、半透明边缘。
背景残留、锯齿、白边、孔洞、半透明边缘。
Q4 视觉闸
主体正确、无多肢、无文字乱码、视角和光源符合 brief。
主体正确、无多肢、无文字乱码、视角和光源符合 brief。
Q5 一致性闸
调色板、线粗、透视、阴影、比例、饱和度与同包基准比较。
调色板、线粗、透视、阴影、比例、饱和度与同包基准比较。
Q6 权利闸
来源、模型、生成时间、许可证、禁用品牌/角色检查齐全。
来源、模型、生成时间、许可证、禁用品牌/角色检查齐全。
PASS 自动通过REVIEW 低置信人工看RETRY 可自动修复REJECT 规格或权利问题
6. 状态机与重试
DRAFT → PLANNED → GENERATING → CUTTING_OUT → DERIVING → QA
├→ APPROVAL → PACKAGING → PUBLISHED
├→ RETRY_QUEUED → 对应步骤
└→ REJECTED / CANCELLED- 每一步使用
job_id + item_id + stage + input_hash做幂等键;重复消息不得重复收费或发布。 - 网络/限流:指数退避 + jitter;模型内容失败:改提示词/种子;结构失败:只重跑处理步骤。
- 单 item 最多有限次自动回炉;超出转人工,不无限烧钱。
- 取消只阻止后续步骤,保留证据和成本。
- 死信队列记录最终错误,不把失败伪装成“素材库为空”。
7. 数据模型
| 表/对象 | 关键字段 | 用途 |
|---|---|---|
asset_jobs | id, room_id, pack_id, status, brief_json, budget, spent, created_by | 一次素材包生产任务 |
asset_items | id, job_id, stable_key, spec_json, status, chosen_variant | 角色/道具等单项 |
asset_attempts | item_id, stage, provider, model, prompt_hash, seed, input/output keys, cost, latency, error | 追溯与计费 |
asset_qa_results | attempt_id, rule, score, threshold, verdict, evidence_key | 每道质检证据 |
asset_approvals | job/item, reviewer, verdict, note, at | 人工审核案底 |
| R2 staging | game-assets-staging/{job}/{item}/... | 中间产物 |
| R2 production | game-assets/{pack}/manifest.json + files | 已发布唯一真相 |
数据库是生产过程账本;R2 manifest 是发布事实。两者职责不同,不构成手抄镜像。
8. manifest v1 合同
{
"schema_version":1, "id":"neon-ui-v1", "name":"Neon UI", "version":"1.0.0",
"style":"neon", "types":["ui","sprite"], "license":"HOOP-generated",
"provenance":{"generator":"pipeline","job_id":"...","created_at":"..."},
"files":[{"id":"button-primary","path":"ui/button-primary.png","kind":"ui",
"width":512,"height":256,"sha256":"...","anchor":[0.5,0.5],
"tags":["button","primary"]}]
}- 现有列表端点仍可只读 name/style/types/license;新增字段向后兼容。
- 文件数继续由存储层数出并与 manifest 比对,manifest 不自报没人核的数字。
- manifest 最后写入:它是发布提交点,半包绝不能提前出现在 Workshop。
9. API 与事件
| 接口/事件 | 作用 |
|---|---|
POST /v1/asset-jobs | 建任务;返回预算预估与展开后的 item 数 |
GET /v1/asset-jobs/{id} | 包级进度、成本、失败原因、待审核项 |
POST /v1/asset-jobs/{id}/approve | 批准打包;校验 QA 与权限 |
POST /v1/asset-items/{id}/retry | 按失败阶段重跑 |
POST /v1/asset-jobs/{id}/cancel | 幂等取消 |
asset.job.progress | 推 Workroom 真实进度 |
asset.job.review_required | 通知人工查看低置信项 |
asset.pack.published | 通知发布成功与 Workshop 链接 |
10. Workshop 产品界面
右上角 +
Workshop 页保持“设置服务”,不混成生成素材入口。素材生成入口属于 Assets 段。
Workshop 页保持“设置服务”,不混成生成素材入口。素材生成入口属于 Assets 段。
Assets 段
空库、读不到、有包三态继续分明;增加“生成素材包”后进入任务页。
空库、读不到、有包三态继续分明;增加“生成素材包”后进入任务页。
任务页
包进度、item 网格、原图/抠图对照、QA 红黄绿、成本、重试和批准发布。
包进度、item 网格、原图/抠图对照、QA 红黄绿、成本、重试和批准发布。
发布后
Workshop 仍从现有只读端点列包,不新增登记动作。
Workshop 仍从现有只读端点列包,不新增登记动作。
11. 安全、权限与版权
- 模型与 R2 凭证只在服务端保险箱使用;worker 拿短时、限范围凭证。
- 上传内容做 MIME/魔数双验、像素炸弹与大小限制、恶意元数据清理。
- 生产前缀仅 Packager 可写;生成 worker 只能写 staging。
- 每次发布保存操作者、manifest hash、文件 hash;同 pack/version 不静默覆盖。
- 人物照片需肖像权;品牌、已知角色、名人进入人工审核。
- 删除生产包走下架/墓碑流程,不能裸删对象。
12. 可观测性与成本闸
成功率
按 provider/model/kind/stage 分开。一次通过率
不回炉即 PASS 的比例。合格素材成本
总成本 ÷ 最终 PASS 数。P95 延迟
总耗时与阶段耗时。- 任务创建给预算预估;80% 警告,100% 停止新生成并转人工。
- prompt/原图按保留策略清理,QA、hash、成本和发布案底长期保留。
- 告警:队列积压、连续 provider 失败、发布后端点未出现、manifest/file hash 不符。
13. 测试与验收
- 单元:状态转换、幂等键、manifest 校验、阈值判定、失败分类。
- 契约:每个 provider adapter 用固定样本,返回格式变化立即红。
- 图像 golden:普通边缘、头发、玻璃、烟雾、阴影、白底、复杂底。
- 故意红:空 PNG、全不透明背景、断肢、白边、坏 manifest、少文件必须被拦。
- E2E:建包→生成→抠图→QA→批准→R2→现有端点出现→裸浏览器游戏加载。
- 故障注入:429/超时、worker 中途死、重复消息、R2 写一半、发布后读延迟。
14. 分刀开工清单
| 第几刀 | 稳定 ID | Jeff 看得到的交付物 | 完成证据 |
|---|---|---|---|
| 1 | AG-01 | brief + manifest v1 | 样例 JSON 通过校验器 |
| 2 | AG-02 | 单图抠图 CLI:输入图→透明 PNG + debug 图 | 难例 golden + 故意红 |
| 3 | AG-03 | 六道 QA CLI 与报告 | 坏样本逐类被拦 |
| 4 | AG-04 | 数据库任务账本 + 状态机 | 迁移、并发、幂等测试 |
| 5 | AG-05 | 队列与 worker,先接一个 provider | 重复消息不重复收费 |
| 6 | AG-06 | 风格 DNA + shot list + 单项重试 | 首个 10-item 同风格包 |
| 7 | AG-07 | 审核台 | 真实浏览器/真机截图 |
| 8 | AG-08 | Packager + 原子发布 | 杀进程也不出现半包 |
| 9 | AG-09 | Workshop 入口与进度 | 创建到发布完整 E2E |
| 10 | AG-10 | 第二 provider、成本路由、半透明增强 | A/B 成本与通过率 |
15. P1 上线门槛
- 至少 3 个包、每包 ≥ 10 项,从任务创建走完整管线发布。
- 普通角色/物件抠图的一次通过门槛用真实样本测出后再锁。
- 任何失败显示具体阶段与原因,没有“成功但文件为空”。
- 重复投递、worker 重启、R2 写失败不会重复收费或出现半包。
- Workshop 自动列出新包,裸浏览器游戏真实加载素材。
- 成本、模型、提示词 hash、来源、授权、QA 证据全部可追溯。
一句话验收:给系统一句素材需求,它能交出风格一致、边缘干净、授权清楚、能在游戏里直接加载的素材包;任何一步坏了,都知道坏在哪,并只重做该重做的那一步。