Files
20260512-skg-tk/.memory/decisions.md

98 lines
3.5 KiB
Markdown
Raw Permalink 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.
# 关键决策记录
## 2026-05-12
### UI 架构演进(被用户多次调整)
1. ❌ 初版:上下流式 04 暗色画廊 → 否决
2. ❌ 横向小节点紧凑 DAG10 节点)+ stage bar 顶部 → 用户要换方向
3. ❌ Storyflow 大节点列式 + mini DAG 拓扑底部 → 用户说"理解错了"
4. ❌ 顶部看板(看板每列对应节点)→ 用户嫌太扎眼
5. ❌ 折叠看板(点击展开)→ 多选展开 → 改回单选展开
6.**侧面 sidebar108px+ drawer 弹出**(最终)
### 节点合并
- 用户:"输入/下载/拆分 三合一" → input 节点吃下 download + split 的信息和状态
- 原 10 节点 → 8 节点
### 视觉决策
- Kanban 风格(不是 Apple 04 暗色画廊)
- 4 类型颜色input 紫蓝 / process 橙 / ai 紫粉 / output 翠绿
- 关键帧节点改为 process 类型(橙),因为不调模型(只 ffmpeg
- mini-card 内嵌:玻璃质感 + 渐变 + 圆角 + 深阴影
### 关键帧选取算法D 启发式)
1. ffmpeg 均匀采样 30 张候选fast seek
2. pHash 去重相似帧(汉明距离 < 8
3. Laplacian variance 评分清晰度(手写 numpy不用 scipy
4. 时序分桶 n 等分,每桶取最清晰
5. 输出 5 张
不用场景切换检测(太慢,且 TK 一镜到底视频抓不出来)。
### 抽帧 ffmpeg 参数(重要坑)
```
ffmpeg -y -ss <t> -i source.mp4 \
-frames:v 1 \
-pix_fmt yuvj420p \ # ⚠️ mjpeg 不支持 yuv420p
-q:v 3 \
out.jpg
```
### 视频缩略图设计
- Input 节点上方:每个 job 一个 80px 缩略图浮条 + 「+」按钮再上传
- hover自动播放视频片段muted loop
- clicknode 上方 360px 展开 controls + 加帧按钮(不全屏)
### 关键帧缩略图设计
- 浮条 grid-cols-5超过 5 张换行向上扩展)
- aspectRatio 跟视频原比例(竖屏 9:16 / 横屏 16:9 自适应)
- hover弹 KEYFRAME_WIDTH*2 静态大图(**不放视频,因为关键帧是垫图素材**
- click打开 keyframe drawer 内的 lightbox
### Lightbox 嵌入策略
- 浮动 fixed 模式被否决("全屏太遮挡"+"切换累"
- 最终:嵌入 keyframe sidebar drawerdrawer 宽度自适应400 / 760
- 颜色顶栏用 TYPE_GRAD["process"] 橙红渐变,跟 keyframe tile 同色系
### Vision identify 结果结构
```json
{
"scene": "一句话场景",
"objects": [{"name", "position", "color", "extract_prompt"}],
"style": "风格 / 打光 / 色调",
"suggested_prompt": "完整英文 prompt"
}
```
下游生图直接拿 suggested_prompt 作 base prompt + 用户的正向/负向 prompt。
### 生图正负 prompt 拼合
```
{画面描述}. Include: {正向}. Do NOT include: {负向}.
Output must be clean without any watermark, username text, or platform logo.
```
默认 negative「水印, @用户名, TikTok logo, 平台文字, 浮水印」 → 直出"纯净图"。
## 关键架构选择
### 多 job 支持
- jobs: Job[] state
- activeJobId 切换 active
- URL: `?job=id1,id2,id3` 持久化所有
- 提交链接 / 上传 → push 新 job + setActive
### 状态机
```
created → downloading → downloaded等用户点解析
→ splitting → frames_extracted
→ transcribing → transcribed | failed
```
「解析」按钮是关键的人工触发点(不是全自动),用户能选择性跑。
## 仍未解决的设计问题
- 区域化修图inpaintingUI 没定A 纯 prompt / B 矩形 / C 画笔 / D SAM
- 多 job 并发轮询逻辑(当前只 active job 轮询)
- 生图结果选用后怎么传到 video gen 节点(数据流)