3.5 KiB
3.5 KiB
关键决策记录
2026-05-12
UI 架构演进(被用户多次调整)
- ❌ 初版:上下流式 04 暗色画廊 → 否决
- ❌ 横向小节点紧凑 DAG(10 节点)+ stage bar 顶部 → 用户要换方向
- ❌ Storyflow 大节点列式 + mini DAG 拓扑底部 → 用户说"理解错了"
- ❌ 顶部看板(看板每列对应节点)→ 用户嫌太扎眼
- ❌ 折叠看板(点击展开)→ 多选展开 → 改回单选展开
- ✅ 侧面 sidebar(108px)+ drawer 弹出(最终)
节点合并
- 用户:"输入/下载/拆分 三合一" → input 节点吃下 download + split 的信息和状态
- 原 10 节点 → 8 节点
视觉决策
- Kanban 风格(不是 Apple 04 暗色画廊)
- 4 类型颜色:input 紫蓝 / process 橙 / ai 紫粉 / output 翠绿
- 关键帧节点改为 process 类型(橙),因为不调模型(只 ffmpeg)
- mini-card 内嵌:玻璃质感 + 渐变 + 圆角 + 深阴影
关键帧选取算法(D 启发式)
- ffmpeg 均匀采样 30 张候选(fast seek)
- pHash 去重相似帧(汉明距离 < 8)
- Laplacian variance 评分清晰度(手写 numpy,不用 scipy)
- 时序分桶 n 等分,每桶取最清晰
- 输出 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)
- click:node 上方 360px 展开 controls + 加帧按钮(不全屏)
关键帧缩略图设计
- 浮条 grid-cols-5(超过 5 张换行向上扩展)
- aspectRatio 跟视频原比例(竖屏 9:16 / 横屏 16:9 自适应)
- hover:弹 KEYFRAME_WIDTH*2 静态大图(不放视频,因为关键帧是垫图素材)
- click:打开 keyframe drawer 内的 lightbox
Lightbox 嵌入策略
- 浮动 fixed 模式被否决("全屏太遮挡"+"切换累")
- 最终:嵌入 keyframe sidebar drawer,drawer 宽度自适应(400 / 760)
- 颜色顶栏用 TYPE_GRAD["process"] 橙红渐变,跟 keyframe tile 同色系
Vision identify 结果结构
{
"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
「解析」按钮是关键的人工触发点(不是全自动),用户能选择性跑。
仍未解决的设计问题
- 区域化修图(inpainting)UI 没定(A 纯 prompt / B 矩形 / C 画笔 / D SAM)
- 多 job 并发轮询逻辑(当前只 active job 轮询)
- 生图结果选用后怎么传到 video gen 节点(数据流)