Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,19 @@
- **全局可复用素材库后端**(#37):
- **#37-A / #54**(PR #104)后端存储层 `crates/opentake-media/src/library.rs`:copy-on-favorite + SHA-256 内容寻址去重 + JSON manifest 原子写(`.tmp` rename)+ Mutex 并发安全。9 个单测。
- **#37-B / #55**(PR #106)Tauri 命令层 `src-tauri/src/library.rs`:7 个命令 `library_list` / `favorite` / `unfavorite` / `categorize` / `rename` / `delete` / `import_to_project`。
- 上游 palmier-pro 无此模块,#37 为 OpenTake 新增子系统,不要求 1:1。前端(#37-C / #56)尚未实现,收藏暂仍走前端 localStorage。
- **#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 迁后端。
- **文本工具 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`。
- **`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/命令留后续。

### 审核处置(本轮)

| PR | 处置 | 说明 |
|---|---|---|
| #104 #106 #107 #110 #111 #112 | **已合并** | CI 双绿 + 审核通过 + 对抗验证 CONFIRM 的纯新增项 |
| #104 #106 #107 #110 #111 #112 #113 #115 | **已合并** | CI 双绿 + 审核通过对抗验证 CONFIRM / 主控亲审)的纯新增项;**#115 收口 #37 全局库 epic** |
| #76 | **已关闭** | bundle id 改名冗余(main 已是 `com.opentake.desktop`,#74 已合) |
| #77 #78 #79 #105 #108 | **请修改(@作者)** | 详见下「待审 PR」 |

Expand Down
5 changes: 3 additions & 2 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,12 @@
## ✅ 2026-06-23 第三轮已合并(自动 PR 审核,均 CI 双绿 + 对抗验证 CONFIRM)

逐 PR 专家审核 + 对抗验证 + 对照文档后合并的纯新增项(详见 CHANGELOG「第三轮」):
- **#104/#106 全局素材库后端 + 命令层**(#37-A/B):`opentake-media/src/library.rs`(内容寻址去重 + JSON manifest 原子写)+ `src-tauri/src/library.rs`(7 命令)前端 #37-C/#56 待做
- **#104/#106/#115 全局素材库 epic 收口**(#37):后端存储层 `opentake-media/src/library.rs`(内容寻址去重 + JSON manifest 原子写)+ 命令层 `src-tauri/src/library.rs`(7 命令)+ **前端 #115** `LibraryView`/`libraryStore`/`libraryApi`(分类树/网格/搜索/排序/音效库,前端↔后端契约已核实)。剩:库→时间线拖拽(现用导入按钮)、媒体面板「星标→library_favorite」接线、收藏迁后端
- **#107 文本工具 MVP**(#96):Toolbar `T` → `addTextClip()` + `TextTab.tsx`;textStyle 字段留后续(依赖后端 ClipProperties 扩展)。
- **#110 SRT/VTT 字幕导出纯逻辑**(#29 切片):`opentake-domain/src/subtitle_export.rs`(16 单测);导出层/agent 工具/前端对话框待接。
- **#111 `list_models` 接 opentake-gen catalog**(#9/#10 切片);`generate_*`/upscale 仍待 async+BYOK。
- **#112 整条时间线视频导出编排**(Phase 5 spine):`src-tauri/src/export.rs` + `export_video`(逐帧 composite→ffmpeg,H.264/.mp4 全分辨率,含集成测试);自包含复制 preview、未碰 `composite_frame`。H.265/ProRes/音频/进度取消留后续。
- **#113 caption-group 样式批量同步纯逻辑**(#29 切片):`opentake-domain/src/caption_sync.rs`(不可变 / 跨组隔离 / legacy 安全,12 单测);接 UI/命令留后续。
- **关闭** #76(bundle id 改名冗余);**请修改 @作者** #77/#78/#79/#105/#108(冲突/验收未达标,详见 CHANGELOG「待审 PR」)。

## ✅ 2026-06-23 第二轮已完成(分支 `feat/jianying-ui-and-timeline-fixes`,基于 PR#81)
Expand Down Expand Up @@ -71,7 +72,7 @@
- **#48 片段编辑收尾**:Delete/切割/片段右键菜单/Inspector 三段式/Toolbar 接线。
- **剩余 MCP 工具 stub**:媒体读取(inspect_media/get_transcript/search_media)+ import_media 需**拓宽 CoreHandle 接 MediaEngine**(注意:CoreHandle 现仅持 AppCore,MediaEngine 在 MediaState,需架构扩展);`generate_*`/upscale 需异步 GenClient + BYOK;add_captions 需端上 whisper。
- **#49 项目内文件夹导入 + 嵌套文件夹浏览(剪映式)**:文件夹图标/双击进入/面包屑/拖出;DTO 加 folderId+folders;import_folder 镜像目录树。用户很想要。
- **#37 全局可复用素材库 + 收藏**(跨项目/分类/音效库/全库可见):**后端已并入 main** —— 存储层 `crates/opentake-media/src/library.rs`(#37-A/#54,PR #104,copy-on-favorite + SHA-256 内容寻址去重 + JSON manifest 原子写)+ Tauri 命令层 `src-tauri/src/library.rs`(#37-B/#55,PR #106,7 命令 list/favorite/unfavorite/categorize/rename/delete/import_to_project)。**剩前端 #37-C/#56**(库视图 UI + 收藏从 localStorage 迁到后端 `library_favorite`/`library_list`)尚无 PR。follow-up:`library.rs:322` remove() 静默吞 remove_file 错误,建议补 `tracing::warn!`;`library_delete` 与 `library_unfavorite` 现为纯别名,建议语义区分。
- **#37 全局可复用素材库 + 收藏**(跨项目/分类/音效库/全库可见):**后端已并入 main** —— 存储层 `crates/opentake-media/src/library.rs`(#37-A/#54,PR #104,copy-on-favorite + SHA-256 内容寻址去重 + JSON manifest 原子写)+ Tauri 命令层 `src-tauri/src/library.rs`(#37-B/#55,PR #106,7 命令 list/favorite/unfavorite/categorize/rename/delete/import_to_project)。**前端 #37-C/#56 已并入 main**(PR #115:独立 `LibraryView` 全屏视图 + `libraryStore`/`libraryApi`,分类树/网格/搜索/排序/跨视图聚合/音效库;Home/TitleBar 入口;前端↔后端 7 命令契约已核实)。**#37 epic 收口**(后端 #104/#106 + 前端 #115)。剩:库→时间线拖拽(现用「导入当前项目」按钮)、媒体面板「星标→library_favorite」接线、收藏从 localStorage 迁后端。follow-up:`library.rs:322` remove() 静默吞 remove_file 错误,建议补 `tracing::warn!`;`library_delete` 与 `library_unfavorite` 现为纯别名,建议语义区分。
- **#39 提取音频星标 · #40 设置多分页+主页 1:1 · #34 motion dispatch · #27–30 进阶 B/C/D/E · #22–25 #12 follow-up · #35 bundle id 改名**。
- 冲突注意:我(#47/#48)动 opentake-render/opentake-media(decode/FrameProvider)/src-tauri(composite_frame、autosave)/web Preview+timeline;#36 动 agent+src-tauri(server 段);#37/#49 动 opentake-media(library/folders)+web media。**src-tauri/lib.rs、opentake-media 是多方交汇点,合并按 issue 顺序、各自小段、勤 rebase。**

Expand Down
Loading