docs: add GUI edit design spec

This commit is contained in:
hmo
2026-05-03 23:49:14 +08:00
parent aad1548348
commit 088db28a77
+112
View File
@@ -0,0 +1,112 @@
# Piano Highlight Generator - GUI 修正功能设计
## 背景
现有 GUI 仅有"选文件+开始处理"的功能,跑完后用户无法对结果进行修正。本设计在跑完之后提供知识点编辑和字幕编辑能力,支持增删改,并自动判断如何应用修改。
## 名词定义
- **clip**:底层实现细节,表示一个视频片段(start/end/title_segments
- **知识点**:用户感知的单位,即 clip 的 title
- **标题**v1_title.srt,知识点名称的大字叠加层
- **字幕**v1_content.srt,实际转录文本的小字叠加层
## 用户流程
```
PPT解析 → 跑流程 → GUI显示结果
┌─────────┴─────────┐
编辑知识点 编辑字幕
(改/删/增标题) (改/删文本)
↓ ↓
系统自动判断如何重生成 直接应用用户修改
(删json/重新匹配/处理重叠) (跳过LLM校正)
↓ ↓
└──────┬─────────────┘
自动重烧
用户用播放器查看
```
## 知识点编辑
### 用户操作
- **改标题**:直接编辑文字
- **删 clip**:删除该 clip
- **新增知识点**:输入新标题(PPT 里没有的也行)
### 系统行为
| 操作 | 底层动作 |
|------|---------|
| 改 clip N 标题 | 删 `clipN.json` → 用新标题在 transcript 里重新匹配 start/end → 处理重叠 → 重烧 |
| 删 clip N | 从 generated_config.yaml 删掉该 clip → 删 `clipN.json` + `clipN.mp4` → 重烧 |
| 新增知识点 | 用新标题在 transcript 里匹配 start/end → 判断是否合并到相邻 clip(重叠处理)→ 重烧 |
### 重叠处理
新增/修改后如果与现有 clip 重叠,系统自动:
1. 合并重叠片段
2. 生成 title_segments(按 transcript 关键词首次出现时间切分)
3. 每个标题最多显示 title_duration 秒
## 字幕编辑
### 用户操作
直接编辑字幕文件中的文本(v1_content.srt)。
### 系统行为
- **改字幕文本**:以用户修改为准,跳过 LLM 校正,直接重烧
- **删字幕条目**:用户删除某条,系统保留,其他正常重烧
- **改时间轴**:不支持(时间轴由底层逻辑决定)
## 底层原子化支撑
底层需要提供以下能力,供 GUI 调用:
```
reextract_clip_title(clip_index, new_title)
→ 删 clipN.json → 重新匹配 → 更新 generated_config.yaml
delete_clip(clip_index)
→ 从 config 删 → 删 json/mp4
add_clip_by_title(new_title)
→ 在 transcript 里匹配 → 判断合并/新增 → 更新 config
reburn_titles()
→ 只重烧标题轨(已有 json)
reburn_subtitles(user_texts)
→ 直接用用户文本烧录字幕,跳过 LLM 校正
```
CLI 的 `burn_only.py` 已经部分支撑"直接重烧"的能力,需要增强以支持按原子操作重烧。
## 数据流
```
generated_config.yaml ← 唯一的 clips 配置源(用户编辑后同步更新)
intermediates/clip*.json ← 转录缓存(按需删除重生成)
subs/v1_title.srt ← 标题轨(可手动编辑后重烧)
subs/v1_content.srt ← 字幕轨(用户直接改文本)
```
## 架构原则
1. **CLI/GUI 底层复用**:所有原子操作在 core/ 里,CLI 和 GUI 都调用同一套
2. **config 是唯一真源**`generated_config.yaml` 是 clips 事实,GUI 编辑后写回此文件
3. **按需重生成**:只删除/重生成受影响的 clip,不动其他
4. **字幕以用户为准**:字幕文本修改跳过 LLM 校正
## 实施步骤
1. 底层原子化:core/ 增加 `reextract_clip`, `delete_clip`, `add_clip_by_title` 函数
2. CLI burn_only 支持部分重烧(支持只烧标题或只烧字幕)
3. GUI 增加编辑界面:clip 列表 + 字幕列表
4. 集成测试