Files
ttstd-infinite-canvas/docs/content/docs/overview/features.mdx
ddCat 964448607b docs(progress): 同步功能清单与待验证项
补上支付插件、积分弹窗、侧栏容量/签到和创作页改动的功能入口与手工验收清单。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 23:33:07 +08:00

328 lines
30 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: 功能清单
description: 当前项目已实现的核心工作台能力与使用入口
---
# 功能清单
## 工作区签到加油站
积分功能开启且后台「每日签到积分」大于 0 时,首页侧栏容量条上方固定显示领取卡片:标题为「{站点品牌名}加油站」,副文案为今日可领积分,黑色按钮「立即领取」。未领取时一直显示;当天领取成功后立即消失。关闭积分、签到积分为 0,或未登录时不显示。卡片用白底、黑按钮和青绿积分数字,不套浅蓝舞台底。
### 相关实现
- `web/src/components/layout/workspace-sidebar-checkin.tsx`:侧栏领取卡片。
- `POST /api/wallet/checkin`:每日签到入账,同一天不可重复领取。
## 工作区账号容量
登录后,首页侧栏左下角用户头像上方显示账号文件容量进度:已用容量、剩余容量和总容量,细进度条表示已用比例。用量达到 70% 变为警告色,达到 90% 或已满变为危险色。点击进入素材库;资产页页头仍展示同一用量。收起侧栏时保留细进度条,悬停可看到已用、剩余与总容量。统计包含素材文件和 Agent 会话附件。
### 相关实现
- `web/src/components/layout/workspace-sidebar-storage-meter.tsx`:侧栏容量进度。
- `web/src/pages/assets/asset-storage-usage.tsx`:资产页同一查询。
- `GET /api/resources/storage-usage`:账号已用字节与配额总容量。
## 云端 Agent(写入与生成仍待真实环境验收)
浮窗支持移动、调整大小和浏览器偏好恢复;后端支持逐轮对话、可信历史、取消、Skills 快照、画布摘要/精读、审批后的画布写入及媒体生成。运行中可插话(下一步生效,不打断正在飞的调用);多步任务可用 `plan_update` 维护待办清单并在输入框上方展示,未完成项会催办;`request_approval` 下首次 ≥2 项清单会先确认,`auto` 直接建立。`ask_user` 可弹出选项并结束本轮。个人记忆由 `remember_lesson` 写入待审,用户在「设置 → Agent 记忆」自己批准、添加、导出导入,并可用自己的文本模型手动或按日/周/月压缩相近条目。系统提示只带已批准记忆的索引(标题+适用场景),完整做法由 `recall_lessons` 按 topic/关键词取;管理员可按用户查看和删除,不能代批。只读模式不能写记忆。终态旧轮次按其冻结合同保留为不可变历史,新消息使用当前合同创建新轮,不篡改父运行;旧合同下仍活动或待审批的运行不会被新版服务恢复执行。生成由预算和独立审批控制,画布写入使用内容快照哈希;未开放外部 MCP。系统行为策略以版本化资源发布,用户/项目/画布可编辑常驻偏好;偏好正文固定在运行快照并按层只读,不整段塞入 system prompt,也不能提权或跳过审批。节点创建、更新字段、摘要投影和连线限制来自服务端能力 registry;能力卡同时描述用途、适用场景、不适用场景、维护代价和可用动作,由 Agent 结合镜头数量、连续性、逐镜审查和交接需求自主选择,不强制所有任务使用分镜。分镜脚本支持结构化创建、分页读取及按真实行 ID 追加、修改和删除;普通文本和 Markdown 不会被宣称为具备镜头级维护能力的分镜表。图片、视频和音频节点可安全修改标题与下一版提示词草稿,既有媒体、已提交提示词和任务状态不会被草稿编辑覆盖;媒体模型按生成模式和真实参考节点从统一目录筛选。审批和执行记录明确展示目标节点、类型、修改字段、名称变化及连线两端,前端不再依靠内部 ID 猜测;这些预览不替代服务端归属、快照、Capability、锁、预算与调用哈希校验。真实模型计费与浏览器联调仍待验收。
## 画布智能引用
节点提示词面板提供“智能引用”入口,支持 AutoLink 开关和“一键引用全文”。输入已连接素材的名称、标签或素材栏序号后,按 Tab 或点击光标旁的候选项插入引用;全文引用会批量转换匹配到的指代,没有可转换内容时按钮禁用。
匹配仅覆盖当前已连接且激活的画布素材,跳过技能、素材库条目、重名歧义和已有引用。支持 `图1`、`图片1`、`image1`、`image 1` 及独立序号;普通数字文本如“约2秒”保持原样。AutoLink 默认在节点面板开启,开关为面板临时状态。
## 画布抓手与框选
画布底部主工具栏用一个胶囊开关切换「区域选择」和「抓手工具」。默认是区域选择,空白处拖动框选节点;切到抓手后拖动平移画布。按住空格或中键仍可临时平移,不改变当前工具。
框选多个节点后,悬浮栏默认提供对齐、等距、创建分镜组和批量连接。右键选区或画布空白处可「自适应整理画布」,按当前相对布局加大边距,而不是重排成宫格或媒体泳道。
### 相关实现
- `web/src/lib/canvas/tool-registry/definitions/main-toolbar-tools.tsx`:抓手与框选作为同一开关项注册。
- `web/src/components/ui/aceternity/floating-dock.tsx`:dock 内胶囊开关与圆形滑块。
- `web/src/lib/canvas/tool-registry/definitions/selection-toolbar-tools.tsx`:多选悬浮栏默认工具。
- `web/src/lib/canvas/canvas-layout.ts`:`spreadCanvasNodes` 按相对占位加大边距。
## 图片节点多角度、宫格切分与多选框
图片节点「多角度」使用贴在节点下方的 3D 编辑器(天空盒/摄像头、常用角度、方向箭头),拖动节点或平移画布时面板跟着走。宫格切分放在「图片工具」菜单的「拆分与标记」里,提供 4/9/16/25 预设和 5×5 自定义点选;自定义面板留在菜单内,切分后的子图按网格排开。框选多张图后拖动,虚线选框跟随被选节点。
### 相关实现
- `web/src/components/canvas/canvas-node-angle-dialog.tsx`、`web/src/components/canvas/canvas-angle-scene.tsx`:多角度面板与 3D 预览。
- `web/src/components/canvas/canvas-grid-split-picker.tsx`、`web/src/lib/canvas/canvas-grid-split.ts`:宫格预设、自定义点选与切分子节点布局。
- `web/src/lib/canvas/canvas-selection.ts`、`web/src/lib/canvas/canvas-live-viewport.ts`:多选虚线框随拖动预览平移。
## 系统渠道排序与前台别名
后台系统渠道及渠道模型列表通过“设置排序”打开完整列表,支持拖动、上移和下移,点击“保存排序”统一生效;取消不会修改线上顺序。渠道行的“更多”菜单支持复制渠道,复制会生成独立的渠道、模型和价格档,并保留原连接配置与凭证。界面不显示内部排序数字,排序不受筛选及分页影响;并发修改会提示重新加载,避免覆盖其他管理员的调整。系统渠道模式下,用户端模型选择器沿用同一渠道及模型顺序。模型排序独立保存,不改变价格、能力版本或启用状态。
系统渠道可设置可选的前台别名;为空时显示渠道名,设置后公开目录和用户会话只返回别名,后台仍保留原名。别名最长 80 字,支持后台搜索。前台模型目录模式保留其独立配置。
注册默认每 IP 每小时允许 30 次注册请求、60 次验证码请求,单邮箱每小时另限 10 次且发送后间隔 60 秒。失败尝试也占请求额度,达到上限后的拒绝不会继续增加计数或延长窗口;限流响应携带真实剩余等待时间,注册页面显示倒计时并防止重复提交。已保存的运行策略仍需管理员按实际共用网络规模调整,不随默认值升级自动覆盖。
定时闲置资源清理与后台手动删除共同保护外观配置引用的浅色 Logo、深色 Logo、登录视频及封面;即使资源超过闲置期限也不会删除,外观配置无法读取时停止相关清理。
## 章节资产提取与任务浏览
画布视频支持鼠标悬停 350ms 后静音预览前 3 秒,不循环;全局仅一个悬停解码器,离开或操作画布立即停止并恢复封面。手动播放优先,系统开启减弱动态效果时不自动预览。
剧情章节支持一次提取角色、场景与道具,分别写入角色、环境和道具待确认资产。输出必须包含三类数组;无人章节可以只产生场景或道具,不把缺失字段当作提取成功。
任务详情只读取任务与日志,不因打开详情写入画布。视频任务列表和网格优先展示已有封面;没有封面时,在进入视口后提取首帧缩略图。后台请求明细默认仅显示请求,可切换仅下载或全部明细,导出沿用当前筛选条件。
## 站点及外观
管理员可以在“系统配置 → 站点及外观”统一管理品牌识别、登录页、SEO、首页收尾与备案、皮肤主题。品牌识别包括站点名、英文品牌标识、浅色与深色 Logo 和 Logo 外框;登录页包括主标题、说明、品牌视频和可选封面。Logo 可以只上传任意一套并自动复用,也可以分别适配浅色与深色界面;关闭外框后 Logo 会在原导航占位内等比放大。
前端入口在加载 React 应用之前先读取 `GET /api/public/appearance`。初始 HTML 不包含内置品牌名、Logo 或默认 favicon;只有公开配置成功或明确回退到内置外观后才渲染应用,避免自定义品牌访问时先闪现“影策”。自定义视频未设置封面时保持纯色背景直至视频首帧就绪,不复用内置视频封面。
浅色 Logo、深色 Logo、视频和封面通过后台专用上传接口进入现有资源存储,并由稳定的公开 slot URL 读取;公开响应不暴露资源 ID。正在使用的外观资源会阻止管理员从资源管理页直接删除。英文品牌标识可作为对象存储路径前缀建议,但不会自动覆盖已经保存的前缀或改写历史资源。“恢复影策默认”会恢复内置品牌值、SEO/页脚默认值、经典皮肤和默认 Logo 外框,同时保留已经上传的素材文件。
SEO 标题、描述、可选关键词会投影到浏览器 metadata、Open Graph、Twitter Card 与 canonical;版权信息在公共登录场景页脚显示。ICP备案默认关闭,启用后必须填写备案号,并链接至工信部备案系统。注册验证码与密码重置邮件的标题、正文和继承型发件人名称都会使用当前站点名。
皮肤主题以语义令牌集中管理浅色/深色背景、文字、表面、边界、主色、控件状态、hover/active/focus、图标、圆角、尺寸、动效和阴影。默认“经典黑白”不可修改或删除;“青瓷工作室”“暖柿纸境”“霓光紫境”作为重新校色的可编辑初始数据。每套主题还可独立设置警告色、危险操作常态/悬停/按下/前景,以及开关开/关轨道、悬停和滑块色。管理员可从经典或当前主题完整复制、新建、改名、编辑、启用和删除自定义主题;页面只消费语义变量,不按皮肤 ID 分叉业务组件。
主题卡顶部会按语义使用频次展示该主题浅色与深色令牌的全部去重颜色,宽度不足时保留高频色并截断尾部。颜色编辑器只在直接点击色块时打开系统取色器,点击名称、说明或 HEX 输入不会误触。
### 相关实现
- `backend/internal/service/appearance.go`:外观配置校验、公开投影、资源绑定与媒体类型校验。
- `backend/internal/handler/appearance.go`:公开读取、公开资源流和管理员读写/上传接口。
- `web/src/services/appearance-bootstrap.ts`:应用渲染前的公开外观解析与安全回退。
- `web/src/pages/admin/settings/appearance-settings-page.tsx`:站点及外观、草稿预览与原子保存流程。
- `backend/internal/service/appearance_skins.go`、`web/src/lib/skin-themes.ts`:主题库合同、校验、亮暗语义令牌、CSS Variables 与 Ant Design 组件映射。
- `web/src/components/layout/site-compliance-footer.tsx`:公共版权与ICP备案展示。
## 邮箱找回密码
登录页在密码字段标题行提供“忘记密码?”入口。已配置账户邮件服务时,本地密码账号可以通过绑定邮箱获取 6 位验证码,并在 10 分钟内设置新密码;发送接口对存在和不存在的邮箱返回相同结果,避免公开账号状态。
密码更新、验证码消费和该账号全部旧登录会话撤销在同一个数据库事务内完成。验证码按注册与密码重置用途隔离,不能跨流程复用;Linux.do 单点登录账号继续通过原身份提供方登录,不会由找回流程隐式创建本地密码。
### 相关实现
- `web/src/pages/auth/login.tsx`、`web/src/pages/auth/forgot-password.tsx`:登录入口与两阶段邮箱验证界面。
- `backend/internal/service/password_reset.go`:发送策略、验证码校验和密码重置业务边界。
- `backend/internal/repository/repository.go`:密码更新、验证码消费和登录会话撤销事务。
## 官方提示词模板
平台级 LLM 任务只走后端提示词目录,不在页面里手写整段系统指令。运营可在管理后台维护版本,用户可在设置里跟随、追加或改写创作层;动态上下文和 JSON 输出契约由服务端编译时注入,不能被模板或个人偏好覆盖。
当前操作包括:章节资产提取、分镜规划/修复、分镜首帧、分镜视频、角色卡提取、角色三视图、短剧大纲、技能草稿。短剧一句话生成和技能库 AI 草稿只提交 `promptTemplateOperation` 与变量,占位 prompt 不会成为模型看到的正文。
画布内置预设、反推提示词、工作流起步稿、文本改写包装、视频操作包装和字幕高亮指令属于客户端目录 `web/src/lib/prompts`。云端 Agent 的行为策略在后端版本化 md 资源中,用户常驻偏好可编辑;工具权限和计费规则仍由服务端代码强制执行,不由浏览器或偏好文档覆盖。
### 相关实现
- `backend/internal/service/prompt_template.go`、`prompt_template_defaults.go`:操作定义、编译、受保护契约和结果校验。
- `web/src/lib/prompts/`:前端操作名、客户端起始/包装提示词和短剧大纲解析。
- `web/src/pages/settings/prompt-preferences-pane.tsx`、`web/src/pages/admin/storyboard-prompts/storyboard-prompts-page.tsx`:用户偏好与运营版本。
## AI 提示词优化器
提示词优化器是一个内置 AI 能力插件,用于把模糊的生图或生视频想法整理成可以直接使用的提示词。它复用宿主已经配置的文本模型和渠道,不在浏览器中保存或拼接第三方密钥。
### 使用入口
- 创作页 `/create` 的提示词输入框中,点击“优化”。
- 画布中的图片或视频节点提示词编辑器中,点击“优化”。
面板使用紧凑的聊天式交互,跟随当前输入框定位,支持拖动、边缘调整尺寸和窗口尺寸变化。打开与关闭不使用延迟动效,避免遮挡画布或让用户误以为请求卡住。
### 优化方式
| 方式 | 用途 |
| --- | --- |
| 扩展想法 | 从模糊想法补齐主体、场景、构图、光线、镜头等可执行细节。 |
| 精修已有提示词 | 尽量保留原意,只修正表达并补充必要细节。 |
| 强化风格 | 保留主体和动作,强化色彩、材质、光影与指定风格。 |
| 适配模型 | 按当前生成模型和协议调整提示词结构,避免使用未确认的参数语法。 |
| 结合参考 | 使用已连接的图片或文本补充外观、一致性、构图和关联关系。 |
面板底部可以单独选择优化所使用的文本模型;目标生成模型仍取当前图片或视频生成配置。两者职责不同:前者负责整理提示词,后者负责最终生成内容。
### 结果与安全边界
- 优化结果以结构化内容返回,包含正向提示词、规避项、修改说明、假设和可选备选版本。
- 结果可以继续编辑;只有点击“采用”才会回填当前输入框,并自动关闭面板。
- 请求支持流式反馈、取消和错误提示,不会在优化失败时覆盖原提示词。
- 参考素材只提交当前已连接且符合类型的内容;插件不自行访问素材库或后端密钥。
### 相关实现
- `web/src/lib/plugins/builtin/prompt-optimizer.ts`:插件清单、优化方式和模型适配策略。
- `web/src/components/canvas/canvas-prompt-optimizer-drawer.tsx`:聊天面板、拖动缩放和结果采用交互。
- `web/src/services/plugin-host.ts`:将插件文本请求接入宿主现有模型渠道。
- `web/src/pages/create/index.tsx`、`web/src/components/canvas/canvas-node-prompt-panel.tsx`:两个入口的接入。
## 首页图片预览与画布同款查看器
创作页 `/create` 的生成结果、参考图片和故事板图片,打开后使用与画布图片节点相同的全屏图片查看器。首页不再维护独立的图片缩放和拖拽实现,避免两个入口的交互行为逐渐分叉。
图片查看器支持移动、缩放和关闭,缩放范围为 `0.5` 到 `12`,步进为 `0.25`;视频仍使用创作页原有的视频播放弹窗。该能力只统一图片预览交互,不改变缩略图、媒体资源地址或生成流程。
### 相关实现
- `web/src/components/canvas/canvas-image-preview.tsx`:画布与创作页共用的图片预览组件。
- `web/src/pages/canvas/canvas-project-status-dialogs.tsx`:画布图片节点预览入口。
- `web/src/pages/create/index.tsx`:生成结果、参考图片和故事板图片预览入口。
## 可自定义工作台导航
内置工作台插件将常用创作入口统一交给宿主渲染。用户可以在设置页的“自定义区域”(`/settings?section=workbench`)预览侧边栏,分别控制入口显示状态,并通过拖拽或上下按钮调整同一分组内的顺序;“恢复默认”可以还原初始布局。
布局只属于当前账号在当前浏览器中的界面偏好,按账号 scope 保存在本机浏览器,不会上传素材、密钥或插件代码。功能开关不可用的入口不会展示;工作台入口使用宿主预注册的内部路由,插件不能直接注入工作区脚本。
### 相关实现
- `web/src/lib/workspace-sidebar-layout.ts`:入口清单、分组、布局归一化、排序和账号 scope 存储。
- `web/src/lib/plugins/builtin/workbench.ts`:内置工作台插件 Manifest。
- `web/src/components/layout/workspace-sidebar-nav.tsx`:按功能开关和用户布局渲染侧边栏。
- `web/src/pages/settings/workbench-settings-pane.tsx`:预览、显示切换、排序和恢复默认。
## 用户诊断包导出
设置页的“问题诊断”入口和任务失败快捷入口支持导出脱敏诊断包,帮助普通用户提交问题时保留足够的排障上下文。
### 当前能力
- 浏览器内存中保留最近的全局错误、未处理 Promise、API 请求和任务创建事件。
- 后端按当前登录用户、时间范围、任务或项目聚合 `Task`、`TaskLog` 和 `ApiCallLog`。
- 下载前显示数据量预览,并生成包含清单、运行时信息和 JSONL 日志的 ZIP。
- 默认排除提示词、任务输入、API Key、Cookie、上游请求/响应体和 URL 查询参数。
### 使用入口
- 设置页:`/settings?section=diagnostics`。
- 失败任务详情中的“导出诊断包”按钮会自动带入任务和项目范围。
相关设计和接口边界见[用户诊断包设计](../../../design/user-diagnostic-bundle.mdx)。
## Eagle 外部素材库
内置 Eagle 插件可以从用户配置的 Eagle 服务读取素材、文件夹和标签,并将素材映射为工作台可引用的外部资源。
### 当前能力
- 支持按文件夹、关键词和素材类型查询 Eagle 素材。
- 素材没有文件夹或标签时,仍返回稳定的空集合,工作台可以继续展示和引用素材。
- 保留素材的文件夹路径、标签、扩展名、尺寸、大小和修改时间等排障与展示信息。
### 相关实现
- `backend/internal/service/eagle.go`:Eagle 响应解析和集合字段归一化。
- `web/src/lib/plugins/builtin/eagle.ts`:外部素材映射、预览和引用处理。
## 自由空白画布起点
新建且没有节点的自由画布会显示“从哪里开始”引导。除短剧流水线和 Agent 生成外,用户可以选择“自由空白画布”,在不预设工作流的情况下开始创作。
进入自由空白画布后,画布中央保留一个带加号的起始框。点击加号会打开与底部工具栏相同的添加菜单,可新建文本、绘图、分镜、背板、文件夹、图片、视频、音频和工作流,也可上传文件或打开素材库。插件提供的节点继续由同一命令注册表控制,不维护第二份素材类型清单。
自由起点选择按画布持久化;画布仍为空时刷新页面不会重新回到起始引导。中央起始框只负责提供入口,不创建占位节点。
### 相关实现
- `web/src/components/canvas/canvas-short-drama-entry.tsx`:起始引导、自由空白起始框和中央加号。
- `web/src/components/canvas/use-canvas-create-commands.ts`:工具栏与空白起点共用的添加命令解析。
- `web/src/lib/canvas/canvas-starter.ts`:空画布起点状态决策。
- `web/src/stores/canvas/use-canvas-store.ts`:按画布保存自由起点选择。
## 画布手动保存与强制覆盖
画布左上角菜单提供「保存」与「强制覆盖保存」两个手动入口。「保存」与 ⌘/Ctrl+S 等价:先写入浏览器本地缓存,再触发云端同步;云端失败时保留本地结果并排队自动重试,适合平板等无键盘设备手动落盘。
「强制覆盖保存」用于云端同步反复失败(如提示“画布媒体与素材库记录不一致”)时的显式恢复,操作前有确认弹窗。执行时以本地画布为准覆盖云端版本:先按服务端素材记录校验所有画布媒体节点与时间线片段声明的素材绑定,不一致时重绑到引用同一资源的素材(缺失则按节点新建),再按“素材先于画布”的顺序整体推送;素材远端版本冲突时采纳远端为基线继续用本地覆盖。后端“画布资源必须被其素材记录引用”的不变式保持不变,强制覆盖通过前端对齐绑定完成,不绕过校验。
### 相关实现
- `web/src/services/canvas-asset-repair.ts`:媒体与素材的资源身份归一化、增量自动修复和强制重绑。
- `web/src/services/user-data-sync.ts`:强制覆盖同步入口与素材冲突基线策略。
- `web/src/pages/canvas/use-canvas-project-lifecycle.ts`:手动保存与强制保存流程。
- `web/src/pages/canvas/canvas-project-top-bar.tsx`:菜单入口。
## 画布外观
底部工具栏的“画布外观”面板支持浅色、深色、自定义三种主题,以及点阵、线稿、空白三种网格。浅色画布使用比白色节点更沉的中性雾灰背景,深色画布使用比原深色节点更亮的中性灰背景,让画布底层与内容表面保持稳定区分,同时避免蓝灰背景与黑色工具浮层产生色温割裂。
自定义主题会继承用户进入前的浅色或深色基础界面,并允许在“浅色界面”和“深色界面”之间切换。界面样式复用原项目整套节点、工具浮层、文字、边框和交互状态,不开放这些元素的任意改色;切换界面样式不会覆盖已经选择的画布背景和网格颜色。
自定义主题还允许调整画布背景色、背景明亮度、网格颜色和网格强度。颜色输入支持三位或六位 HEX,可带或不带 `#`;形成合法色码后实时写入当前画布,编辑过程中不会被父级状态覆盖,关闭外观面板也不会撤销。选择新的画布背景色时明亮度自动归零,确保画布首先精确显示输入色;之后仍可沿 OKLCH 亮度轴单独调整。不提供背景透明度,避免画布底色与底层颜色混合后产生偏色。“网格强度”使用 `0%` 最淡、`100%` 最明显的方向,避免“透明度”命名歧义。
自定义外观可以应用到当前画布,也可以保存为当前浏览器、当前账号 scope 下的新建画布默认值。当前画布外观沿用画布项目的既有持久化和同步流程;浏览器默认值不跨设备同步。
### 相关实现
- `web/src/lib/canvas-theme.ts`:浅色、深色画布固定背景与原有节点、浮层 token。
- `web/src/lib/canvas/canvas-appearance.ts`:自定义外观归一化、解析和本机账号默认值。
- `web/src/components/canvas/canvas-toolbar.tsx`:画布外观面板入口。
- `web/src/components/canvas/canvas-appearance-controls.tsx`:主题、颜色、明亮度和网格控件。
- `web/src/components/canvas/infinite-canvas.tsx`:应用主题背景并保持网格渲染参数。
## 画布节点自动整理
画布底部的“自动整理节点”按钮用于快速改善节点排布,适合处理节点散落、间距不一致或流程方向不清晰的画布。
### 使用规则
- 选中了两个或以上节点时,只整理选中的可移动节点;没有选中节点时,整理所有顶层可移动节点。
- 候选节点存在连线时,横向保持从左到右的依赖层级,纵向按文本、图片、视频、音频分泳道;没有连线时,各媒体类型分别使用网格布局,不再把图片与视频混排。
- 锁定节点、容器节点和折叠批次中的隐藏子节点不会被移动。
- 节点位置变化会进入现有画布历史记录,可使用“撤销”恢复整理前的布局,并继续由画布生命周期自动保存。
### 相关实现
- `web/src/components/canvas/canvas-zoom-controls.tsx`:底部视图控制 Dock 与“自动整理节点”入口。
- `web/src/pages/canvas/use-canvas-node-operations.ts`:候选节点筛选、流程/网格布局选择和位置提交。
- `web/src/lib/canvas/canvas-layout.ts`:媒体泳道、拓扑流程、网格、行列排列和对齐算法。
## 积分充值支付插件
积分中心在线充值通过 `yingce.payment/v1` 支付插件接入。宿主只保存订单、加密配置、回调入账和对账;渠道协议由插件包提供。当前官方包包括微信支付 Native、支付宝电脑网站支付和虎皮椒聚合支付,包内同时带有 macOS、Linux、Windows 的 amd64/arm64 可执行文件,宿主启动时按本机系统选择。管理员在插件中心开放插件后,到支付设置填写渠道密钥即可出现在用户积分中心弹窗。扫码区固定白底深色码点;虎皮椒 `url_qrcode` 是现成二维码图片,钱包直接展示,不再二次编码。用户顶栏积分、账户卡片、命令面板、画布余额和 `/wallet` 回跳都打开同一弹窗,不再进入独立钱包页。
### 相关实现
- `plugin-packages/official-payment-xunhupay/`:虎皮椒聚合支付插件包与 RPC 入口。
- `backend/payment-plugins/xunhupay.go`:虎皮椒下单、查单、验签与关单适配。
- `docs/content/docs/plugins/payment-plugin-runtime.mdx`:支付插件运行时协议。
## 剪辑成片(时间线编辑器)
“剪辑成片”是项目详情里的时间线编辑器入口(`/projects/:id/editor`),用于把已就绪的分镜视频编排成一段可播放、可导出的成片。它运行在浏览器本地时间线模型之上,通过后端任务队列完成语音转写与成片导出,编辑器本身不直接触碰原始媒体大文件。
### 使用入口
- 项目详情“制作流程 → 剪辑成片”步骤卡,或地址栏直接访问 `/projects/:id/editor`。
- 编辑器按项目隔离时间线状态;离开后再次进入会恢复该项目的编辑器快照。
### 当前能力
- **轨道与命令**:时间线支持添加、删除、拆分、移动、修剪片段等操作,全部通过统一命令状态机执行并进入 200 层历史记录,可撤销与重做;非法操作整批拒绝,不产生半应用状态。
- **预设面板**:左侧“添加”分类提供 8 个内置片段/字幕插件,按分类分组接入同一插槽注册链,第三方插件可与内置面板共存。
- **权限与执行边界**:命令执行遵循失败关闭(fail-closed)策略,`timeline.command` 权限与全局 `plugins.run` 权限分开控制;未授权插件或命令不会被执行或回显。
- **语音转写(字幕)**:对时间线音视频发起转写任务,转写进度沿任务 SSE 回流,完成后生成字幕轨。
- **成片导出(渲染)**:发起渲染任务,由服务端 ffmpeg 按渲染计划输出成片;渲染成功后在项目概览的“剪辑成片”步骤卡呈现“已输出 N 个成片”,并作为该步骤完成度的判定依据。
- **AI 编辑助手**:可以用自然语言描述剪辑意图,系统将其解析为受支持的命令序列;不超过 3 条命令时直接执行,多于 3 条先给出差异预览,确认后才批量执行。
### 运行环境要求
- 语音转写依赖本地 whisper.cpp 服务(`CANVAS_WHISPER_BASE_URL`),未配置时转写任务明确失败。
- 成片导出依赖服务端 ffmpeg(`CANVAS_FFMPEG_PATH`,留空时在 PATH 中查找)。
- AI 编辑助手需要可用的文本模型渠道。
### 相关实现
- `web/src/pages/projects/detail/editor.tsx`、`web/src/pages/projects/detail.tsx`:编辑器页面与路由入口。
- `web/src/pages/projects/detail/overview.tsx`:制作流程步骤卡与成片完成度展示。
- `web/src/lib/timeline/`:时间线命令状态机、历史记录、命令 schema 与摘要(`editor-commands.ts`、`editor-history.ts`、`ai-command-schema.ts`、`timeline-summary.ts`)。
- `web/src/stores/editor/editor-store.ts`:编辑器状态与快照持久化。
- `web/src/lib/plugins/editor-slot-registry.ts`、`web/src/lib/plugins/builtin/editor/`:插槽注册链与内置预设插件。
- `web/src/lib/plugins/plugin-permission-check.ts`:命令执行权限与失败关闭策略。
- `web/src/services/api/timeline-tasks.ts`:转写与渲染任务客户端。
- `backend/internal/service/task_timeline.go`、`task_render.go`、`timeline_render_plan.go`、`transcription_whisper.go`:后端转写、渲染与渲染计划任务。
- `backend/internal/repository/project_workbench_read.go`:项目概览指标聚合(含成片完成度计数)。