1
This commit is contained in:
@@ -142,7 +142,7 @@
|
||||
落地规则:
|
||||
|
||||
1. 已发布拼图作品必须优先通过 `sourceSessionId` 恢复原 Agent session。
|
||||
2. 恢复后的结果页沿用原草稿、候选图、正式图、标题、摘要和标签;创作者可以继续改标题、摘要、标签,并重新生成或切换图片。
|
||||
2. 恢复后的结果页沿用原草稿、当前正式图、标题、摘要和标签;创作者可以继续改标题、摘要、标签,并重新生成图片。
|
||||
3. 再次点击发布时不得创建新作品,必须覆盖同一个 `profileId / workId`。
|
||||
4. 覆盖发布只更新作品内容、更新时间、发布时间与广场投影;不得清零 `playCount`,不得改变作品归属。
|
||||
5. 如果历史作品缺少 `sourceSessionId`,前端只能退回作品详情,不伪造编辑 session。
|
||||
@@ -262,7 +262,7 @@ interface PuzzleAnchorPack {
|
||||
1. 展示当前关卡名
|
||||
2. 管理拼图图片生成
|
||||
3. 展示并编辑题材标签
|
||||
4. 预览作者信息
|
||||
4. 执行作品测试
|
||||
5. 执行发布
|
||||
|
||||
## 7.2 结果页必备字段
|
||||
@@ -276,10 +276,28 @@ interface PuzzleAnchorPack {
|
||||
本次建议同时加入:
|
||||
|
||||
1. `Agent 理解摘要`
|
||||
2. `创作者署名预览`
|
||||
3. `图片生成状态`
|
||||
2. `图片生成状态`
|
||||
3. `作品测试按钮`
|
||||
4. `发布按钮`
|
||||
|
||||
## 7.2.1 2026-04-26 结果页收口规则
|
||||
|
||||
本轮拼图结果页必须对齐 RPG 结果页的工作台形态,不再保留右侧信息总表。
|
||||
|
||||
落地规则:
|
||||
|
||||
1. 页面顶部保留轻量返回区,主体使用页签式内容区,底部右侧使用操作区。
|
||||
2. 结果页只分 `2` 个 Tab:
|
||||
- `基本信息`:只包含关卡名和题材标签。
|
||||
- `拼图图片`:直接展示当前正式图、画面描述输入与生成入口。
|
||||
3. 删除作者预览模块,不在结果页展示作者名、作者卡片或作者 HUD 说明。
|
||||
4. 删除常驻发布校验模块,不在页面右侧或内容区预先展示阻断项。
|
||||
5. 发布按钮放在屏幕右下角操作区,与 `作品测试` 并列;移动端保持底部可触达,页面内容区独立滚动。
|
||||
6. 点击 `发布` 时才弹出发布面板;如果不满足发布条件,发布面板展示阻断项并拦截正式发布。
|
||||
7. `作品测试` 不触发发布校验,直接用当前草稿进入拼图运行时。
|
||||
8. 移动端需要保证 Tab 内容区、图片编辑区、发布面板都可以正常纵向滚动;PC 端内容区使用更宽的预览与输入密度。
|
||||
9. 题材标签不显示输入框常驻编辑态;只展示已有标签 chip,支持删除已有标签,并通过新增动作添加新标签。
|
||||
|
||||
## 7.3 关卡名规则
|
||||
|
||||
关卡名生成规则建议如下:
|
||||
@@ -312,21 +330,45 @@ interface PuzzleAnchorPack {
|
||||
|
||||
1. 根据当前锚点生成正式拼图图片
|
||||
2. 重新生成
|
||||
3. 应用某一张候选图
|
||||
3. 上传一张可选参考图后进行图生图
|
||||
4. 从历史拼图素材库中选择一张素材作为参考图
|
||||
|
||||
第一版建议生成规则:
|
||||
### 7.5.1 2026-04-27 单图替换规则
|
||||
|
||||
1. 默认一次生成 `2` 张候选图
|
||||
2. 创作者选择 `1` 张作为正式图
|
||||
3. 正式图确定后,写回作品主图
|
||||
本轮起拼图结果页不再做多候选抽卡,而是采用“当前图直接替换”的轻量生成机制。
|
||||
|
||||
落地规则:
|
||||
|
||||
1. 每次点击生成只请求 `1` 张拼图图片。
|
||||
2. 新图片生成成功后立即替换当前正式图,写回 `coverImageSrc / coverAssetId / selectedCandidateId`。
|
||||
3. `draft.candidates` 只保留当前这张图片对应的持久化记录,避免结果页继续展示历史候选池。
|
||||
4. 不再提供“应用某一张候选图”的创作端交互;`select_puzzle_image` 只保留为兼容旧草稿的后端能力。
|
||||
5. 再次生成失败时不得清空旧正式图,用户仍可发布或测试旧图。
|
||||
6. 参考图只影响本次生成请求,不持久化为拼图作品字段。
|
||||
7. 历史拼图素材库读取 `asset_kind = puzzle_cover_image` 的资产记录,只用于选择参考图,不直接替换正式图。
|
||||
8. 从历史素材库选择素材后,前端把该素材的 `imageSrc` 作为 `referenceImageSrc` 传入下一次生成请求。
|
||||
9. 本地上传参考图与历史素材参考图互斥;后选择者覆盖先选择者。
|
||||
|
||||
前端 UI 规则:
|
||||
|
||||
1. `拼图图片` Tab 左侧或上方展示当前正式图,右侧或下方展示画面描述输入与生成按钮。
|
||||
2. 画面描述输入框上方必须显示标签 `画面描述`。
|
||||
3. `添加参考图` 按钮放入画面描述输入框右下角,作为小型 icon/button,不单独占用输入框外的大按钮区。
|
||||
4. 历史素材入口与添加参考图并列放在输入框右下角,打开独立素材选择面板,不在当前面板下方展开。
|
||||
5. UI 不默认写玩法规则说明,只展示必要状态、预览和操作。
|
||||
6. 移动端中输入框右下角按钮必须可点且不遮挡正文输入;输入框需要预留底部内边距。
|
||||
|
||||
后端落地契约:
|
||||
|
||||
1. `api-server` 写入 SpacetimeDB 的候选图 JSON 必须使用 `module-puzzle::PuzzleGeneratedImageCandidate` 持久化结构。
|
||||
2. 持久化字段名保持 Rust 侧 `snake_case`,例如 `candidate_id`、`image_src`、`asset_id`、`actual_prompt`、`source_type`。
|
||||
3. 面向前端的 HTTP 响应仍由 `shared-contracts` 单独映射为 `camelCase`,不能把响应层字段名直接写入 SpacetimeDB JSON。
|
||||
4. 多次生成候选图时必须追加到当前候选池,不能清空已有候选图;已有正式选择保持不变,新追加候选图默认不抢占 `selected` 状态。
|
||||
5. 追加生成时 `candidate_id` 必须按当前候选数量续号,避免前端列表 key 与后端选择动作命中旧候选图。
|
||||
4. 多次生成图片时必须替换当前候选记录,不能继续追加候选池;新记录默认 `selected = true`。
|
||||
5. 生成 `candidate_id` 可以继续按当前候选数量续号以保留调试可读性,但写入草稿时只保留新记录。
|
||||
6. 前端生成动作可携带 `referenceImageSrc`,字段语义对齐 RPG 场景图接口:支持单张 Data URL 或已有 `/generated-*` 旧路径。
|
||||
7. 当 `referenceImageSrc` 存在时,`api-server` 必须先把参考图归一化为 Data URL,再对齐 RPG 场景图接口调用 DashScope `multimodal-generation/generation` 的 messages 图生图接口;无参考图时继续走现有 `text2image/image-synthesis` 文生图接口。
|
||||
8. 图生图产物落盘、单图替换、正式图写回、发布校验与文生图完全复用同一套拼图图片链路。
|
||||
9. `api-server` 的历史素材接口必须允许 `puzzle_cover_image`,SpacetimeDB 侧历史素材 procedure 同步允许该类型。
|
||||
|
||||
## 7.6 拼图图片资产要求
|
||||
|
||||
@@ -343,9 +385,11 @@ interface PuzzleAnchorPack {
|
||||
|
||||
交互要求如下:
|
||||
|
||||
1. 生成图片时打开独立面板,不在当前卡片下方内联堆出大块内容。
|
||||
2. 标签编辑应为轻量标签编辑器,不做大表单。
|
||||
3. 发布按钮必须固定清晰,不与图片生成操作混淆。
|
||||
1. 图片生成不再通过作者预览旁的小弹窗承载,而是在 `拼图图片` Tab 内围绕当前正式图直接承载。
|
||||
2. 标签编辑应为轻量标签 chip 编辑器,不做大表单,不常驻显示标签输入框。
|
||||
3. 发布按钮必须固定在结果页右下操作区,不与图片生成操作混淆。
|
||||
4. 点击发布后才展示发布阻断项;阻断项只存在于发布面板里。
|
||||
5. `作品测试` 与 `发布` 同属右下操作区,测试动作不被发布阻断项拦截。
|
||||
|
||||
---
|
||||
|
||||
@@ -502,6 +546,9 @@ function resolvePuzzleGridSize(clearedLevelCount: number): 3 | 4 {
|
||||
|
||||
1. 初始局面不是已完成态
|
||||
2. 初始局面至少存在可推进空间
|
||||
3. 初始局面不能存在任何已经正确相邻的两块,避免玩家开局即看到自动合并块
|
||||
|
||||
初始化算法必须对候选打乱结果做正确相邻关系扫描:若任意两块在当前棋盘四向相邻,且它们在原图中的正确坐标也以相同方向相邻,则该候选布局无效,需要继续洗牌。多次随机尝试仍未得到合法布局时,使用确定性反序布局兜底;该布局等价于完整棋盘旋转 180 度,可保证原图相邻块不会以正确方向相邻。
|
||||
|
||||
## 9.5 交互规则总览
|
||||
|
||||
|
||||
Reference in New Issue
Block a user