feat(canvas): 媒体产出模型与选用模型分离 (#597)

Co-authored-by: ddcat666 <26564566+ddcat666@users.noreply.github.com>
This commit is contained in:
VicoHu
2026-09-24 09:28:16 +08:00
committed by ddcat666
parent a89bd4aead
commit 357450e52c
28 changed files with 367 additions and 52 deletions

View File

@@ -0,0 +1,11 @@
# ADR-0009: 媒体产出模型与选用模型分开记录
状态:已接受。日期:2026-09-22。
画布节点上的模型字段同时承担两件事:提示词面板下一次要用的选用模型,以及这份图片、视频或音频实际由哪个模型写成。改下拉并不重新生成时,后一件事会被覆盖,过一段时间无法从节点上认出资产的产出模型。
决定:产出模型在生成成功并写入节点时冻结,选用模型继续随下拉变化。角标、节点详情和版本对比只展示产出模型;没有产出模型时留空。展示名按当前模型目录解析,目录中没有则显示模型 ID。本地加工、上传和本次改动之前的旧节点不回填。
## 考虑过的方案
继续复用同一个模型字段。改动更少,但选用模型一变,产出事实就丢了。否决。

View File

@@ -43,7 +43,7 @@ description: 从产品功能快速定位主要代码入口
| 职责 | 代码位置 |
| --- | --- |
| 页面装配和跨域动作协调 | `web/src/pages/canvas/project.tsx` |
| 画布领域规则和生成协议 | `web/src/lib/canvas/canvas-project-domain.ts`、`canvas-project-generation.ts` |
| 画布领域规则和生成协议 | `web/src/lib/canvas/canvas-project-domain.ts`、`canvas-project-generation.ts`、`produced-model.ts` |
| 项目恢复、持久化和项目级动作 | `web/src/pages/canvas/use-canvas-project-lifecycle.ts` |
| 云端版本校验与冲突草稿 | `web/src/services/user-data-sync.ts`、`canvas-sync-drafts.ts`、`web/src/lib/canvas/canvas-content.ts`、`web/src/pages/canvas/canvas-sync-status.tsx` |
| 历史树与独立只读预览 | `web/src/pages/canvas/canvas-version-history.tsx`、`canvas-version-preview.tsx`;后端 `internal/canvas/canvas_history.go` 与 `repository/canvas_history.go`,Agent 写入桥接在 `app/canvas_bridge.go` |

View File

@@ -5,6 +5,10 @@ description: 当前项目已实现的核心工作台能力与使用入口
# 功能清单
## 画布媒体产出模型
图片、视频、音频在生成成功并写入节点后,会冻结当时提交的产出模型。提示词面板里的模型下拉仍是下一次要用的选用模型,改下拉不会改掉已经生成的内容。画布外观中的「媒体信息」打开后,有内容的媒体节点在左下角显示产出模型;图片右下角继续显示尺寸和体积。上传、粘贴、截取、合并、提取音频和本地加工不记录产出模型。本次改动之前的节点不回填。分享页和版本预览画布不显示这块信息。
## 画布 Agent 名称、文案与形象
「站点及外观 → 画布配置」提供独立助手名称、入口文字、面板标题和欢迎/输入文案。支持导入授权的 Live2D Cubism 3/4 运行时 ZIP,预览后保存启用、调整高度、切回默认动态球。加载失败保留可点击的默认入口,上传和资源访问具有管理员校验和引用保护。Cubism Core 由部署者提供,真实播放待验收;不含图片自动建模或 AI 自我介绍同步。详见 [画布 Agent 外观与 Live2D](/docs/backend/canvas-agent-appearance)。

View File

@@ -15,6 +15,15 @@ description: 当前项目已实现功能的手工验证清单与未确认边界
- [ ] Firefox/Chrome/Safari 实际页面走关键 lazy route;检查离线草稿、登录切换和错误重试行为。尚未做真实浏览器/CDN 验收。
- [ ] 使用 React Profiler 与长时间运行的大画布记录任务更新、节点数/可见数、主线程长任务和页面隐藏行为。当前只做结构性降热点,不推断整画布必然全量重渲染或已达到某个帧率。
## 画布媒体产出模型
- 产出模型与选用模型分开保存。生成成功才冻结产出模型;生成中、失败和只改模型下拉不改已有产出模型。
- [ ] 打开画布外观「媒体信息」后,新生成的图片、视频、音频左下角显示模型展示名或模型 ID。图片右下角仍显示尺寸和体积。关闭开关后这两处都不显示。视频标题旁的宽高保持可见;视频播放时角标不盖住控制条。
- [ ] 生成成功后把下拉改成另一个模型且不重新生成,角标仍是原来的产出模型。重新生成成功后角标换成新模型。
- [ ] 上传、粘贴、宫格切分、截取、合并、提取音频不显示产出模型。节点详情和版本对比在没有产出模型时留空,不显示「默认模型」。搜索能按产出模型名称和选用模型找到节点。
- [ ] 分享页和版本预览画布不显示产出模型。旧画布节点在重新生成成功之前不出现角标。
- [ ] 真实浏览器验收尚未执行。
## 原任务 ID 媒体保存恢复
- [x] 故障注入:下载 503 后服务实例重建继续原任务、OSS 上传失败保留暂存文件及资源 ID、素材登记异常使任务成功事务回滚,登记恢复无需再次下载。

View File

@@ -45,6 +45,7 @@
- [ADR-0006:语音滤镜与项目模板](adr/0006-voice-filters-and-templates.md):补充评估 Concat 剩余两个缺口——语音滤镜走 Web Audio 预览近似 + ffmpeg 音频滤镜图导出,模板走项目快照服务化;均为预设插件且服从单一滤镜图计划。
- [ADR-0007:AI 编辑交互](adr/0007-ai-editing-interaction.md):对话式剪辑作为预设插件——AI 输出受约束命令 JSON(schema 校验 fail-closed),与手势命令同队列同撤销栈;≤3 条直接执行、批量改动 diff 预览待确认。
- [ADR-0008:自研 UI 组件层与 AntD 替换](adr/0008-ui-component-layer-antd-replacement.md):`components/ui` 重建为自研组件层(Celadon UI),吸收 dbx 契约形态(族目录+barrel)与 BoardUI 设计深度(语义状态矩阵/复合排版/RAC 原语/动效纪律/agentic 产品块),分阶段替换 AntD(依赖面 180 文件/41 导入)最终脱离;试点画布工具条/节点徽章,唯一实施计划见 [plans/ui-kit-rollout-plan.mdx](plans/ui-kit-rollout-plan.mdx),活规范见 [plans/ui-design-system.mdx](plans/ui-design-system.mdx)。
- [ADR-0009:媒体产出模型与选用模型分开记录](adr/0009-produced-model-separate-from-selection.md):生成成功时冻结产出模型,选用模型继续随下拉变化;角标按当前目录解析展示名。
## 本地协作文档(不随仓库分发)