auto-save 2026-05-14 06:11 (~6)
This commit is contained in:
@@ -1257,18 +1257,6 @@ export function VisualLabNode({ data, selected }: any) {
|
||||
borderClass: f.quality_report?.risk === "bad" ? "border-rose-300/70" : f.quality_report?.risk === "warn" ? "border-amber-300/70" : "border-orange-300/50",
|
||||
aspect,
|
||||
})) : []),
|
||||
...sceneAssets.map((p) => ({
|
||||
id: `scene:${p.frameIdx}:${p.assetId}`,
|
||||
kind: "scene" as const,
|
||||
group: "场景图",
|
||||
frameIdx: p.frameIdx,
|
||||
assetId: p.assetId,
|
||||
src: p.src,
|
||||
label: p.label,
|
||||
caption: `${p.width}×${p.height}`,
|
||||
borderClass: p.risk === "bad" ? "border-rose-300/70" : p.risk === "warn" ? "border-amber-300/70" : "border-emerald-300/60",
|
||||
aspect: p.width && p.height ? `${p.width}/${p.height}` : aspect,
|
||||
})),
|
||||
...subjectAssets.map((p) => ({
|
||||
id: `subject:${p.frameIdx}:${p.assetId}`,
|
||||
kind: "subject" as const,
|
||||
@@ -1281,6 +1269,18 @@ export function VisualLabNode({ data, selected }: any) {
|
||||
borderClass: "border-violet-300/65",
|
||||
aspect: p.width && p.height ? `${p.width}/${p.height}` : "1/1",
|
||||
})),
|
||||
...sceneAssets.map((p) => ({
|
||||
id: `scene:${p.frameIdx}:${p.assetId}`,
|
||||
kind: "scene" as const,
|
||||
group: "场景图",
|
||||
frameIdx: p.frameIdx,
|
||||
assetId: p.assetId,
|
||||
src: p.src,
|
||||
label: p.label,
|
||||
caption: `${p.width}×${p.height}`,
|
||||
borderClass: p.risk === "bad" ? "border-rose-300/70" : p.risk === "warn" ? "border-amber-300/70" : "border-emerald-300/60",
|
||||
aspect: p.width && p.height ? `${p.width}/${p.height}` : aspect,
|
||||
})),
|
||||
...videos.map((v, i) => {
|
||||
const videoSrc = apiAssetUrl(v.url)
|
||||
const posterSrc = apiAssetUrl(v.poster_url)
|
||||
@@ -1556,19 +1556,6 @@ export function VisualLabNode({ data, selected }: any) {
|
||||
</div>
|
||||
<div>关键帧素材</div>
|
||||
</button>
|
||||
<button
|
||||
type="button"
|
||||
onClick={(e) => { e.stopPropagation(); openFirstFrame() }}
|
||||
disabled={!job || frames.length === 0}
|
||||
className="min-h-14 rounded-md border border-white/10 px-2 py-2 text-left transition hover:border-emerald-300/50 hover:bg-emerald-400/10 disabled:opacity-35"
|
||||
title="生成 / 审核每张关键帧的场景图"
|
||||
>
|
||||
<div className="mb-1 flex items-center gap-1 text-[var(--text-strong)] text-[12px] font-semibold">
|
||||
<Sparkles className="h-3 w-3 text-emerald-300" />
|
||||
{sceneAssetCount}/{targetFrameCount}
|
||||
</div>
|
||||
<div>场景图</div>
|
||||
</button>
|
||||
<button
|
||||
type="button"
|
||||
onClick={(e) => { e.stopPropagation(); openFirstFrame() }}
|
||||
@@ -1582,6 +1569,19 @@ export function VisualLabNode({ data, selected }: any) {
|
||||
</div>
|
||||
<div>主体资产</div>
|
||||
</button>
|
||||
<button
|
||||
type="button"
|
||||
onClick={(e) => { e.stopPropagation(); openFirstFrame() }}
|
||||
disabled={!job || frames.length === 0}
|
||||
className="min-h-14 rounded-md border border-white/10 px-2 py-2 text-left transition hover:border-emerald-300/50 hover:bg-emerald-400/10 disabled:opacity-35"
|
||||
title="基于主体资产生成去主体 / 相似 / 换风格场景图"
|
||||
>
|
||||
<div className="mb-1 flex items-center gap-1 text-[var(--text-strong)] text-[12px] font-semibold">
|
||||
<Sparkles className="h-3 w-3 text-emerald-300" />
|
||||
{sceneAssetCount}/{targetFrameCount}
|
||||
</div>
|
||||
<div>场景图</div>
|
||||
</button>
|
||||
<button
|
||||
type="button"
|
||||
onClick={(e) => { e.stopPropagation(); d.onOpenWorkbench?.(frames.find((f) => d.selectedFrames.has(f.index))?.index ?? frames[0]?.index) }}
|
||||
@@ -1599,10 +1599,10 @@ export function VisualLabNode({ data, selected }: any) {
|
||||
<div className="mt-2 text-[10.5px] leading-snug text-[var(--text-faint)]">
|
||||
{frames.length > 0 ? (
|
||||
<>
|
||||
{cleanedCount} 已清洗 · {sceneAssetCount} 场景图 · {subjectAssetCount} 主体资产 · {targetFrameCount} 素材帧 · {completedVideos.length} 已完成
|
||||
{cleanedCount} 已清洗 · {subjectAssetCount} 主体资产 · {sceneAssetCount} 场景图 · {targetFrameCount} 素材帧 · {completedVideos.length} 已完成
|
||||
</>
|
||||
) : (
|
||||
"解析后这里变成素材准备看板:先审关键帧,再生成场景图和主体资产包。"
|
||||
"解析后这里变成素材准备看板:先审关键帧,再生成主体资产包和去主体场景图。"
|
||||
)}
|
||||
</div>
|
||||
</NodeShell>
|
||||
@@ -1771,7 +1771,7 @@ export function KeyframeNode({ data, selected }: any) {
|
||||
<span className={elementsCount > 0 ? "text-violet-300/90 font-medium" : ""}>{elementsCount} 主体候选</span>
|
||||
<br />
|
||||
<span className="text-[10.5px] text-[var(--text-faint)]">
|
||||
点缩略图 → 清洗水印 / 准备场景图和主体资产 → 改造成 SKG 画面素材
|
||||
点缩略图 → 清洗水印 / 准备主体资产和去主体场景图 → 改造成 SKG 画面素材
|
||||
</span>
|
||||
</div>
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user