diff --git a/.memory/worklog.json b/.memory/worklog.json index e9f5f07..220fadc 100644 --- a/.memory/worklog.json +++ b/.memory/worklog.json @@ -1735,6 +1735,13 @@ "type": "session-heartbeat", "message": "Claude 会话活跃 · 最近命令:claude · 2 项未提交变更 · 最近提交:auto-save 2026-05-13 14:54 (~2)", "files_changed": 2 + }, + { + "ts": "2026-05-13T15:00:36+08:00", + "type": "commit", + "message": "auto-save 2026-05-13 15:00 (~2)", + "hash": "dfa5600", + "files_changed": 2 } ] } diff --git a/web/components/storyboard-bar.tsx b/web/components/storyboard-bar.tsx index 1e79628..d0fdea0 100644 --- a/web/components/storyboard-bar.tsx +++ b/web/components/storyboard-bar.tsx @@ -32,13 +32,21 @@ export function StoryboardBar({ job, selectedFrames, focusedFrame, onFocusFrame ) // focused 分镜数据 - const focusFrame = focusedFrame !== null - ? job.frames.find((f) => f.index === focusedFrame) ?? null - : null - const focusSeq = focusFrame - ? job.frames.filter((f) => selectedFrames.has(f.index) && f.timestamp <= focusFrame.timestamp).length - : 0 - const focusElements = focusFrame?.elements ?? [] + // 所有"已进入分镜阶段"的提取图(按分镜时间序展平) + type Shot = { frameIdx: number; seq: number; elementId: string; elementName: string; cid: string; isLegacy: boolean } + const allShots: Shot[] = [] + frames.forEach((f, i) => { + const seq = i + 1 + ;(f.elements ?? []).forEach((e) => { + if (e.cutouts && e.cutouts.length > 0) { + e.cutouts.forEach((cid) => allShots.push({ + frameIdx: f.index, seq, elementId: e.id, elementName: e.name_zh, cid, isLegacy: false, + })) + } else if (e.cutout_id) { + allShots.push({ frameIdx: f.index, seq, elementId: e.id, elementName: e.name_zh, cid: e.cutout_id, isLegacy: true }) + } + }) + }) return (