auto-save 2026-05-14 00:54 (+4, ~2)

This commit is contained in:
2026-05-14 00:54:42 +08:00
parent e8a653e524
commit 7804fd13f8
6 changed files with 1049 additions and 0 deletions

View File

@@ -2698,6 +2698,19 @@
"message": "auto-save 2026-05-14 00:42 (+4, ~3)",
"hash": "042efdc",
"files_changed": 7
},
{
"ts": "2026-05-14T00:48:59+08:00",
"type": "commit",
"message": "auto-save 2026-05-14 00:48 (+4, ~3)",
"hash": "e8a653e",
"files_changed": 7
},
{
"ts": "2026-05-13T16:53:10Z",
"type": "session-heartbeat",
"message": "Claude 会话活跃 · 最近命令claude · 2 项未提交变更 · 最近提交auto-save 2026-05-14 00:48 (+4, ~3)",
"files_changed": 2
}
]
}

View File

@@ -0,0 +1,46 @@
- generic [active] [ref=e1]:
- generic [ref=e6] [cursor=pointer]:
- button "Open Next.js Dev Tools" [ref=e7]:
- img [ref=e8]
- generic [ref=e13]:
- button "Open issues overlay" [ref=e14]:
- generic [ref=e15]:
- generic [ref=e16]: "0"
- generic [ref=e17]: "1"
- generic [ref=e18]: Issue
- button "Collapse issues badge" [ref=e19]:
- img [ref=e20]
- main [ref=e23]:
- button "自动整理 · 所有节点回默认位置 / 宽度(保留钉子状态)" [ref=e25]:
- img [ref=e26]
- button "切到明亮主题" [ref=e32]:
- img [ref=e33]
- application [ref=e41]:
- group [ref=e44] [cursor=pointer]:
- generic [ref=e46]:
- generic [ref=e47]:
- img [ref=e49]
- generic [ref=e52]: 输入 · Input
- button "已钉住 · 点击取消(恢复可拖、可缩放)" [ref=e55]:
- img [ref=e56]
- generic [ref=e58]:
- generic [ref=e59]: STEP 1 · 待运行
- textbox "粘贴 TikTok 链接" [ref=e60]
- generic [ref=e61]:
- button "提交链接" [disabled] [ref=e62]
- button "上传" [ref=e63]:
- img [ref=e64]
- text: 上传
- img
- generic "Control Panel" [ref=e68]:
- button "Zoom In" [ref=e69] [cursor=pointer]:
- img [ref=e70]
- button "Zoom Out" [ref=e72] [cursor=pointer]:
- img [ref=e73]
- button "Fit View" [ref=e75] [cursor=pointer]:
- img [ref=e76]
- button "Toggle Interactivity" [ref=e78] [cursor=pointer]:
- img [ref=e79]
- img "Mini Map" [ref=e82]
- region "Notifications alt+T"
- alert [ref=e85]

View File

@@ -0,0 +1,449 @@
- generic [active] [ref=e1]:
- generic [ref=e6] [cursor=pointer]:
- button "Open Next.js Dev Tools" [ref=e7]:
- img [ref=e8]
- generic [ref=e13]:
- button "Open issues overlay" [ref=e14]:
- generic [ref=e15]:
- generic [ref=e16]: "0"
- generic [ref=e17]: "1"
- generic [ref=e18]: Issue
- button "Collapse issues badge" [ref=e19]:
- img [ref=e20]
- main [ref=e23]:
- button "自动整理 · 所有节点回默认位置 / 宽度(保留钉子状态)" [ref=e25]:
- img [ref=e26]
- button "切到明亮主题" [ref=e32]:
- img [ref=e33]
- generic [ref=e39]:
- generic [ref=e88]:
- generic [ref=e89]:
- img [ref=e90]
- generic [ref=e95]: 分镜头编排
- generic [ref=e96]: 0 分镜 · 0 元素
- generic [ref=e97]: · 组织分镜画面 → 为生成视频做准备
- button "展开编排" [disabled] [ref=e99]:
- img [ref=e100]
- text: 展开编排
- application [ref=e41]:
- generic [ref=e43]:
- generic:
- generic:
- img:
- group "Edge from input to keyframe" [ref=e102] [cursor=pointer]
- img:
- group "Edge from input to asr" [ref=e105] [cursor=pointer]
- img:
- group "Edge from asr to translate"
- img:
- group "Edge from translate to rewrite" [ref=e108] [cursor=pointer]
- img:
- group "Edge from keyframe to storyboard" [ref=e111] [cursor=pointer]
- img:
- group "Edge from rewrite to storyboard" [ref=e114] [cursor=pointer]
- img:
- group "Edge from storyboard to videogen" [ref=e117] [cursor=pointer]
- img:
- group "Edge from videogen to compose" [ref=e120] [cursor=pointer]
- img:
- group "Edge from rewrite to compose" [ref=e123] [cursor=pointer]
- generic:
- group [ref=e44] [cursor=pointer]:
- generic [ref=e45]:
- generic [ref=e126]:
- button "再上传一个视频" [ref=e127]:
- img [ref=e128]
- generic [ref=e129]:
- button "64.5s" [ref=e130]:
- generic [ref=e132]: 64.5s
- generic:
- generic:
- generic:
- generic: 1080×1920
- generic: 64.5s
- generic [ref=e133]:
- button "72.4s" [ref=e134]:
- generic [ref=e136]: 72.4s
- generic:
- generic:
- generic:
- generic: 576×1024
- generic: 72.4s
- generic [ref=e137]:
- button "64.5s" [ref=e138]:
- generic [ref=e140]: 64.5s
- generic:
- generic:
- generic:
- generic: 1080×1920
- generic: 64.5s
- generic [ref=e141]:
- button "71.4s" [ref=e142]:
- generic [ref=e144]: 71.4s
- generic:
- generic:
- generic:
- generic: 1080×1920
- generic: 71.4s
- generic [ref=e145]:
- button "72.4s" [ref=e146]:
- generic [ref=e148]: 72.4s
- generic:
- generic:
- generic:
- generic: 576×1024
- generic: 72.4s
- generic [ref=e149]:
- button "71.4s" [ref=e150]:
- generic [ref=e152]: 71.4s
- generic:
- generic:
- generic:
- generic: 1080×1920
- generic: 71.4s
- generic [ref=e153]:
- button "71.4s" [ref=e154]:
- generic [ref=e156]: 71.4s
- generic:
- generic:
- generic:
- generic: 1080×1920
- generic: 71.4s
- generic [ref=e157]:
- button "71.4s" [ref=e158]:
- generic [ref=e160]: 71.4s
- generic:
- generic:
- generic:
- generic: 1080×1920
- generic: 71.4s
- generic [ref=e161]:
- button "71.4s" [ref=e162]:
- generic [ref=e164]: 71.4s
- generic:
- generic:
- generic:
- generic: 1080×1920
- generic: 71.4s
- generic [ref=e165]:
- button "71.4s" [ref=e166]:
- generic [ref=e168]: 71.4s
- generic:
- generic:
- generic:
- generic: 1080×1920
- generic: 71.4s
- generic [ref=e169]:
- button "8.0s" [ref=e170]:
- generic [ref=e172]: 8.0s
- generic:
- generic:
- generic:
- generic: 640×360
- generic: 8.0s
- generic [ref=e173]:
- button "8.0s" [ref=e174]:
- generic [ref=e176]: 8.0s
- generic:
- generic:
- generic:
- generic: 640×360
- generic: 8.0s
- generic [ref=e177]:
- button "8.0s" [ref=e178]:
- generic [ref=e180]: 8.0s
- generic:
- generic:
- generic:
- generic: 640×360
- generic: 8.0s
- generic [ref=e181]:
- button "8.0s" [ref=e182]:
- generic [ref=e184]: 8.0s
- generic:
- generic:
- generic:
- generic: 640×360
- generic: 8.0s
- button "…" [ref=e186]:
- img [ref=e188]
- generic [ref=e190]:
- button "…" [ref=e192]:
- img [ref=e194]
- generic [ref=e196]:
- button "…" [ref=e198]:
- img [ref=e200]
- generic [ref=e202]:
- generic [ref=e46]:
- generic [ref=e47]:
- img [ref=e49]
- generic [ref=e52]: 输入 · Input
- generic [ref=e53]:
- img [ref=e203]
- button "已钉住 · 点击取消(恢复可拖、可缩放)" [ref=e55]:
- img [ref=e56]
- generic [ref=e58]:
- generic [ref=e59]: STEP 1 · 视频就绪 · 完成
- textbox "再加一个 TK 链接" [ref=e206]
- generic [ref=e61]:
- button "+ 加链接" [disabled] [ref=e207]
- button "再传一个" [ref=e208]:
- img [ref=e64]
- text: 再传一个
- generic [ref=e209]:
- generic [ref=e210]: 1080×1920 · 64.5s
- generic [ref=e211]: 🔗 链接
- button "重新解析" [ref=e212]
- group [ref=e213]:
- generic [ref=e214]:
- generic [ref=e215]:
- generic [ref=e216]:
- button "frame 9 1.7s" [ref=e217]:
- img "frame 9" [ref=e218]
- generic [ref=e219]: 1.7s
- button "📋" [ref=e220]
- button "删除该关键帧" [ref=e221]:
- img [ref=e222]
- generic:
- generic:
- generic:
- generic: 分镜 10
- generic: 1.66s
- generic [ref=e225]:
- button "frame 0 ✨ 24.7s" [ref=e226]:
- img "frame 0" [ref=e227]
- generic "已清洗" [ref=e229]: ✨
- generic [ref=e230]: 24.7s
- button "📋" [ref=e231]
- button "删除该关键帧" [ref=e232]:
- img [ref=e233]
- generic:
- generic:
- generic:
- generic: 分镜 1
- generic: 24.73s
- generic [ref=e236]:
- button "frame 1 33.6s" [ref=e237]:
- img "frame 1" [ref=e238]
- generic [ref=e239]: 33.6s
- button "📋" [ref=e240]
- button "删除该关键帧" [ref=e241]:
- img [ref=e242]
- generic:
- generic:
- generic:
- generic: 分镜 2
- generic: 33.61s
- generic [ref=e245]:
- button "frame 2 37.7s" [ref=e246]:
- img "frame 2" [ref=e247]
- generic [ref=e248]: 37.7s
- button "📋" [ref=e249]
- button "删除该关键帧" [ref=e250]:
- img [ref=e251]
- generic:
- generic:
- generic:
- generic: 分镜 3
- generic: 37.70s
- generic [ref=e254]:
- button "frame 3 39.4s" [ref=e255]:
- img "frame 3" [ref=e256]
- generic [ref=e257]: 39.4s
- button "📋" [ref=e258]
- button "删除该关键帧" [ref=e259]:
- img [ref=e260]
- generic:
- generic:
- generic:
- generic: 分镜 4
- generic: 39.42s
- generic [ref=e263]:
- button "frame 4 1 43.1s" [ref=e264]:
- img "frame 4" [ref=e265]
- generic "1 个元素已抠图" [ref=e267]: "1"
- generic [ref=e268]: 43.1s
- button "📋" [ref=e269]
- button "删除该关键帧" [ref=e270]:
- img [ref=e271]
- generic:
- generic:
- generic:
- generic: 分镜 5
- generic: 43.13s
- generic [ref=e274]:
- button "frame 5 45.0s" [ref=e275]:
- img "frame 5" [ref=e276]
- generic [ref=e277]: 45.0s
- button "📋" [ref=e278]
- button "删除该关键帧" [ref=e279]:
- img [ref=e280]
- generic:
- generic:
- generic:
- generic: 分镜 6
- generic: 45.05s
- generic [ref=e283]:
- button "frame 6 53.6s" [ref=e284]:
- img "frame 6" [ref=e285]
- generic [ref=e286]: 53.6s
- button "📋" [ref=e287]
- button "删除该关键帧" [ref=e288]:
- img [ref=e289]
- generic:
- generic:
- generic:
- generic: 分镜 7
- generic: 53.60s
- generic [ref=e292]:
- button "frame 7 56.0s" [ref=e293]:
- img "frame 7" [ref=e294]
- generic [ref=e295]: 56.0s
- button "📋" [ref=e296]
- button "删除该关键帧" [ref=e297]:
- img [ref=e298]
- generic:
- generic:
- generic:
- generic: 分镜 8
- generic: 55.96s
- generic [ref=e301]:
- button "frame 8 58.4s" [ref=e302]:
- img "frame 8" [ref=e303]
- generic [ref=e304]: 58.4s
- button "📋" [ref=e305]
- button "删除该关键帧" [ref=e306]:
- img [ref=e307]
- generic:
- generic:
- generic:
- generic: 分镜 9
- generic: 58.39s
- generic [ref=e310]:
- generic [ref=e312]:
- img [ref=e314]
- generic [ref=e318]: 镜头拆解 · 元素提取
- generic [ref=e319]:
- img [ref=e320]
- button "钉住 · 锁定位置与尺寸" [ref=e324]:
- img [ref=e325]
- generic [ref=e328]:
- generic [ref=e329]: STEP 2 · 0/10 入编排 · 完成
- generic [ref=e330]:
- text: 自动 10 张 ·
- generic [ref=e331]: 1 已清洗
- text: ·
- generic [ref=e332]: 1/2 已抠图
- text: 点缩略图 → 清洗水印 / 提取可借鉴元素 → 改造成 SKG 画面素材
- generic "拖动调整宽度" [ref=e334]
- generic "拖动调整大小(宽 × 高)" [ref=e335]
- group [ref=e336]:
- generic [ref=e337]:
- generic [ref=e339]:
- img [ref=e341]
- generic [ref=e344]: 声音文案 · ASR
- button "钉住 · 锁定位置与尺寸" [ref=e347]:
- img [ref=e348]
- generic [ref=e351]:
- generic [ref=e352]: STEP 3 · 可选文案轨 · 待运行
- generic [ref=e353]: Gemini 2.5 · 英文带时间戳分段
- generic "拖动调整宽度" [ref=e355]
- generic "拖动调整大小(宽 × 高)" [ref=e356]
- group [ref=e357]:
- generic [ref=e358]:
- generic [ref=e360]:
- img [ref=e362]
- generic [ref=e366]: 翻译理解 · Translate
- button "钉住 · 锁定位置与尺寸" [ref=e369]:
- img [ref=e370]
- generic [ref=e373]:
- generic [ref=e374]: STEP 4 · EN → ZH · 待运行
- generic [ref=e375]: 中文翻译 · 段落级 · 实时输出
- generic "拖动调整宽度" [ref=e377]
- generic "拖动调整大小(宽 × 高)" [ref=e378]
- group [ref=e379]:
- generic [ref=e380]:
- generic [ref=e382]:
- button "透明骷髅" [ref=e383]:
- img "透明骷髅" [ref=e384]
- button "📋" [ref=e385]
- generic:
- generic:
- generic:
- generic: 分镜 5
- generic: 43.13s
- generic [ref=e386]:
- generic [ref=e388]:
- img [ref=e390]
- generic [ref=e395]: 元素改造 · Storyboard
- generic [ref=e396]:
- img [ref=e397]
- button "钉住 · 锁定位置与尺寸" [ref=e401]:
- img [ref=e402]
- generic [ref=e405]:
- generic [ref=e406]: STEP 6 · 参考元素 → SKG 画面 · 完成
- generic [ref=e407]:
- text: 不是复刻原视频:先把参考图里的主体 / 场景 / 动作 / 道具拆出来,再替换成 SKG 产品画面。
- generic [ref=e408]: 已有 1 个提取元素 · 0 个分镜进入编排
- button "进入分镜编排" [disabled] [ref=e409]
- generic "拖动调整宽度" [ref=e411]
- generic "拖动调整大小(宽 × 高)" [ref=e412]
- group [ref=e413]:
- generic [ref=e414]:
- generic [ref=e416]:
- img [ref=e418]
- generic [ref=e422]: 产品文案 · Rewrite
- button "钉住 · 锁定位置与尺寸" [ref=e425]:
- img [ref=e426]
- generic [ref=e429]:
- generic [ref=e430]: STEP 5 · 接 SKG 卖点 · 待运行
- textbox "粘贴 SKG 产品信息 / 关键卖点(可作为视频脚本和镜头动作参考)" [disabled] [ref=e431]
- generic [ref=e432]: 下一冲刺接入
- generic "拖动调整宽度" [ref=e434]
- generic "拖动调整大小(宽 × 高)" [ref=e435]
- group [ref=e436]:
- generic [ref=e438]:
- generic [ref=e440]:
- img [ref=e442]
- generic [ref=e444]: 生成视频 · Video Gen
- button "钉住 · 锁定位置与尺寸" [ref=e447]:
- img [ref=e448]
- generic [ref=e451]:
- generic [ref=e452]: STEP 7 · 首帧 + 动作 prompt · 待运行
- generic [ref=e453]:
- generic [ref=e454]: Seedance
- generic [ref=e455]: Kling
- generic [ref=e456]: Veo 3
- generic "拖动调整宽度" [ref=e458]
- generic "拖动调整大小(宽 × 高)" [ref=e459]
- group [ref=e460]:
- generic [ref=e461]:
- generic [ref=e463]:
- img [ref=e465]
- generic [ref=e469]: 合成成品 · Compose
- button "钉住 · 锁定位置与尺寸" [ref=e472]:
- img [ref=e473]
- generic [ref=e476]:
- generic [ref=e477]: STEP 8 · ffmpeg + 字幕 · 待运行
- generic [ref=e478]:
- text: 视频片段 + 字幕 / TTS
- text: → 最终 mp4 输出
- generic "拖动调整宽度" [ref=e479]
- generic "拖动调整大小(宽 × 高)" [ref=e480]
- img
- generic "Control Panel" [ref=e68]:
- button "Zoom In" [ref=e69] [cursor=pointer]:
- img [ref=e70]
- button "Zoom Out" [ref=e72] [cursor=pointer]:
- img [ref=e73]
- button "Fit View" [ref=e75] [cursor=pointer]:
- img [ref=e76]
- button "Toggle Interactivity" [ref=e78] [cursor=pointer]:
- img [ref=e79]
- img "Mini Map" [ref=e82]
- region "Notifications alt+T":
- list:
- listitem [ref=e488]:
- img [ref=e490]
- generic [ref=e493]: 📥 视频已就绪 — 请点 Input 节点里的「点这里开始解析」按钮
- alert [ref=e85]

View File

@@ -0,0 +1,31 @@
- generic [active] [ref=e1]:
- generic [ref=e6] [cursor=pointer]:
- button "Open Next.js Dev Tools" [ref=e7]:
- img [ref=e8]
- generic [ref=e13]:
- button "Open issues overlay" [ref=e14]:
- generic [ref=e15]:
- generic [ref=e16]: "0"
- generic [ref=e17]: "1"
- generic [ref=e18]: Issue
- button "Collapse issues badge" [ref=e19]:
- img [ref=e20]
- main [ref=e23]:
- button "自动排版 · 保留每个节点的尺寸,重新排好间距和列布局" [ref=e25]:
- img [ref=e26]
- button "切到明亮主题" [ref=e32]:
- img [ref=e33]
- application [ref=e41]:
- img
- generic "Control Panel" [ref=e44]:
- button "Zoom In" [ref=e45] [cursor=pointer]:
- img [ref=e46]
- button "Zoom Out" [ref=e48] [cursor=pointer]:
- img [ref=e49]
- button "Fit View" [ref=e51] [cursor=pointer]:
- img [ref=e52]
- button "Toggle Interactivity" [ref=e54] [cursor=pointer]:
- img [ref=e55]
- img "Mini Map" [ref=e58]
- region "Notifications alt+T"
- alert [ref=e60]

View File

@@ -0,0 +1,449 @@
- generic [active] [ref=e1]:
- generic [ref=e6] [cursor=pointer]:
- button "Open Next.js Dev Tools" [ref=e7]:
- img [ref=e8]
- generic [ref=e13]:
- button "Open issues overlay" [ref=e14]:
- generic [ref=e15]:
- generic [ref=e16]: "0"
- generic [ref=e17]: "1"
- generic [ref=e18]: Issue
- button "Collapse issues badge" [ref=e19]:
- img [ref=e20]
- main [ref=e23]:
- button "自动排版 · 保留每个节点的尺寸,重新排好间距和列布局" [ref=e25]:
- img [ref=e26]
- button "切到明亮主题" [ref=e32]:
- img [ref=e33]
- generic [ref=e39]:
- generic [ref=e63]:
- generic [ref=e64]:
- img [ref=e65]
- generic [ref=e70]: 分镜头编排
- generic [ref=e71]: 0 分镜 · 0 元素
- generic [ref=e72]: · 组织分镜画面 → 为生成视频做准备
- button "展开编排" [disabled] [ref=e74]:
- img [ref=e75]
- text: 展开编排
- application [ref=e41]:
- generic [ref=e43]:
- generic:
- generic:
- img:
- group "Edge from input to keyframe" [ref=e77] [cursor=pointer]
- img:
- group "Edge from input to asr" [ref=e80] [cursor=pointer]
- img:
- group "Edge from asr to translate"
- img:
- group "Edge from translate to rewrite" [ref=e83] [cursor=pointer]
- img:
- group "Edge from keyframe to storyboard" [ref=e86] [cursor=pointer]
- img:
- group "Edge from rewrite to storyboard" [ref=e89] [cursor=pointer]
- img:
- group "Edge from storyboard to videogen" [ref=e92] [cursor=pointer]
- img:
- group "Edge from videogen to compose" [ref=e95] [cursor=pointer]
- img:
- group "Edge from rewrite to compose" [ref=e98] [cursor=pointer]
- generic:
- group [ref=e101] [cursor=pointer]:
- generic [ref=e102]:
- generic [ref=e103]:
- button "再上传一个视频" [ref=e104]:
- img [ref=e105]
- generic [ref=e106]:
- button "64.5s" [ref=e107]:
- generic [ref=e109]: 64.5s
- generic:
- generic:
- generic:
- generic: 1080×1920
- generic: 64.5s
- generic [ref=e110]:
- button "72.4s" [ref=e111]:
- generic [ref=e113]: 72.4s
- generic:
- generic:
- generic:
- generic: 576×1024
- generic: 72.4s
- generic [ref=e114]:
- button "64.5s" [ref=e115]:
- generic [ref=e117]: 64.5s
- generic:
- generic:
- generic:
- generic: 1080×1920
- generic: 64.5s
- generic [ref=e118]:
- button "71.4s" [ref=e119]:
- generic [ref=e121]: 71.4s
- generic:
- generic:
- generic:
- generic: 1080×1920
- generic: 71.4s
- generic [ref=e122]:
- button "72.4s" [ref=e123]:
- generic [ref=e125]: 72.4s
- generic:
- generic:
- generic:
- generic: 576×1024
- generic: 72.4s
- generic [ref=e126]:
- button "71.4s" [ref=e127]:
- generic [ref=e129]: 71.4s
- generic:
- generic:
- generic:
- generic: 1080×1920
- generic: 71.4s
- generic [ref=e130]:
- button "71.4s" [ref=e131]:
- generic [ref=e133]: 71.4s
- generic:
- generic:
- generic:
- generic: 1080×1920
- generic: 71.4s
- generic [ref=e134]:
- button "71.4s" [ref=e135]:
- generic [ref=e137]: 71.4s
- generic:
- generic:
- generic:
- generic: 1080×1920
- generic: 71.4s
- generic [ref=e138]:
- button "71.4s" [ref=e139]:
- generic [ref=e141]: 71.4s
- generic:
- generic:
- generic:
- generic: 1080×1920
- generic: 71.4s
- generic [ref=e142]:
- button "71.4s" [ref=e143]:
- generic [ref=e145]: 71.4s
- generic:
- generic:
- generic:
- generic: 1080×1920
- generic: 71.4s
- generic [ref=e146]:
- button "8.0s" [ref=e147]:
- generic [ref=e149]: 8.0s
- generic:
- generic:
- generic:
- generic: 640×360
- generic: 8.0s
- generic [ref=e150]:
- button "8.0s" [ref=e151]:
- generic [ref=e153]: 8.0s
- generic:
- generic:
- generic:
- generic: 640×360
- generic: 8.0s
- generic [ref=e154]:
- button "8.0s" [ref=e155]:
- generic [ref=e157]: 8.0s
- generic:
- generic:
- generic:
- generic: 640×360
- generic: 8.0s
- generic [ref=e158]:
- button "8.0s" [ref=e159]:
- generic [ref=e161]: 8.0s
- generic:
- generic:
- generic:
- generic: 640×360
- generic: 8.0s
- button "…" [ref=e163]:
- img [ref=e165]
- generic [ref=e167]:
- button "…" [ref=e169]:
- img [ref=e171]
- generic [ref=e173]:
- button "…" [ref=e175]:
- img [ref=e177]
- generic [ref=e179]:
- generic [ref=e180]:
- generic [ref=e181]:
- img [ref=e183]
- generic [ref=e186]: 输入 · Input
- generic [ref=e187]:
- img [ref=e188]
- button "已钉住 · 点击取消(恢复可拖、可缩放)" [ref=e192]:
- img [ref=e193]
- generic [ref=e195]:
- generic [ref=e196]: STEP 1 · 视频就绪 · 完成
- textbox "再加一个 TK 链接" [ref=e197]
- generic [ref=e198]:
- button "+ 加链接" [disabled] [ref=e199]
- button "再传一个" [ref=e200]:
- img [ref=e201]
- text: 再传一个
- generic [ref=e204]:
- generic [ref=e205]: 1080×1920 · 64.5s
- generic [ref=e206]: 🔗 链接
- button "重新解析" [ref=e207]
- group [ref=e209]:
- generic [ref=e210]:
- generic [ref=e211]:
- generic [ref=e212]:
- button "frame 9 1.7s" [ref=e213]:
- img "frame 9" [ref=e214]
- generic [ref=e215]: 1.7s
- button "📋" [ref=e216]
- button "删除该关键帧" [ref=e217]:
- img [ref=e218]
- generic:
- generic:
- generic:
- generic: 分镜 10
- generic: 1.66s
- generic [ref=e221]:
- button "frame 0 ✨ 24.7s" [ref=e222]:
- img "frame 0" [ref=e223]
- generic "已清洗" [ref=e225]: ✨
- generic [ref=e226]: 24.7s
- button "📋" [ref=e227]
- button "删除该关键帧" [ref=e228]:
- img [ref=e229]
- generic:
- generic:
- generic:
- generic: 分镜 1
- generic: 24.73s
- generic [ref=e232]:
- button "frame 1 33.6s" [ref=e233]:
- img "frame 1" [ref=e234]
- generic [ref=e235]: 33.6s
- button "📋" [ref=e236]
- button "删除该关键帧" [ref=e237]:
- img [ref=e238]
- generic:
- generic:
- generic:
- generic: 分镜 2
- generic: 33.61s
- generic [ref=e241]:
- button "frame 2 37.7s" [ref=e242]:
- img "frame 2" [ref=e243]
- generic [ref=e244]: 37.7s
- button "📋" [ref=e245]
- button "删除该关键帧" [ref=e246]:
- img [ref=e247]
- generic:
- generic:
- generic:
- generic: 分镜 3
- generic: 37.70s
- generic [ref=e250]:
- button "frame 3 39.4s" [ref=e251]:
- img "frame 3" [ref=e252]
- generic [ref=e253]: 39.4s
- button "📋" [ref=e254]
- button "删除该关键帧" [ref=e255]:
- img [ref=e256]
- generic:
- generic:
- generic:
- generic: 分镜 4
- generic: 39.42s
- generic [ref=e259]:
- button "frame 4 1 43.1s" [ref=e260]:
- img "frame 4" [ref=e261]
- generic "1 个元素已抠图" [ref=e263]: "1"
- generic [ref=e264]: 43.1s
- button "📋" [ref=e265]
- button "删除该关键帧" [ref=e266]:
- img [ref=e267]
- generic:
- generic:
- generic:
- generic: 分镜 5
- generic: 43.13s
- generic [ref=e270]:
- button "frame 5 45.0s" [ref=e271]:
- img "frame 5" [ref=e272]
- generic [ref=e273]: 45.0s
- button "📋" [ref=e274]
- button "删除该关键帧" [ref=e275]:
- img [ref=e276]
- generic:
- generic:
- generic:
- generic: 分镜 6
- generic: 45.05s
- generic [ref=e279]:
- button "frame 6 53.6s" [ref=e280]:
- img "frame 6" [ref=e281]
- generic [ref=e282]: 53.6s
- button "📋" [ref=e283]
- button "删除该关键帧" [ref=e284]:
- img [ref=e285]
- generic:
- generic:
- generic:
- generic: 分镜 7
- generic: 53.60s
- generic [ref=e288]:
- button "frame 7 56.0s" [ref=e289]:
- img "frame 7" [ref=e290]
- generic [ref=e291]: 56.0s
- button "📋" [ref=e292]
- button "删除该关键帧" [ref=e293]:
- img [ref=e294]
- generic:
- generic:
- generic:
- generic: 分镜 8
- generic: 55.96s
- generic [ref=e297]:
- button "frame 8 58.4s" [ref=e298]:
- img "frame 8" [ref=e299]
- generic [ref=e300]: 58.4s
- button "📋" [ref=e301]
- button "删除该关键帧" [ref=e302]:
- img [ref=e303]
- generic:
- generic:
- generic:
- generic: 分镜 9
- generic: 58.39s
- generic [ref=e306]:
- generic [ref=e308]:
- img [ref=e310]
- generic [ref=e314]: 镜头拆解 · 元素提取
- generic [ref=e315]:
- img [ref=e316]
- button "钉住 · 锁定位置与尺寸" [ref=e320]:
- img [ref=e321]
- generic [ref=e324]:
- generic [ref=e325]: STEP 2 · 0/10 入编排 · 完成
- generic [ref=e326]:
- text: 自动 10 张 ·
- generic [ref=e327]: 1 已清洗
- text: ·
- generic [ref=e328]: 1/2 已抠图
- text: 点缩略图 → 清洗水印 / 提取可借鉴元素 → 改造成 SKG 画面素材
- generic "拖动调整宽度" [ref=e330]
- generic "拖动调整大小(宽 × 高)" [ref=e331]
- group [ref=e332]:
- generic [ref=e333]:
- generic [ref=e335]:
- img [ref=e337]
- generic [ref=e340]: 声音文案 · ASR
- button "钉住 · 锁定位置与尺寸" [ref=e343]:
- img [ref=e344]
- generic [ref=e347]:
- generic [ref=e348]: STEP 3 · 可选文案轨 · 待运行
- generic [ref=e349]: Gemini 2.5 · 英文带时间戳分段
- generic "拖动调整宽度" [ref=e351]
- generic "拖动调整大小(宽 × 高)" [ref=e352]
- group [ref=e353]:
- generic [ref=e354]:
- generic [ref=e356]:
- img [ref=e358]
- generic [ref=e362]: 翻译理解 · Translate
- button "钉住 · 锁定位置与尺寸" [ref=e365]:
- img [ref=e366]
- generic [ref=e369]:
- generic [ref=e370]: STEP 4 · EN → ZH · 待运行
- generic [ref=e371]: 中文翻译 · 段落级 · 实时输出
- generic "拖动调整宽度" [ref=e373]
- generic "拖动调整大小(宽 × 高)" [ref=e374]
- group [ref=e375]:
- generic [ref=e376]:
- generic [ref=e378]:
- button "透明骷髅" [ref=e379]:
- img "透明骷髅" [ref=e380]
- button "📋" [ref=e381]
- generic:
- generic:
- generic:
- generic: 分镜 5
- generic: 43.13s
- generic [ref=e382]:
- generic [ref=e384]:
- img [ref=e386]
- generic [ref=e391]: 元素改造 · Storyboard
- generic [ref=e392]:
- img [ref=e393]
- button "钉住 · 锁定位置与尺寸" [ref=e397]:
- img [ref=e398]
- generic [ref=e401]:
- generic [ref=e402]: STEP 6 · 参考元素 → SKG 画面 · 完成
- generic [ref=e403]:
- text: 不是复刻原视频:先把参考图里的主体 / 场景 / 动作 / 道具拆出来,再替换成 SKG 产品画面。
- generic [ref=e404]: 已有 1 个提取元素 · 0 个分镜进入编排
- button "进入分镜编排" [disabled] [ref=e405]
- generic "拖动调整宽度" [ref=e407]
- generic "拖动调整大小(宽 × 高)" [ref=e408]
- group [ref=e409]:
- generic [ref=e410]:
- generic [ref=e412]:
- img [ref=e414]
- generic [ref=e418]: 产品文案 · Rewrite
- button "钉住 · 锁定位置与尺寸" [ref=e421]:
- img [ref=e422]
- generic [ref=e425]:
- generic [ref=e426]: STEP 5 · 接 SKG 卖点 · 待运行
- textbox "粘贴 SKG 产品信息 / 关键卖点(可作为视频脚本和镜头动作参考)" [disabled] [ref=e427]
- generic [ref=e428]: 下一冲刺接入
- generic "拖动调整宽度" [ref=e430]
- generic "拖动调整大小(宽 × 高)" [ref=e431]
- group [ref=e432]:
- generic [ref=e434]:
- generic [ref=e436]:
- img [ref=e438]
- generic [ref=e440]: 生成视频 · Video Gen
- button "钉住 · 锁定位置与尺寸" [ref=e443]:
- img [ref=e444]
- generic [ref=e447]:
- generic [ref=e448]: STEP 7 · 首帧 + 动作 prompt · 待运行
- generic [ref=e449]:
- generic [ref=e450]: Seedance
- generic [ref=e451]: Kling
- generic [ref=e452]: Veo 3
- generic "拖动调整宽度" [ref=e454]
- generic "拖动调整大小(宽 × 高)" [ref=e455]
- group [ref=e456]:
- generic [ref=e457]:
- generic [ref=e459]:
- img [ref=e461]
- generic [ref=e465]: 合成成品 · Compose
- button "钉住 · 锁定位置与尺寸" [ref=e468]:
- img [ref=e469]
- generic [ref=e472]:
- generic [ref=e473]: STEP 8 · ffmpeg + 字幕 · 待运行
- generic [ref=e474]:
- text: 视频片段 + 字幕 / TTS
- text: → 最终 mp4 输出
- generic "拖动调整宽度" [ref=e475]
- generic "拖动调整大小(宽 × 高)" [ref=e476]
- img
- generic "Control Panel" [ref=e44]:
- button "Zoom In" [ref=e45] [cursor=pointer]:
- img [ref=e46]
- button "Zoom Out" [ref=e48] [cursor=pointer]:
- img [ref=e49]
- button "Fit View" [ref=e51] [cursor=pointer]:
- img [ref=e52]
- button "Toggle Interactivity" [ref=e54] [cursor=pointer]:
- img [ref=e55]
- img "Mini Map" [ref=e58]
- region "Notifications alt+T":
- list:
- listitem [ref=e485]:
- img [ref=e487]
- generic [ref=e490]: 📥 视频已就绪 — 请点 Input 节点里的「点这里开始解析」按钮
- alert [ref=e60]

View File

@@ -7,6 +7,7 @@ import {
type Node, type Edge,
} from "@xyflow/react"
import { Toaster, toast } from "sonner"
import { LayoutGrid } from "lucide-react"
import {
InputNode, KeyframeNode, ASRNode,
TranslateNode, RewriteNode, StoryboardNode, VideoGenNode, ComposeNode, KeyframePanelNode,
@@ -498,6 +499,54 @@ export default function Home() {
))
}, [pinnedNodes, setNodes])
// 自动排版:保留每个节点的当前宽高(用户为方便看而调过的尺寸),只重新计算 position
// 让卡片按管线列分组、列间和列内留出统一间距,不重叠。
const handleResetLayout = useCallback(() => {
const zoom = flowRef.current?.getZoom?.() ?? 1
const measure = (id: string): { w: number; h: number } => {
const el = document.querySelector(`.react-flow__node[data-id="${id}"]`) as HTMLElement | null
if (!el) return { w: 320, h: 220 }
const r = el.getBoundingClientRect()
return { w: r.width / zoom, h: r.height / zoom }
}
// 按管线列分组(顶 → 底):图层 1 输入 → 5 合成
const COLUMNS: string[][] = [
["input"],
["keyframe", "asr"],
["storyboard", "translate"],
["videogen", "rewrite"],
["compose"],
]
const GAP_X = 80
const GAP_Y = 56
const START_X = 40
const START_Y = 60
const positions: Record<string, { x: number; y: number }> = {}
let cursorX = START_X
for (const col of COLUMNS) {
let cursorY = START_Y
let colMaxW = 0
for (const id of col) {
const { w, h } = measure(id)
positions[id] = { x: cursorX, y: cursorY }
cursorY += h + GAP_Y
if (w > colMaxW) colMaxW = w
}
cursorX += colMaxW + GAP_X
}
setNodes((prev) => prev.map((n) => {
if (n.id === KEYFRAME_PANEL_ID) return n
const p = positions[n.id]
if (!p) return n
return { ...n, position: { x: p.x, y: p.y } }
}))
setTimeout(() => flowRef.current?.fitView?.({ padding: 0.12, duration: 400 }), 30)
toast.success("已自动排版 · 保留每个节点的尺寸")
}, [setNodes])
// 持久化每个节点宽 / 高到 localStorageKeyframePanelNode 自己管尺寸,不写回)
useEffect(() => {
const sizes: Record<string, NodeSize> = {}
@@ -591,6 +640,18 @@ export default function Home() {
<>
<div className="canvas-bg" />
<main className="relative h-screen w-screen overflow-hidden flex">
{/* 自动整理布局 — 主题切换上方,一键恢复默认位置和宽度 */}
<div className="absolute z-30 pointer-events-auto" style={{ bottom: 228, left: 12 }}>
<button
type="button"
onClick={handleResetLayout}
className="glass-node h-9 w-9 inline-flex items-center justify-center rounded-xl"
style={{ width: 36, height: 36, padding: 0, borderRadius: 12 }}
title="自动排版 · 保留每个节点的尺寸,重新排好间距和列布局"
>
<LayoutGrid className="h-4 w-4" />
</button>
</div>
{/* 主题切换 — 左下角 Controls 上方(错开) */}
<div className="absolute z-30 pointer-events-auto" style={{ bottom: 180, left: 12 }}>
<ThemeToggle />