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

3.5 KiB
Raw Permalink Blame History

关键决策记录

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 结果结构

{
  "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 节点(数据流)