feat: refine wooden fish runtime generation

This commit is contained in:
2026-05-22 03:49:35 +08:00
parent d81cc49549
commit 5f1128540e
30 changed files with 804 additions and 126 deletions

View File

@@ -74,7 +74,14 @@ WF-*
- 写回字段:`hitObjectAsset`
- 是否允许历史图:允许
- 是否允许 AI 重绘:允许;上传图只作为 image2 参考,最终运行态只消费 image2 生成图
- 系列素材槽位:无;首版只有单图敲击物,不生成图集
- `slotId=background`
- `slotType=background-image`
- `slotName=背景环境图`
- 提示词来源:第一步生成的敲击物图案与用户原始题材关键词 / 参考图主题
- 写回字段:`backgroundAsset`
- 是否允许历史图:不单独选择;由敲击物图案生成链路派生
- 是否允许 AI 重绘:允许;随敲击物图案一起重生成
- 系列素材槽位:无;首版只有敲击物图案与背景环境图两个单图资产,不生成图集
- 音频资产槽位:
- `slotId=hit-sound`
- `slotType=hit-sound-audio`
@@ -135,13 +142,39 @@ WF-*
## 6. 生成规则
### 6.1 敲击物图案
### 6.1 敲击物图案与背景环境图
默认模板在用户未自定义关键词且未上传参考图时,`compile-draft` 使用内置透明 PNG `/wooden-fish/default-hit-object.png` 写回 `hitObjectAsset``generationProvider="bundled-default"`。这张图来自 image2 对原始参考图的卡通风格化重绘,固定为模板默认资源,避免默认关键词在每次生成时改变造型。
默认模板在用户未自定义关键词且未上传参考图时,`compile-draft` 使用内置透明 PNG `/wooden-fish/default-hit-object.png` 写回 `hitObjectAsset``generationProvider="bundled-default"`。这张图来自 image2 对原始参考图的卡通风格化重绘,固定为模板默认资源,避免默认关键词在每次生成时改变造型。即使使用内置默认敲击物,首版仍需要生成 `backgroundAsset`,背景环境图使用默认敲击物作为主题和画风参考。
用户输入自定义关键词、上传参考图,或在结果页主动重生成敲击物时,`compile-draft``regenerate-hit-object` 必须为敲击物图案生成 image2 单图资产,并由 `api-server` 注入写回 `hitObjectAsset`。前端 action 请求不得自带 `hitObjectAsset` 短路生成。如果用户上传参考图,后端只能把该图作为 image2 参考图或编辑输入;运行态不得直接使用上传图。
用户输入自定义关键词、上传参考图,或在结果页主动重生成敲击物时,`compile-draft``regenerate-hit-object` 必须为敲击物图案生成 image2 单图资产,再基于新敲击物图案生成背景环境图,并由 `api-server` 注入写回 `hitObjectAsset``backgroundAsset`。前端 action 请求不得自带 `hitObjectAsset``backgroundAsset` 短路生成。如果用户上传参考图,后端只能把该图作为 image2 参考图或主题参考;运行态不得直接使用上传图。
落库链路固定为:`api-server` 调用 VectorEngine `gpt-image-2-all` -> 服务端上传 OSS 私有对象 -> `confirm_asset_object` 登记资产对象 -> `bind_asset_object_to_entity` 绑定到 `entityKind='wooden_fish_work'``slot='hit_object'``assetKind='wooden_fish_hit_object'` -> 把 `legacyPublicPath` 写入 `hitObjectAsset.imageSrc`。不得只拼 `/generated-wooden-fish-assets/...` 占位路径;前端会对 generated legacy path 走 `/api/assets/read-url` 换签OSS 中没有真实对象时图片无法显示。
敲击物图案生成流程固定为:
1. 调用 VectorEngine `/v1/images/edits`,模型固定为 `gpt-image-2`
2. multipart 参考图固定包含默认木鱼图 `/wooden-fish/default-hit-object.png`,作为基础结构和画风参考;
3. 若用户上传参考图,该图只作为新主题参考追加到同一次 image2 edits 请求,不直接进入运行态;
4. 尺寸固定 `1:1`,透明底;
5. 提示词严格使用:
```text
生成敲木鱼新样式,要求结构,画风与参考图保持高度一致,新样式颜色搭配使用新主题对应的颜色。
新主题为:(用户提供参考图或用户输入关键词)
```
背景环境图生成流程固定为:
1. 调用 VectorEngine `/v1/images/edits`,模型固定为 `gpt-image-2`
2. multipart 参考图固定为第一步新生成的敲击物图案;默认未生成新敲击物时使用内置默认敲击物图案;
3. 尺寸固定竖屏 `9:16`
4. 背景环境图只适配新敲击物主题和画风,背景中不得包含新敲击物本体,也不得增加木槌互动物品;
5. 提示词严格使用:
```text
生成敲木鱼背景,要求主题,画风与参考图保持高度一致,背景元素和颜色搭配与主题对应,木鱼预设在屏幕中央位置,木鱼主体周围元素保持干净,背景氛围围绕外围设计,背景环境图中不包含新木鱼物品,背景氛围中不增加木槌互动物品。
主题为:(用户提供参考图或用户输入关键词)
```
落库链路固定为:`api-server` 调用 VectorEngine `/v1/images/edits` -> 服务端上传 OSS 私有对象 -> `confirm_asset_object` 登记资产对象 -> `bind_asset_object_to_entity` 绑定到 `entityKind='wooden_fish_work'`。敲击物绑定 `slot='hit_object'``assetKind='wooden_fish_hit_object'`,背景绑定 `slot='background'``assetKind='wooden_fish_background'`。写回时把 `legacyPublicPath` 分别写入 `hitObjectAsset.imageSrc``backgroundAsset.imageSrc`。不得只拼 `/generated-wooden-fish-assets/...` 占位路径;前端会对 generated legacy path 走 `/api/assets/read-url` 换签OSS 中没有真实对象时图片无法显示。
默认图案要求:
@@ -166,7 +199,7 @@ WF-*
### 6.3 封面
首版封面使用 `hitObjectAsset.imageSrc` 作为 `coverImageSrc`。不单独新增第三次图片生成。
首版封面使用 `hitObjectAsset.imageSrc` 作为 `coverImageSrc`背景环境图不作为封面图,不单独新增第三次图片生成。
## 7. 契约草案
@@ -183,9 +216,10 @@ WF-*
9. `hitSoundPrompt`
10. `floatingWords[]`
11. `hitObjectAsset`
12. `hitSoundAsset`
13. `coverImageSrc`
14. `generationStatus`
12. `backgroundAsset`
13. `hitSoundAsset`
14. `coverImageSrc`
15. `generationStatus`
`WoodenFishImageAsset` 至少包含:
@@ -260,7 +294,7 @@ finish
新增表:
1. `wooden_fish_agent_session`
2. `wooden_fish_work_profile`
2. `wooden_fish_work_profile`,其中 `background_asset_json` 保存背景环境图资产快照
3. `wooden_fish_runtime_run`
4. `wooden_fish_event`
@@ -276,13 +310,14 @@ finish
结果页必须展示:
1. 作品标题和简介;
2. 敲击物图案
3. 敲击音效试听
4. 祝福词配置
5. 标签
6. 试玩
7. 发布
8. 返回编辑。
2. 竖屏背景环境图预览
3. 敲击物图案
4. 敲击音效试听
5. 祝福词配置
6. 标签
7. 试玩
8. 发布;
9. 返回编辑。
结果页必须支持:
@@ -333,16 +368,17 @@ finish
1. 创作入口能看到 `敲木鱼` 模板;
2. 工作台可以填写敲击物描述、上传参考图、配置音效和祝福词;
3. 提交后生成 image2 敲击物图案;
4. 上传图不会直接进入运行态
5. 用户上传或录制音效时跳过音效生成并持久化该资产
6. 结果页能看到图案、试听音效、编辑祝福词并试玩
7. 运行态功能区点击不触发敲击
8. 功能区点击会计数、播放音效、播放敲击动画并飘字
9. 顶部计数器只在词条首次出现时创建
10. 连点不丢计数
11. `checkpoint``finish` 只保存单次 run 摘要
12. 作品可以发布、进入公开列表和公开详情
13. `WF-*` 公开作品号能进入分享和运行态
14. `npm run check:encoding` 通过
15. schema 变更后 `npm run check:spacetime-schema` 通过
3. 提交后按默认木鱼参考图生成 image2 敲击物图案;
4. 提交后按新敲击物图案参考图生成 9:16 背景环境图
5. 上传图不会直接进入运行态
6. 用户上传或录制音效时跳过音效生成并持久化该资产
7. 结果页能看到背景、图案、试听音效、编辑祝福词并试玩
8. 运行态功能区点击不触发敲击
9. 非功能区点击会计数、播放音效、播放敲击动画并飘字
10. 顶部计数器只在词条首次出现时创建
11. 连点不丢计数
12. `checkpoint``finish` 只保存单次 run 摘要
13. 作品可以发布、进入公开列表和公开详情
14. `WF-*` 公开作品号能进入分享和运行态
15. `npm run check:encoding` 通过
16. schema 变更后 `npm run check:spacetime-schema` 通过。