From b4b2259440073e59efd20af0de0c7f9e0a56d1b5 Mon Sep 17 00:00:00 2001 From: kang Date: Sun, 17 May 2026 22:57:27 +0800 Subject: [PATCH] auto-save 2026-05-17 22:57 (~2) --- .memory/worklog.json | 53 +++--- web/components/ad-recreation-board.tsx | 221 +++++++++++++------------ 2 files changed, 140 insertions(+), 134 deletions(-) diff --git a/.memory/worklog.json b/.memory/worklog.json index 7b00255..0dc250e 100644 --- a/.memory/worklog.json +++ b/.memory/worklog.json @@ -1,32 +1,5 @@ { "entries": [ - { - "files_changed": 1, - "hash": "b88d2eb", - "message": "auto-save 2026-05-15 13:56 (~1)", - "ts": "2026-05-15T13:59:48+08:00", - "type": "commit" - }, - { - "files_changed": 1, - "message": "Codex 会话活跃 · 最近命令:codex · 1 项未提交变更 · 最近提交:auto-save 2026-05-15 13:56 (~1)", - "ts": "2026-05-15T06:04:46Z", - "type": "session-heartbeat" - }, - { - "files_changed": 1, - "hash": "3fa0345", - "message": "auto-save 2026-05-15 14:05 (~1)", - "ts": "2026-05-15T14:05:20+08:00", - "type": "commit" - }, - { - "files_changed": 1, - "hash": "84cc955", - "message": "auto-save 2026-05-15 14:10 (~1)", - "ts": "2026-05-15T14:10:50+08:00", - "type": "commit" - }, { "files_changed": 1, "message": "Codex 会话活跃 · 最近命令:codex · 1 项未提交变更 · 最近提交:auto-save 2026-05-15 14:10 (~1)", @@ -3260,6 +3233,32 @@ "message": "auto-save 2026-05-17 22:30 (~2)", "hash": "d3bcced", "files_changed": 2 + }, + { + "ts": "2026-05-17T22:35:50+08:00", + "type": "commit", + "message": "auto-save 2026-05-17 22:35 (~3)", + "hash": "18d2c5e", + "files_changed": 3 + }, + { + "ts": "2026-05-17T14:38:30Z", + "type": "session-heartbeat", + "message": "Codex 会话活跃 · 最近命令:codex · 分支 main · 1 项未提交变更 · 最近提交:auto-save 2026-05-17 22:35 (~3)", + "files_changed": 1 + }, + { + "ts": "2026-05-17T22:46:05+08:00", + "type": "commit", + "message": "fix: reorganize source video frame workflow", + "hash": "71c9a45", + "files_changed": 2 + }, + { + "ts": "2026-05-17T14:48:30Z", + "type": "session-heartbeat", + "message": "Codex 会话活跃 · 最近命令:codex · 分支 main · 1 项未提交变更 · 最近提交:fix: reorganize source video frame workflow", + "files_changed": 1 } ] } diff --git a/web/components/ad-recreation-board.tsx b/web/components/ad-recreation-board.tsx index dde72e7..4775416 100644 --- a/web/components/ad-recreation-board.tsx +++ b/web/components/ad-recreation-board.tsx @@ -808,40 +808,44 @@ export function AdRecreationBoard({ />
-
-
-
+
+
+
- + 02 +

源视频解析与参考帧

+
+
+ {job?.message || "下载源视频后解析音频,再抽参考帧并选择相似主角。"}
-

音频解析第一步

-

先把源视频下载到本地,再提取原文案、讲话人节奏和背景音;分镜、抽帧、合成先不自动跑。

-
-
- data.onTranscribeAudio?.(job?.id)}> - - 解析音频 -
+ data.onTranscribeAudio?.(job?.id)}> + + 解析音频 +
-
-
- - } title="音频文案依据" /> +
+
+ + + + +
+ +
+ + } title="文案依据" />
- {transcriptCount ? `${transcriptCount} 段` : "待解析"} - + {transcriptCount ? `${transcriptCount} 段` : "待解析"}
-
+
{audioPreview(job)}
- -
@@ -1121,7 +1125,7 @@ function AudioIntakePanel({ return (
- } title="音频解析结果" /> + } title="源视频工作区" />
{job.transcript.length} 段 {formatSeconds(job.duration)} @@ -1135,53 +1139,20 @@ function AudioIntakePanel({
-
-
- 音频波形 / 切点参考 -
- 当前 {currentTime.toFixed(1)}s - 总 {formatSeconds(timelineDuration)} - {waveTimeHint} -
-
- -
-
-
+
} title="原版视频" /> -
- {currentTime.toFixed(1)}s / {formatSeconds(timelineDuration)} - -
+ {currentTime.toFixed(1)}s
-
+
{job.video_url ? (
+
-
-
- } title="逐句时间轴" /> - {job.transcript.length} 段 -
- {job.transcript.length ? ( -
-
-
时间
-
原文 / 中文
-
-
- {job.transcript.map((segment) => { - const active = activeSegment?.index === segment.index - return ( -
{ rowRefs.current[segment.index] = node }} - onClick={() => seekTo(segment.start)} - className={`grid cursor-pointer grid-cols-[76px_minmax(0,1fr)] gap-2 border-b px-3 py-1.5 text-[11.5px] leading-snug transition last:border-b-0 ${ - active - ? "border-emerald-300/18 bg-emerald-300/[0.12] text-white" - : "border-white/8 text-white/64 hover:bg-white/[0.045]" - }`} - > -
{segment.start.toFixed(1)}-{segment.end.toFixed(1)}s
-
-
{segment.en || -}
-
{segment.zh || 翻译中}
-
-
- ) - })} +
+
+
+ 音频波形 / 切点参考 +
+ 当前 {currentTime.toFixed(1)}s + 总 {formatSeconds(timelineDuration)} + {waveTimeHint}
- ) : ( - - )} + +
+ +
+
+ } title="逐句时间轴" /> + {job.transcript.length} 段 +
+ {job.transcript.length ? ( +
+
+
时间
+
原文 / 中文
+
+
+ {job.transcript.map((segment) => { + const active = activeSegment?.index === segment.index + return ( +
{ rowRefs.current[segment.index] = node }} + onClick={() => seekTo(segment.start)} + className={`grid cursor-pointer grid-cols-[76px_minmax(0,1fr)] gap-2 border-b px-3 py-1.5 text-[11.5px] leading-snug transition last:border-b-0 ${ + active + ? "border-emerald-300/18 bg-emerald-300/[0.12] text-white" + : "border-white/8 text-white/64 hover:bg-white/[0.045]" + }`} + > +
{segment.start.toFixed(1)}-{segment.end.toFixed(1)}s
+
+
{segment.en || -}
+
{segment.zh || 翻译中}
+
+
+ ) + })} +
+
+ ) : ( + + )} +
@@ -1402,23 +1406,26 @@ function SourceReferenceBuildPanel({ {framePreviewPortal}
} title="关键帧 / 相似主角" /> - - {frames.length ? `${frames.length} 张` : "待抽帧"} · 已选 {selectedReferenceFrames.length} - -
-
+ + {frames.length ? `${frames.length} 张` : "待抽帧"} · 已选 {selectedReferenceFrames.length} + +
+
+
+
缩略图完整显示,悬停看大图。 + 点击选择主角参考
@@ -2306,12 +2313,12 @@ function AudioWaveform({ function ProfileTile({ label, value, running }: { label: string; value?: string; running?: boolean }) { return ( -
-
+
+
{label} {running ? : value ? : }
-

+

{value || (running ? "模型分析中..." : "等待音频分析结果。")}