本文件记录 OpenTake 的重要改动。格式参考 Keep a Changelog。
状态:draft · 阶段:partial-implementation。当前版本清单已切到 Beta 6,尚未发布。范围核对起点:
aae0ae6..33ee8e2(74 个提交);后续源码修复及门槛以候选说明和活动计划为准。
- 多素材预览 tab 与旧布局状态归一;文件夹、平铺、分组媒体视图;原生文件导入对话框修复。
- temporal compositor 播放路由、倒放发布流重置、时间控制和 Lottie 原生时间线播放;不支持或缺失素材组合显式拒绝。
- 透明 Motion 发布/再次编辑保留 alpha;ProRes 4444 透明导出。
- 范围选择、按选区分割/播放头修剪、链接移动与 Option 修剪一致性。
- 导出失败清理、取消传播与输出身份检查;镜像刷新后约束播放头范围。
- 文本面板接入添加文字;特效面板向单个选中视觉片段追加预设,保留链接视频既有特效。Sticker 本地图片/Lottie 展示、导入、预览、拖拽/落轨与工程身份隔离已实现,待新包原生验收。
- 文档入口、三语 README、模块路由和历史状态同步,新增无依赖本地 Markdown 链接审计。
功能接线不等于本候选 GUI/安装包已验收。语义搜索模型分发仍在修复验证中;Web 全量重跑、Clippy 与依赖审计修复由主任务记录。本文不声明整仓检查通过或跨平台已验证发行。
- 新增显式配对、钥匙串凭据、重启保留与按客户端撤销/重新生成的外部 MCP 连接;固定回环端点继续执行 Bearer、Host、Origin、请求边界与工程身份校验。
- 新增独立 Motion Studio 一级入口,支持受限 HTML/CSS 编辑、CodeMirror、确定性 Chromium 逐帧预览、FFmpeg 发布、工程内文档持久化、发布进度和 Agent 哈希安全协作。
- Agent 对话改为权威有序内容块;文本、tool use 和 tool result 在同一无边框回复内按真实 provider 顺序连续呈现,清空时间线返回真实 PNG。
- 外观设置移除未生效的深浅切换与勾号抖动,保留深色标准/紧凑密度;模型清理说明和所有 disclosure 使用统一进入/退出动画与焦点恢复。
- 素材库 Home 入口移动到左侧分类栏顶部;Home 移除 AI 生成记录,项目卡改为 16:9 真实封面或包含项目名、画布比例与轨道结构的占位。
- macOS 原生交通灯与 38px TitleBar 的左/右 26px 图标控件使用同一垂直中心。
- 外部 MCP catalog、凭据 generation、listener 生命周期、last-used 持久化与 session/request 取消均采用 fail-closed 事务和明确的 shutdown barrier。
- Agent sequence 重放、history resync、Motion revision conflict、项目切换、Save As、发布取消与媒体持久化均绑定权威工程身份,防止迟到结果跨项目提交或覆盖本地编辑。
- Motion HTML/CSS 禁止网络与活动脚本,预览/发布有文档、图片、帧数、尺寸和结果总量边界;新增 CodeMirror MIT 许可证 inventory 门禁。
- macOS 候选包仍为 ad-hoc 签名且未公证;Windows 安装器仍未使用 Authenticode。平台安装与升级证据必须来自候选 exact-SHA CI/实机,不能由 macOS 或浏览器 fallback 替代。
- 以下为 Beta 5 发布时的范围与边界;Beta 5 已发布,其历史验收不替代 Beta 6 候选门槛。
时间与转场持久化、导出一致性、签名更新流程和 Windows tract 安全升级。具体发布范围与证据见 Beta 4 历史说明。
全局空格播放/暂停、原生 HEVC 素材预览和发布流水线修复。具体发布范围与证据见 Beta 3 历史说明。
- ChatGPT 的 AI 登录新增官方 Codex CLI 直接登录;登录、退出和状态完全交由官方 CLI 管理, OpenTake 不读取、复制或保存 ChatGPT 凭据。
- 素材放置、复制/移动到新轨和完整片段粘贴改为单一 Rust 事务,支持根/嵌套序列、链接音视频、 字幕组、转场、文本与 compound 字段的身份重映射和一次撤销。
- 播放头多选/链接片段分割和画布 Transform 写入新增原子命令;整批预检后只产生一次版本推进和 一次撤销,动画 Transform 在当前帧写入关键帧。
- 修复跨工程、另存为、序列切换和外部版本推进期间的迟到媒体/AI 结果、队列串扰与未处理 Promise;失败保持原状态并显示可见错误。
- 修复极端帧值、trim、ripple、split、nested sequence 和 script 组装可能触发的整数溢出、 部分写入或 ID 消耗;Rust 与浏览器 fallback 现在均先完整预检再原子提交。
- 保持 Home / Library / Editor mounted state 与滚动位置,补齐弹窗焦点圈、24px 有效命中区、 小窗口分栏和 reduced-motion 行为。
- 修复预览逐帧在片段边界回跳、非零起点音量关键帧坐标、末端关键帧拖动、razor 边界拒绝、 片段外动画字段误写,以及 Inspector/字幕控件缺少上下文可访问名称。
- 官方 Codex 每轮使用独立、工程绑定、带 256-bit Bearer 的临时 loopback MCP;切工程、取消、 deadline 和进程树清理均 fail closed。未认证的固定端口外部 MCP 在本 Beta 默认关闭。
- 导入路径使用 retained capability、no-follow/reparse 检查、目录预算、可取消 ffprobe;远程 URL 拒绝内网/环回/保留地址、逐跳重解析并固定 DNS 结果,禁用代理绕过。
- Agent 所有模型可见结果改为白名单 DTO;本机路径、签名 URL、provider request ID、prompt、 hash 与底层诊断不会进入 MCP 返回或工程聊天记录。
- macOS 包仍为本地 ad-hoc Beta,不是 Developer ID 签名/公证分发包。
- Windows Job Object、reparse-point 与安装器运行测试由候选提交的 exact-SHA Windows CI 执行; macOS 本机结果不能替代真实 Windows 证据。
- Claude、Cursor 等外部 MCP 客户端连接等待后续带身份验证的显式配对流程;官方 Codex / ChatGPT 登录使用独立的逐轮认证通道,不受影响。
OpenTake 的第一个可安装 Beta。核心闭环为:创建/打开工程 → 导入与管理素材 → 多轨剪辑、字幕、关键帧、特效/蒙版/调色/转场 → 本地 AI 与生成式 AI 审阅工作流 → 预览、保存重开、H.264/H.265/ProRes 与字幕/交换格式导出。
- 可恢复的工程持久化、全局素材库、缩略图/波形/代理媒体、缺失素材重链接。
- Rust/WGPU 预览与导出共享合成路径,支持文本、调色、绿幕、蒙版、LUT、HSL、 Lift/Gamma/Gain、通用特效、交叉溶解、嵌套时间线、补帧与防抖。
- Agent/MCP 编辑、内置聊天、官方 Codex CLI / ChatGPT 登录、BYOK 生成作业、Motion Canvas 动效与原生 Chromium fallback。Codex 登录态完全由官方 CLI 管理,OpenTake 不读取或保存令牌。
- 本地口播清理、响度统一、降噪、声部分离、RVM 抠像、智能擦除、参考色彩匹配和 可视化运动追踪;字幕翻译、图文成片、数字人与音色克隆提供审阅/同意/成本边界。
- 完整键盘、焦点、菜单、拖拽、撤销/重做与辅助功能回归门禁。
- 生产 CSP、最小 asset scope、凭据 keychain 边界、URL/重定向/大小限制、下载校验与 项目修订原子提交。
- macOS/Linux/Windows 安全文件系统契约、打包 FFmpeg sidecar 供应链校验、取消与失败 清理、生成/导出恢复与防陈旧结果提交。
- 本地 macOS Beta 包未使用 Developer ID 签名或 Apple 公证;首次打开需要用户明确允许。
- 数字人、音色克隆和通用云生成需要用户自己的 provider key,并可能产生第三方费用; Agent 可选择 provider key,也可复用官方 Codex CLI 的 ChatGPT 登录。无可用登录或 key 时 功能会显式不可用或拒绝,不会静默调用。
- Windows 安装包由精确 SHA CI 构建和验证;原生 Windows WebView 的最终人工交互烟测仍是 平台发布门槛,不影响本次 Apple Silicon macOS 本地 Beta。
- 任意 Motion Canvas TSX、透明动效、神经语义级任意人声分离等属于后续 Beta 范围。
本节及后续“未完成”表记录当时的开发现场,不代表 Beta 2 的当前阻断项。
本轮为自动 PR 审核流程:逐 PR 专家审核 + 对抗验证 + 对照开发文档,审核通过且 CI 双绿的纯新增项合并,其余 @作者 rebase/修改。
- 全局可复用素材库后端(#37):
- #37-A / #54(PR #104)后端存储层
crates/opentake-media/src/library.rs:copy-on-favorite + SHA-256 内容寻址去重 + JSON manifest 原子写(.tmprename)+ Mutex 并发安全。9 个单测。 - #37-B / #55(PR #106)Tauri 命令层
src-tauri/src/library.rs:7 个命令library_list/favorite/unfavorite/categorize/rename/delete/import_to_project。 - #37-C / #56(PR #115)前端
web/src/components/media/LibraryView.tsx+libraryStore/libraryApi:分类树(视频/音频/音效/图片/特效/自建)+ 网格 + 搜索 + 排序 + 跨视图聚合 + 音效库;Home/TitleBar 入口;前端↔后端 7 命令契约已核实。#37 epic 收口(后端 #104/#106 + 前端 #115)。 - 上游 palmier-pro 无此模块,#37 为 OpenTake 新增子系统,不要求 1:1。剩:库→时间线拖拽(现用「导入当前项目」按钮)、媒体面板「星标→library_favorite」接线、收藏从 localStorage 迁后端。
- #37-A / #54(PR #104)后端存储层
- 文本工具 MVP(#96,PR #107):Toolbar
T按钮接线addTextClip()、新增TextTab.tsx文字内容编辑、Inspector 路由 text tab。字体/字号/颜色等textStyle留后续(依赖后端 ClipProperties 扩展)。 - SRT/VTT 字幕导出纯逻辑(#29 D 层切片,PR #110):
crates/opentake-domain/src/subtitle_export.rs把按caption_group_id分组的字幕 clip 序列化为 SubRip/WebVTT 字符串(零 IO、零新依赖、16 单测)。导出层/agent 工具/前端对话框留后续切片。 - 整条时间线视频导出编排(Phase 5 spine,PR #112):
src-tauri/src/export.rs+export_video命令,逐帧Compositor::render_to_rgba→VideoEncoder::push_frame→finish,全分辨率 H.264/.mp4(H.265/ProRes/进度取消留后续)。含 ffmpeg/GPU 门控集成测试。自包含复制 preview 路径,未碰composite_frame。 - 导出线性音频混音(Phase 5,PR #117):
crates/opentake-media/src/encode/mix.rs逐 clip 单声道 PCM 按帧偏移铺放 +volume_at增益包络 + 叠加 + 硬限幅;VideoEncoder::finish()第二趟 ffmpeg mux AAC(-c:v copy/-shortest,mux 失败回退视频-only),真接通原 deadpush_audio;含 AAC 轨 + 视频-only 不漏音轨 + 临时件清理集成测试。无音频时仍产出与 #112 相同视频-only 文件。 list_models工具接线(#9/#10 切片,PR #111):opentake-agent从存根接opentake-gen内置静态 catalog,?type=过滤 +{ models, loaded }JSON,纯本地无网络/BYOK。- caption-group 样式批量同步纯逻辑(#29 切片,PR #113):
crates/opentake-domain/src/caption_sync.rs把某text_style批量套到同一caption_group_id的所有字幕 clip(不可变 / 跨组隔离 / legacy 安全,12 单测)。接 UI/命令留后续。 - 关键帧编辑(#95,PR #119):后端 4 个细粒度 EditCommand(
StampKeyframe/RemoveKeyframe/MoveKeyframe/SetKeyframeInterpolation,clip 相对帧 + 半开区间校验 + move 占用/越界守卫,12 单测)+ 前端 InspectorKeyframesPanel/KeyframesLaneRow菱形可拖编辑(每属性一行、拖动/删除/盖章/改插值)。确立关键帧『后端命令』路线(优于纯前端 read-modify-write,更接近上游 1:1 + 走真命令/undo)。
| PR | 处置 | 说明 |
|---|---|---|
| #104 #106 #107 #110 #111 #112 #113 #115 #117 #119 | 已合并 | CI 双绿 + 审核通过(对抗验证 CONFIRM / 主控亲审)的纯新增项;#115 收口 #37 全局库 epic;#117 导出加音频混音;#119 关键帧编辑(确立后端命令路线) |
| #120 #121 #122 #123 | 请修改(@作者) | 与 #119 同批的时间线/Inspector PR:#120 关键帧段与 #119 路线冲突需让位;#121 SwapMedia 违 1:1(缺类型校验/自创时长改动/缺链接级联);#122 Inspector 可编辑字段误用 fade 采样值(写坏静态属性)+ 缺 live 预览;#123 duplicate 未重映射 link_group。合 #119 后均需 rebase |
| #76 | 已关闭 | bundle id 改名冗余(main 已是 com.opentake.desktop,#74 已合) |
| #77 #78 #79 #105 #108 | 请修改(@作者) | 详见下「待审 PR」 |
合并自 PR #102(基于已合并的 #81)。多 Agent 协作:主控修 Bug + 编排 workflow 做功能。
- 暂停无法停止:
TimelinePlaybackLayer在 ref-detach 路径先pause()再删除——React 卸载时 ref detach 先于 effect cleanup(旧 cleanup 拿到空 Map),且从 DOM 移除的媒体元素不会自停。 - 音频波形不渲染:波形解码改用项目统一的 ffmpeg
extract_pcm(原 Symphonia 解不了.mov/非 AAC 容器),移除 symphonia 依赖,前后端补失败日志,新增 mp4 视频容器波形集成测试。 - 丢失素材重选后全红不恢复:新增
relink_media命令(保持同一 media id,只改 source 路径),MediaItemDto.missing按文件存在性实时派生,时间线红色 wash + 卡片离线覆盖层 + 「重新链接」。 - 拖剪辑不跟手:画布在拖拽时不重绘的问题——被拖片段现以半透明 ghost 实时跟随光标(move/trim)。
- 顶栏不常驻 / 媒体库不能滚动:媒体面板内层 flex 容器补
minHeight:0,标签栏/工具栏固定、仅网格滚动。 - 暂停态预览跑到角落/很小:合成帧改稳健等比盒,始终居中铺满。
- 时间线空状态文案未翻译:「Drop media here to start」改走 i18n。
- 剪映式触控板 + 编辑键:捏合 / Cmd / Ctrl + 滚轮 = 缩放(光标锚定),Option + 滚轮 = 横向滚动,裸双指 = 平移,⌘± 缩放,⇧Z 适配窗口;Q/W = 删除播放头左/右(修剪到播放头),⌘B/B = 分割/切割,A/V = 选择,Toolbar
[/]接线。原生{passive:false}wheel 监听(修复捏合误缩放整页)。 - 剪映式顶部素材面板:8 主标签(素材/音频可用,文本/贴纸/特效/转场/字幕/智能包裹置灰占位)+ 导入/我的二级 + 卡片星标收藏(localStorage)。
- 时间线导出 XMEML 4(Final Cut Pro 7 XML,
.xml):crates/opentake-project/src/fcpxml.rs,1:1 端口上游XMLExporter.swift,可被 Premiere / DaVinci / FCP 打开;传输位置/裁剪/速度(time remap)/音量·透明·变换·裁剪关键帧/淡变/链接 A-V 互链/源帧率 NTSC 标记。Clip::keyframe_frames领域方法。 - 移除标题栏「切换 Agent 面板」按钮(面板仍经 View 菜单/快捷键)。
- 缓解整机卡死:暂停态合成帧改为播放头停稳 ~140ms 后才取(
Preview.tsx useDebounced),scrub 全程不再逐帧触发 ffmpeg/wgpu。仅为缓解,需真机验证;彻底修见 #92 / #100。
web tsc 干净 + vitest 43;Rust fmt/clippy 干净 + opentake-project 30(含 13 个 fcpxml 测试)/ opentake-tauri 22 / opentake-media 测试全绿。CI(Rust + Web)双绿后合并。
每个 Issue 含「现状位置 + 如何完成 + 上游/剪映参照」。
| # | 优先级 | 模块 |
|---|---|---|
| #91 | 🔴 CRITICAL | 素材/媒体管理系统数据流错误——需删除后端+管理逻辑按剪映完全重写(文件夹不成文件夹/素材重复显示/音频 tab 语义错/收藏混乱/无波形预览) |
| #92 | 🔴 CRITICAL | 拖动/暂停 scrub 逐帧合成致整机卡死(本轮仅防抖缓解,待真机验证 + 真实播放引擎彻底修) |
| #93 | 🟠 | 片段右键菜单缺失 |
| #94 | 🟠 | 复制/剪切/粘贴(⌘C/⌘X/⌘V)缺失 |
| #95 | 🟠 | 关键帧编辑入口缺失(只读不可编辑) |
| #96 | 🟠 | 文本工具 T 死按钮 + 文本编辑 UI 缺失 |
| #97 | 🟠 | Inspector 三段式 live + 缺字段(位置/裁剪/翻转/fade) |
| #98 | 🟡 | 拖放落点路由 / 拖到新轨 / Option 拖拽复制 |
| #99 | 🟡 | 吸附迟滞+多探针 / 链接 offset 角标 / 音量橡皮筋 |
| #100 | 🟡 | 真实播放/scrub 引擎(彻底修 #92) |
| #101 | 🟡 | Swap Media / Save as Media / Extract Audio 后端命令 |
- #91 素材系统重写(最高优先,用户点名):单一权威 manifest(folderId 层级)+ 文件夹钻取浏览 + 音频提取/收藏入后端 + 波形卡片;前端只读镜像不去重拼接。
- #92 / #100 卡死与播放:先真机验证防抖是否够;不够则做真实播放/scrub 引擎(连续解码 + 音画同步 + 精确 seek + 预览降档)。
- 基础剪辑手感:#93 右键菜单 + #94 复制粘贴 → #96 文本 T → #95 关键帧 → #97 Inspector 三段式(后端 ClipProperties 需扩 crop/fade)。
- 打磨:#98 落点路由/Option 复制 · #99 吸附迟滞/offset 角标/音量线 · #101 后端命令。
以下 PR 经第三轮自动审核未合并,均已在 PR 上 @作者 给出具体阻塞项与修改要求(CHANGES_REQUESTED):
- #108 片段右键菜单(#93)— CONFLICTING,需 rebase;菜单
position:fixed缺top/left(永远渲染在 0,0,功能不可用);渲染期直接调onClose()违反 React 规则;缺 Swap/Save/Extract Audio 菜单项(即使 disabled)。 - #105 复制/剪切/粘贴 ⌘C/⌘X/⌘V(#94)— CONFLICTING,落后 main 39 commit,
editActions.tsimport 段冲突需 rebase;粘贴视频丢链接音轨(addLinkedAudio:false)、空剪贴板无提示待补。 - #79 提取音频到本地(#39)— CONFLICTING,基于旧版 patch 上下文不匹配(命令注册不上);「提取音频」星标与 main 已有收藏星标在同坐标叠层;缺验收测试;out_path 无路径校验;触碰 #91 范围。
- #78 设置 7-pane + MCP + 主页(#40)— 验收仅约 50%(缺 Models/Privacy/Shortcuts/Account pane、主页 Sign in/File missing/SampleProjects/Update 徽标);
SettingsView.tsx合并后超 800 行规约,需按上游每 pane 拆文件。 - #77 文件夹浏览前端(#58)— CONFLICTING,Rust diff 基于旧版 media.rs(字段重复)、
FolderTile未导入Folder图标(tsc 报错)、createFolder签名与 main 重复;缺上游选中/重命名/右键/文件夹互拖;与 #91 素材重写重叠,建议并入 #91。