From 3b1ab3920181767686be1b9355c266fdcacae63b Mon Sep 17 00:00:00 2001 From: kang Date: Thu, 14 May 2026 03:42:50 +0800 Subject: [PATCH] auto-save 2026-05-14 03:42 (~3) --- .memory/worklog.json | 13 +++++++++++++ docs/source-analysis.html | 24 ++++++++++++++++++++++++ web/components/nodes/index.tsx | 23 +++++++++++++++-------- 3 files changed, 52 insertions(+), 8 deletions(-) diff --git a/.memory/worklog.json b/.memory/worklog.json index 95821e2..dc53248 100644 --- a/.memory/worklog.json +++ b/.memory/worklog.json @@ -3076,6 +3076,19 @@ "type": "session-heartbeat", "message": "Claude 会话活跃 · 最近命令:claude · 3 项未提交变更 · 最近提交:auto-save 2026-05-14 03:31 (~4)", "files_changed": 3 + }, + { + "ts": "2026-05-14T03:37:19+08:00", + "type": "commit", + "message": "auto-save 2026-05-14 03:37 (~5)", + "hash": "26a43fc", + "files_changed": 5 + }, + { + "ts": "2026-05-13T19:38:49Z", + "type": "session-heartbeat", + "message": "Codex 会话活跃 · 最近命令:codex · 1 项未提交变更 · 最近提交:auto-save 2026-05-14 03:37 (~5)", + "files_changed": 1 } ] } diff --git a/docs/source-analysis.html b/docs/source-analysis.html index 26ac2f1..5e24d79 100644 --- a/docs/source-analysis.html +++ b/docs/source-analysis.html @@ -817,6 +817,30 @@ api/main.py

变更记录

这个记录不是 git log 的替代品。它记录“产品理解发生了什么变化、影响了哪些源码、你以后描述需求时该怎么说”。后续每次改功能都要补一条。

+
+
+

2026-05-14 · 视频抽帧面板默认静音播放

+ Input + Video +
+
+

问题:输入视频缩略图改为单击打开抽帧面板后,面板播放器如果自动播放带声音,会打断工作流。

+

改动:VideoFramePanelNode 的主播放器增加 muted,默认静音自动播放;用户仍可通过浏览器视频 controls 自行取消静音。

+

影响:web/components/nodes/index.tsxdocs/source-analysis.html

+
+
+
+
+

2026-05-14 · Canvas Panel 颜色跟随来源卡片且视频单击打开

+ Canvas Panel + UX +
+
+

问题:视频抽帧面板和画面工作台详情面板框架一致后,标题栏颜色也需要分别跟各自来源卡片一致;输入视频缩略图仍需要双击才能打开抽帧面板,操作偏重。

+

改动:视频抽帧面板标题栏使用 --grad-input,画面工作台详情面板标题栏使用 --grad-ai;输入视频缩略图改为单击打开抽帧面板,hover 仍负责尺寸预览。

+

影响:web/components/nodes/index.tsxdocs/source-analysis.html。后续面板颜色应从来源卡片类型继承。

+
+

2026-05-14 · 画面工作台详情面板统一为 Canvas Panel 框架

diff --git a/web/components/nodes/index.tsx b/web/components/nodes/index.tsx index 8909e23..caeff2f 100644 --- a/web/components/nodes/index.tsx +++ b/web/components/nodes/index.tsx @@ -458,10 +458,10 @@ export function InputNode({ data, selected }: NodeProps<{ data: NodeData }> | an type="button" onClick={(e) => { e.stopPropagation() - // 单击:钉住 / 取消钉住大预览 + 切换 active(若需要) - const anchor = canvasThumbnailAnchor(rootRef.current, e.currentTarget) - setPinnedPreviewJob((prev) => (prev?.id === j.id ? null : { id: j.id, ...anchor })) - if (!isActive && ready) d.onSwitchJob(j.id) + if (!ready) return + setPinnedPreviewJob(null) + if (!isActive) d.onSwitchJob(j.id) + d.onOpenVideoPanel?.(j.id) }} onDoubleClick={(e) => { e.stopPropagation() @@ -471,7 +471,7 @@ export function InputNode({ data, selected }: NodeProps<{ data: NodeData }> | an d.onOpenVideoPanel?.(j.id) } }} - title={ready ? `${j.width}×${j.height} · ${(j.duration ?? 0).toFixed(1)}s · 单击钉住大预览 · 双击打开抽帧面板` : "下载中…"} + title={ready ? `${j.width}×${j.height} · ${(j.duration ?? 0).toFixed(1)}s · 单击打开抽帧面板` : "下载中…"} className="absolute inset-0 w-full h-full overflow-hidden rounded-md" > {ready ? ( @@ -747,7 +747,10 @@ export function VideoFramePanelNode({ data }: any) { boxShadow: "0 30px 80px -20px rgba(0,0,0,0.75), 0 0 0 1px rgba(255,255,255,0.05)", }} > -
+
视频抽帧 · Input @@ -792,6 +795,7 @@ export function VideoFramePanelNode({ data }: any) { src={videoUrl(panelJob.id)} controls autoPlay + muted playsInline preload="auto" onTimeUpdate={(e) => setCurrentT((e.target as HTMLVideoElement).currentTime)} @@ -1583,7 +1587,10 @@ export function KeyframePanelNode({ data }: any) { boxShadow: "0 30px 80px -20px rgba(0,0,0,0.75), 0 0 0 1px rgba(255,255,255,0.05)", }} > -
+
关键帧详情 · 元素提取 @@ -1687,7 +1694,7 @@ export function KeyframePanelNode({ data }: any) {