diff --git a/.memory/worklog.json b/.memory/worklog.json index 97a0995..06b751e 100644 --- a/.memory/worklog.json +++ b/.memory/worklog.json @@ -1383,6 +1383,13 @@ "type": "session-heartbeat", "message": "Claude 会话活跃 · 最近命令:claude · 2 项未提交变更 · 最近提交:auto-save 2026-05-13 11:45 (~4)", "files_changed": 2 + }, + { + "ts": "2026-05-13T11:51:07+08:00", + "type": "commit", + "message": "auto-save 2026-05-13 11:50 (~2)", + "hash": "4135465", + "files_changed": 2 } ] } diff --git a/web/components/dashboard.tsx b/web/components/dashboard.tsx index 5ebfc93..773d049 100644 --- a/web/components/dashboard.tsx +++ b/web/components/dashboard.tsx @@ -4,7 +4,7 @@ import { createPortal } from "react-dom" import { Link2, Upload, Download, Scissors, Image as ImageIcon, Mic, Languages, FileEdit, Sparkles, Film, FileVideo, Loader2, Plus, Check, - ChevronDown, X, + ChevronDown, X, LayoutGrid, } from "lucide-react" import { type Job, type KeyFrame, frameUrl, effectiveFrameUrl, videoUrl, generateImage, selectGenerated, generatedImageUrl } from "@/lib/api" import { type NodeData } from "@/components/nodes" @@ -179,7 +179,7 @@ export const Dashboard = forwardRef(function Dashboard({ asr: hasTranscript ? `${job!.transcript.length} 段` : "—", translate: hasZh ? `${job!.transcript.filter((s) => s.zh).length} 段` : "—", rewrite: "占位", - imagegen: data.selectedFrames.size > 0 ? `${data.selectedFrames.size} 张待生` : "占位", + imagegen: data.selectedFrames.size > 0 ? `${data.selectedFrames.size} 帧待编排` : "占位", videogen: "占位", compose: "占位", } @@ -190,7 +190,7 @@ export const Dashboard = forwardRef(function Dashboard({ { key: "asr", title: "转录", type: "ai", icon: , step: 3 }, { key: "translate", title: "翻译", type: "ai", icon: , step: 4 }, { key: "rewrite", title: "改写", type: "ai", icon: , step: 5 }, - { key: "imagegen", title: "生图", type: "ai", icon: , step: 6 }, + { key: "imagegen", title: "分镜头编排", type: "ai", icon: , step: 6 }, { key: "videogen", title: "生视频", type: "ai", icon: , step: 7 }, { key: "compose", title: "合成", type: "output", icon: , step: 8 }, ] @@ -249,7 +249,7 @@ export const Dashboard = forwardRef(function Dashboard({
{/* 起点:输入(含下载+拆分) */} - {/* 分叉:上路 关键帧/生图/生视频 */} + {/* 分叉:上路 关键帧/分镜头编排/生视频 */}
@@ -603,7 +603,7 @@ export const Dashboard = forwardRef(function Dashboard({ )} - {/* ---- ImageGen — 选中关键帧每张一卡,生成 + 多版本 ---- */} + {/* ---- 分镜头编排 — 基于关键帧 + 元素 + 场景图编排(Phase 2 重写) ---- */} {key === "imagegen" && ( data.selectedFrames.size === 0 ? ( diff --git a/web/components/lightbox.tsx b/web/components/lightbox.tsx index 69f9650..91fd88b 100644 --- a/web/components/lightbox.tsx +++ b/web/components/lightbox.tsx @@ -454,7 +454,7 @@ export function FrameLightbox({ jobId, frames, activeIndex, selected, onClose, o onClick={handleApplyCleaned} disabled={applying} className="w-full px-2 py-1.5 rounded-md text-[11px] font-medium inline-flex items-center justify-center gap-1 transition bg-emerald-500 hover:bg-emerald-400 text-white disabled:opacity-40 disabled:cursor-not-allowed" - title="替换原图为这张干净版 · 后续抠图 / 生图都基于干净版" + title="替换原图为这张干净版 · 后续抠图 / 分镜头编排都基于干净版" > {applying ? : } {applying ? "替换中…" : "✓ 替换原图"} diff --git a/web/components/nodes/index.tsx b/web/components/nodes/index.tsx index 1f41c64..5282cca 100644 --- a/web/components/nodes/index.tsx +++ b/web/components/nodes/index.tsx @@ -3,7 +3,7 @@ import { useRef, useState } from "react" import { type NodeProps } from "@xyflow/react" import { Link2, Upload, Download, Scissors, Image as ImageIcon, - Mic, Languages, FileEdit, Sparkles, Film, FileVideo, Loader2, Plus, X, + Mic, Languages, FileEdit, Sparkles, Film, FileVideo, Loader2, Plus, X, LayoutGrid, } from "lucide-react" import { NodeShell, type NodeStatus, type NodeKind } from "./node-shell" import { type Job, frameUrl, effectiveFrameUrl, videoUrl, generatedImageUrl } from "@/lib/api" @@ -403,7 +403,7 @@ export function KeyframeNode({ data, selected }: any) { {f.timestamp.toFixed(1)}s
- {/* Hover 静态大图预览(关键帧是给下游生图垫图的素材,不需要视频) */} + {/* Hover 静态大图预览(关键帧素材给下游分镜头编排用) */}
) : ( -
-
- nano-banana-pro
Gemini 3 Image -
-
- GPT Image
OpenAI -
+
+ 编排素材待接入 +
+ 关键帧节点提取的元素 + 干净版场景图 → 这里做多视角 / 风格融合 / 分镜布局
)}