产品概览

功能清单

当前项目已实现的核心工作台能力与使用入口

媒体导入与预览

视频导入不要求浏览器先解码成功,H.265 原文件也可直接保存到画布。能够读取的尺寸会在上传完成后补齐。画布优先直接播放原视频,无法解码时按需准备 H.264 预览,显示进度并复用已完成的预览;下载和素材引用仍保留原视频。预览处理失败时可以重新加载。在「问题诊断」中可以清理已完成的预览缓存,下次播放时按需重新准备。

Windows 安装包自带视频处理工具,无需另外安装 FFmpeg。预览转换一次只处理一个视频,并限制线程数和预览分辨率,避免同时转换多个素材占满电脑资源。

图片缓存读取失败时会重新下载资源;图片加载失败会显示「重新加载」,可以直接重试。普通鼠标滚轮以鼠标位置为中心缩放,触控板滚动和水平滚动保留平移行为。

接入自己的模型服务

在设置的「模型服务」中添加 OpenAI、Google Gemini、火山方舟或兼容服务,填写地址与 API Key 后读取模型目录。可以搜索、按用途筛选,也可以手动添加服务商提供的模型 ID。只有保存后才启用服务,取消不会留下未完成的服务。

每个模型可配置用途、协议与参数。重新读取目录保留已选模型和手动配置;目录里出现模型不等于已验证可生成。模型测试会提示供应商费用,并等待任务完成后显示结果,产物可在任务中心查看。连接或模型设置变化后需要重新测试。

工作区账号容量

登录后,首页侧栏左下角用户头像上方显示账号文件容量进度:左侧硬盘图标,右侧已用容量与总容量,进度条旁显示剩余容量。用量达到 70% 变为警告色,达到 90% 或已满变为危险色。点击进入素材库;资产页页头仍展示同一用量。收起侧栏时保留图标和细进度条,悬停可看到已用、剩余与总容量。统计包含素材文件和创作会话附件。

相关实现

  • web/src/components/layout/workspace-sidebar-storage-meter.tsx:侧栏容量进度。
  • web/src/pages/assets/asset-storage-usage.tsx:资产页同一查询。
  • GET /api/resources/storage-usage:账号已用字节与配额总容量。

BeefTV Agent:创作助手

创作助手围绕当前画布与参考素材,协助准备分镜、整理素材和生成方案。用户确认方案后,可继续推进素材生成、结果检查、剪辑与导出,交付成片和可编辑工程;结果仍可继续编辑。

在画布中打开创作助手,描述目标并查看方案,再确认开始制作。生成需要配置可用的模型渠道;影音检查需要支持的多模态模型,未配置时会提示无法完成的检查。模型可能漏报剪点或写错同音词,字幕、画面和局部文字排版仍需人工核对。

模型返回可读的思考内容时,助手会在回复上方显示一段默认折叠的「思考过程」,由用户决定是否展开;展开状态只影响当前查看,不改变回复内容。思考内容由模型提供,只作为参考,不是执行回执或授权;模型没有返回可读思考时,面板显示工具进度和正文,不额外生成内容。

从一句创意到两个可编辑分镜的操作过程,见创作与复用案例。除内置助手外,也可在侧栏「BeefTV MCP」页生成连接配置,将 Codex、Claude Code、Claude Desktop、Cursor 等外部 Agent 接入当前工作区(见外部 Agent 接入)。

Skills:创作技能

技能为创作助手提供特定任务的方法、步骤与要求。通过侧栏或画布助手的「技能」入口,浏览市场、查看使用条件与文件,确认后安装指定版本。安装不等于已具备执行条件,实际使用仍需满足技能要求。

「我的技能」支持查看文件、启用或停用、检查更新、回退到已安装的历史版本,以及复制为私人改写。文字技能不需要多模态模型;涉及媒体生成或理解的技能,需要相应的模型能力。

作者可在客户端准备技能投稿并继续草稿。准备阶段只保存在本机;上传私有草稿与提交公开审核需要分别确认。

画布保存保护与版本记录

旧页面或旧缓存不能覆盖云端新内容。每次内容保存核对服务端版本,发生冲突会停止该画布自动提交并保留本地草稿;平移、缩放和打开画布不触发整份内容保存。画布顶部显示保存状态,可保留草稿后加载云端最新版。

「版本记录」在桌面右侧按日期展开历史树,小屏使用抽屉。点击版本进入独立只读预览,可以缩放查看或下载;返回当前画布后继续编辑。恢复历史会先保存本地草稿、备份当前云端内容,再创建一个新版本。历史只保存画布结构和媒体引用,不复制视频文件;普通快照最短间隔 5 分钟,每个画布保留最近 20 份,因此每次递增的版本号不一定都有快照。历史引用的媒体受到删除保护。本地绘图笔画不在云端历史中,草稿和历史导出不混入当前笔画。

此功能不提供多人实时协同或自动合并两个浏览器的完整画布;版本保护用于阻止静默覆盖。历史从升级后开始积累。

右侧版本记录与独立只读画布预览(示例数据)

画布智能引用

节点提示词面板提供“智能引用”入口,支持 AutoLink 开关和“一键引用全文”。输入已连接素材的名称、标签或素材栏序号后,按 Tab 或点击光标旁的候选项插入引用;全文引用会批量转换匹配到的指代,没有可转换内容时按钮禁用。

匹配仅覆盖当前已连接且激活的画布素材,跳过技能、素材库条目、重名歧义和已有引用。支持 图1、图片1、image1、image 1 及独立序号;普通数字文本如“约2秒”保持原样。AutoLink 默认在节点面板开启,开关为面板临时状态。

AI 超分处理节点

从添加菜单创建「AI超分」,或点击图片、视频顶部的「AI超分」快速创建并连接处理节点。左侧可连接多个图片和视频;节点下方直接配置渠道、倍率、图片及视频模型,不需要提示词。每个输入会生成一个右侧结果节点,已连接的空图片/视频结果节点优先复用,原素材保留。多个处理节点可保存不同配置。

「开始批量超分」先校验素材、冻结本批参数并保存任务编号,再提交云端。运行中修改配置或输入只影响下一批;刷新后可继续查询原批次。已提交或状态未知的项不会自动重新推理;预检失败且尚未提交的项可在其他项结束后重试。失败结果通过「取回原结果」恢复,不能误走普通生图。视频最长五分钟,图片支持PNG/JPEG/WebP,视频支持MP4/MOV。提交时按预估金额先扣费用,账单核对完成后按实际用量结算,多扣的退回;节点上看到的金额是这次先扣的总额,不是每个素材的单价。

批量创作表

批量创作表保留当前画布样式:顶栏拖动整表,表内控件不会打开“放入创作空间”遮罩。支持全局提示词覆盖各任务行、空槽点击/拖入上传、已有缩略图点击替换、参考图列拖拽重排,以及缩略图跨行跨列交换。连线到参考端口后会自动刷新任务行,“同步连线”仍可手动增量同步。全局提示词可手动编辑;批量创作表的读取结果会带上 globalPrompt 和按全局提示词计算的 generationPreview。

提示词放大编辑

图片和视频节点的提示词面板支持放大编辑:窗口默认约 min(1200px, 92vw),编辑区最小高度 200px,右下角可对角拖拽,方向键可微调。切换节点后尺寸恢复默认,节点上的紧凑面板外观不变。

画布抓手与框选

画布底部主工具栏用一个胶囊开关切换「区域选择」和「抓手工具」。默认是区域选择,空白处拖动框选节点;切到抓手后拖动平移画布。按住空格或中键仍可临时平移,不改变当前工具。

框选多个节点后,悬浮栏默认提供对齐、等距、创建分镜组和批量连接。右键选区或画布空白处可「自适应整理画布」,按当前相对布局加大边距,而不是重排成宫格或媒体泳道。

相关实现

  • 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:多选虚线框随拖动预览平移。

章节资产提取与任务浏览

画布视频支持鼠标悬停 350ms 后静音预览前 3 秒,不循环;全局仅一个悬停解码器,离开或操作画布立即停止并恢复封面。手动播放优先,系统开启减弱动态效果时不自动预览。

剧情章节支持一次提取角色、场景与道具,分别写入角色、环境和道具待确认资产。输出必须包含三类数组;无人章节可以只产生场景或道具,不把缺失字段当作提取成功。

任务详情只读取任务与日志,不因打开详情写入画布。视频任务列表和网格优先展示已有封面;没有封面时,在进入视口后提取首帧缩略图。

启动外观

前端在加载 React 应用之前先读取 GET /api/public/appearance。公开配置读取成功,或明确回退到内置外观后,才渲染应用,避免自定义品牌访问时先闪现内置名称。公开响应只投影品牌、登录页文案、稳定 slot 资源地址和 Logo 外框等公开字段,不返回内部资源 ID;资源通过 GET /api/public/appearance/assets/:slot 读取。

相关实现

  • web/src/services/appearance-bootstrap.ts:应用渲染前的公开外观解析与安全回退。
  • backend/internal/handler/appearance.go:公开读取与公开资源流。
  • backend/internal/appearance/:外观配置投影与资源可用性判断。

官方提示词模板

平台级 LLM 任务只走后端提示词目录,不在页面里手写整段系统指令。用户可在设置里跟随、追加或改写创作层;动态上下文和 JSON 输出契约由服务端编译时注入,不能被模板或个人偏好覆盖。

当前操作包括:章节资产提取、分镜规划/修复、分镜首帧、分镜视频、角色卡提取、角色三视图、短剧大纲、技能草稿。短剧一句话生成和技能库 AI 草稿只提交 promptTemplateOperation 与变量,占位 prompt 不会成为模型看到的正文。

画布内置预设、反推提示词、工作流起步稿、文本改写包装、视频操作包装和字幕高亮指令属于客户端目录 web/src/lib/prompts。旧内置 Agent 的后端版本化行为策略资源随该功能一并退场。

相关实现

  • backend/internal/prompts/prompt_template.go、prompt_template_defaults.go:操作定义、编译、受保护契约和结果校验。
  • web/src/lib/prompts/:前端操作名、客户端起始/包装提示词和短剧大纲解析。
  • web/src/pages/settings/prompt-preferences-pane.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:生成结果、参考图片和故事板图片预览入口。

用户诊断包导出

设置页的“问题诊断”入口和任务失败快捷入口支持导出脱敏诊断包,帮助普通用户提交问题时保留足够的排障上下文。

当前能力

  • 按账号保存最近 24 小时的全局错误、未处理 Promise、API 请求、任务创建和视频播放事件,最多 500 条、512 KiB;重开应用后仍可导出,优先保留关键记录。
  • 后端按当前登录用户、时间范围、任务或项目聚合 Task、TaskLog 和 ApiCallLog。时间范围按真实时刻比较,本地时区写入的记录不会被时区偏移漏掉;在窗口内仍在运行或失败的任务也会导出。
  • 下载前显示数据量预览,并生成包含清单、运行时信息、模型配置摘要和 JSONL 日志的 ZIP。
  • 生成任务的原目标节点、稳定提交编号和画布当前关联一同导出;结果绑定失败时另记实际拒绝绑定的节点状态,不包含节点正文或媒体地址。当前画布采样与失败时记录分别标明,未采集的历史不会补造。
  • 诊断包包含有界的本地追踪、助手轮次、模型与工具元数据,以及生成素材文件检查。各来源说明是否完整、过期、读取失败或达到上限;历史没有采集的信息保持缺失。
  • “复制排查信息”包含版本和已知关联 ID;离线工具可只凭 ZIP 区分已有证据确认的故障阶段与仍缺的信息。详见 任务诊断。
  • 画布备份显示读取文件、打包和保存进度;准备期间可取消,缺文件时保留明确错误。桌面端选择保存位置后,直接将所属本机素材写入 ZIP,支持超过 32 MB 的媒体;不在工作区额外保存整份备份,取消文件选择不会产生备份。浏览器本地附加数据仍有 32 MB 的传输限制。
  • 模型配置摘要只保留渠道名称、接口类型、作用范围、启用状态、基础地址域名、模型数量,以及每个模型的能力与协议。
  • 模型设置页记录默认模型下拉的点击、展开、弹层位置与是否被遮挡,以及删除渠道的确认与结果,便于定位“下拉打不开”“删除没反应”。只记录数量、耗时和界面元素类型,不记录模型密钥或地址。
  • 默认排除提示词、任务输入、API Key、Cookie、密钥、请求头、完整 URL、URL 查询参数和上游请求/响应体。

使用入口

  • 设置页:/settings?section=diagnostics。
  • 失败任务详情中的“导出诊断包”按钮会自动带入任务和项目范围。

Eagle 外部素材库

内置 Eagle 插件可以从用户配置的 Eagle 服务读取素材、文件夹和标签,并将素材映射为工作台可引用的外部资源。

当前能力

  • 支持按文件夹、关键词和素材类型查询 Eagle 素材。
  • 素材没有文件夹或标签时,仍返回稳定的空集合,工作台可以继续展示和引用素材。
  • 保留素材的文件夹路径、标签、扩展名、尺寸、大小和修改时间等排障与展示信息。

相关实现

  • backend/internal/eagle/:Eagle 客户端、响应解析与路径处理。
  • web/src/lib/plugins/builtin/eagle.ts:外部素材映射、预览和引用处理。

自由空白画布起点

新建且没有节点的自由画布会显示“从哪里开始”引导。除短剧流水线外,用户可以选择“自由空白画布”,在不预设工作流的情况下开始创作。

进入自由空白画布后,画布中央保留一个带加号的起始框。点击加号会打开与底部工具栏相同的添加菜单,可新建文本、绘图、分镜、背板、文件夹、图片、视频、音频和工作流,也可上传文件或打开素材库。插件提供的节点继续由同一命令注册表控制,不维护第二份素材类型清单。

自由起点选择按画布持久化;画布仍为空时刷新页面不会重新回到起始引导。中央起始框只负责提供入口,不创建占位节点。

相关实现

  • 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:按画布保存自由起点选择。

将画布节点保存为可复用工作流

编辑器左侧分为「输入节点」「处理节点」「生成节点」;处理节点保持在输入节点下方。输入和生成均按图片、视频、音频、文本分类。生成节点可以直接创建并选择模型、填写提示词,不必先在画布运行一次;原有从画布导入已成功步骤的入口仍可使用。

先手动跑通节点,在画布中框选相关节点,点击选择工具栏的「保存为工作流」。封装界面允许为每个槽位命名,将素材和文本设为每次替换的输入、固定内容或重新执行的步骤,并指定输出节点。

画布右上角「工作流」用于管理模板。点击「添加到画布」会创建独立的节点组:带加号的空白输入、固定素材、执行步骤和运行控制。人物参考、动作参考、深度参考等用途可以通过节点名称标注;输入支持上传、从画布选择或拖入同类型素材,来源节点保留原位置。运行在画布中开始、停止或重试,执行节点显示进度并直接预览结果,无需再从侧栏添加结果。

工作流容器使用 reusable-workflow,运行控制使用 workflow-control,不复用生成配置类型,也不挂载通用图片/视频提示词面板。进度区置于标题下方,与容器内容等宽;旧实例打开时保留节点 ID、运行回执和素材绑定并升级类型与布局。

模板卡片的「编辑」打开独立「工作流设定」弹窗,左侧添加节点,中间编辑位置与端口连线,右侧修改内容、参数和最终输出;支持删除节点、撤销与重做。也可通过「新建工作流」从空白开始。视频生成与裁剪、拼接、深度处理均为可选步骤,纯本地裁剪流程无需生成模型。生成步骤从画布已成功任务导入;可选择当前启用的同类型模型与渠道,视频清晰度和尺寸比例随模型能力提供。保存时校验参数及参考类型,执行时再校验当前素材;原视频和深度结果均作为独立参考计入模型的参考视频总时长。错误会列出所用模型和参考视频来源。

编辑器与画布实例复用工作流卡片组件、媒体图标和画布主题。标题放在卡片外并保持屏幕字号,卡片内部呈现输入、参考连接、处理参数和输出,不显示运行时的上传加号。参考连线接入各自端口,旧编辑布局按新卡片尺寸重新排布,保存后保留新位置。

提取时默认使用「图片输入」「视频输入」「深度提取」等通用节点名称,连线也使用通用名称;编辑图不加载原素材缩略图。框外媒体引用默认成为可替换输入。原素材只在首次编译时用于准确定位模型参考槽位,公共可替换槽位和处理输出清除原素材 ID;提示词与处理参数保留。旧模板打开编辑时转换展示,新版本保存该规则,已有画布实例仍按其固定版本运行。

「处理节点」从画布节点、图片工具和工具栏注册信息汇总,不另写一份固定按钮清单。可自动执行的能力直接添加并调整参数;模型能力选择已成功配方;人工编辑和尚无可恢复适配器的能力明确说明边界,并可返回画布处理。当前本地适配器包括图片裁切、尺寸调整、视频画面裁切、截帧、音频提取、视频剪辑、拼接和深度处理。宫格多结果等尚无适配器的能力不会伪装成可自动运行。

画布新执行的图片裁切、尺寸调整与视频画面裁切保留明确操作参数;已有截帧、剪辑和拼接元数据也可转换成处理步骤。缺失历史参数的旧结果仍作为素材,不从画面猜测原操作。新增本地媒体任务复用任务队列、资源归属、配额、取消与产物恢复;模型调用不参与这些确定性处理。

保存只更新模板版本。画布实例显示固定版本,点击「更新实例」查看变更并确认后才升级;兼容的输入保留,旧结果与运行回执清空,画布撤销可还原升级前的实例。缺失输入、端口类型不匹配和循环会阻止保存,保存失败保留草稿。

后端保存模板和运行状态,按依赖调用现有生成任务;切换选中节点或关闭模板库不终止运行。实例的输入与运行标识随画布保存;重新打开后继续同步结果,后端保留运行历史。模板保留原模型、参数和素材槽位,运行时读取当前渠道凭据。文本、图片、视频、音频与深度处理是首期支持范围;不支持的节点、缺失来源、环和多输出来源会给出明确提示。

成功生成任务在完成清理前保留私有加密配方。升级前已清理完整参数的历史任务需要手动重新运行一次,再封装成功流程;系统不会从历史预览猜测生成参数。模型调用仍可能产生原渠道费用。

相关实现

  • web/src/lib/canvas/reusable-workflow.ts:画布选择转换、输入与输出依赖整理。
  • web/src/pages/canvas/canvas-workflow-workspace.tsx:封装与模板库入口。
  • web/src/lib/canvas/reusable-workflow-instance.ts:独立画布图、用途标签与输入绑定。
  • web/src/pages/canvas/use-canvas-workflow-instances.ts:实例提交、恢复和结果回填。
  • web/src/components/canvas/nodes/reusable-workflow-node.tsx:输入槽位、媒体预览与画布运行控件。
  • backend/internal/app/canvas_workflow*.go:配方编译、来源保留和持久运行。
  • backend/internal/canvasworkflow/:定义校验与依赖顺序。

画布手动保存与强制覆盖

画布左上角菜单提供「保存」与「强制覆盖保存」两个手动入口。「保存」与 ⌘/Ctrl+S 等价:先写入浏览器本地缓存,再触发云端同步;云端失败时保留本地结果并排队自动重试,适合平板等无键盘设备手动落盘。

「强制覆盖保存」用于云端同步反复失败(如提示“画布媒体与素材库记录不一致”)时的显式恢复,操作前有确认弹窗。执行时以本地画布为准覆盖云端版本:先按服务端素材记录校验所有画布媒体节点与时间线片段声明的素材绑定,不一致时重绑到引用同一资源的素材(缺失则按节点新建),再按“素材先于画布”的顺序整体推送;素材远端版本冲突时采纳远端为基线继续用本地覆盖。后端“画布资源必须被其素材记录引用”的不变式保持不变,强制覆盖通过前端对齐绑定完成,不绕过校验。

相关实现

  • web/src/services/canvas-asset-repair.ts:媒体与素材的资源身份归一化、增量自动修复和强制重绑。
  • web/src/services/local-workspace-sync.ts:强制覆盖同步入口(forceOverwriteRemoteCanvasSync)与素材冲突基线策略。
  • web/src/pages/canvas/use-canvas-project-lifecycle.ts:手动保存与强制保存流程。
  • web/src/pages/canvas/canvas-project-top-bar.tsx:菜单入口。

画布外观

工作区侧栏底部可切换浅色或深色模式,选择会在本机保留。画布默认“跟随全局”,随工作区当前主题更新;选择浅色、深色或自定义时,则单独保存该画布的外观。已有明确外观设置的画布保留原设置,可手动改为“跟随全局”。新建画布优先使用已保存的默认外观,没有默认值时使用“跟随全局”;没有外观记录的旧画布也默认跟随全局。

底部工具栏的“画布外观”面板支持跟随全局、浅色、深色、自定义四种主题,以及点阵、线稿、空白三种网格。四种主题均可“保存为默认”,供后续新建画布使用。浅色画布使用比白色节点更沉的中性雾灰背景,深色画布使用比原深色节点更亮的中性灰背景,让画布底层与内容表面保持稳定区分,同时避免蓝灰背景与黑色工具浮层产生色温割裂。

首次进入自定义主题会继承当前浅色或深色基础界面;临时切换到固定主题后再返回自定义,会恢复之前的自定义颜色。界面样式沿用 BeefTV 的节点、工具浮层、文字、边框和交互状态,不开放这些元素的任意改色。

自定义主题还允许调整画布背景色、背景明亮度、网格颜色和网格强度。颜色输入支持三位或六位 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:媒体泳道、拓扑流程、网格、行列排列和对齐算法。

剪辑成片(时间线编辑器)

“剪辑成片”是项目详情里的时间线编辑器入口(/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。Windows 应用优先使用随包工具;开发或自部署环境可通过 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/editing:语义渲染计划编译。
  • backend/internal/task:本机转写/渲染/深度捕捉准入。backend/internal/app/task_timeline.go、backend/internal/app/task_render.go:领取后的转写与 native 渲染执行。
  • backend/internal/repository/project_workbench_read.go:项目概览指标聚合(含成片完成度计数)。

本页内容