auto-save 2026-05-13 21:24 (~6)
This commit is contained in:
@@ -250,6 +250,7 @@ export default function Home() {
|
||||
`竖屏 9:16,${duration.toFixed(1)} 秒,SKG 产品短视频广告。`,
|
||||
"直接根据当前分镜关键帧生成视频。必须使用输入的完整视频关键帧作为第一帧和视觉锚点:第一帧构图、主体位置、透视关系和光线方向保持稳定,然后从这一帧自然动起来。",
|
||||
"生成一段单镜头连续视频,一镜到底,不要跳切,不要突然换场景,不要突然换主体,不要蒙太奇,不要多镜头拼接。",
|
||||
"如果提供了原视频链接,把它只作为节奏、镜头运动、动作顺序和画面调度参考;不要照搬原视频里的品牌、文字、水印、竞品产品或具体人物。",
|
||||
"时间线:0%-25% 保持首帧构图并轻微启动;25%-70% 做一个清晰、缓慢、可信的产品展示动作;70%-100% 镜头自然停稳在 SKG 产品或使用效果特写。",
|
||||
`主体改造:${subjectDirection}`,
|
||||
`产品替换:${productDirection}`,
|
||||
@@ -274,6 +275,7 @@ export default function Home() {
|
||||
frame_idx: frameIdx,
|
||||
label: `分镜 ${frameIdx + 1} 关键帧`,
|
||||
}
|
||||
const sourceUrl = job.url?.trim()
|
||||
const updated = await generateStoryboardVideo(job.id, frameIdx, {
|
||||
prompt,
|
||||
duration,
|
||||
@@ -281,6 +283,7 @@ export default function Home() {
|
||||
scene_image: null,
|
||||
product_image: null,
|
||||
action_image: null,
|
||||
source_ref: sourceUrl ? { kind: "source_video", url: sourceUrl } : null,
|
||||
model,
|
||||
size: "720x1280",
|
||||
})
|
||||
|
||||
@@ -122,7 +122,6 @@ export function StoryboardWorkbench({ job, selectedFrames, open, onClose, onJobU
|
||||
window.addEventListener("pointerup", onUp)
|
||||
}
|
||||
|
||||
const hasVideoRefs = !!(form.subject_image || form.scene_image || form.product_image || form.action_image)
|
||||
const currentModelLabel = VIDEO_MODELS.find((m) => m.value === videoModel)?.label ?? "Seedance"
|
||||
|
||||
return (
|
||||
@@ -303,7 +302,7 @@ export function StoryboardWorkbench({ job, selectedFrames, open, onClose, onJobU
|
||||
</div>
|
||||
</div>
|
||||
<button
|
||||
disabled={!hasVideoRefs || focusedIdx === null || generating}
|
||||
disabled={focusedIdx === null || generating}
|
||||
onClick={async () => {
|
||||
if (focusedIdx === null) return
|
||||
queueSave(form)
|
||||
@@ -315,13 +314,13 @@ export function StoryboardWorkbench({ job, selectedFrames, open, onClose, onJobU
|
||||
}
|
||||
}}
|
||||
className="w-full py-3 rounded-lg text-[13.5px] font-semibold inline-flex items-center justify-center gap-2 bg-gradient-to-r from-rose-500 to-violet-500 text-white border border-violet-300/40 shadow-lg shadow-violet-500/20 hover:from-rose-400 hover:to-violet-400 disabled:opacity-40 disabled:cursor-not-allowed"
|
||||
title={hasVideoRefs ? `调用 ${currentModelLabel} 生视频 API,结果进入 Video Gen 节点` : "先粘贴至少一张参考图"}
|
||||
title={`用当前分镜关键帧作为首帧,调用 ${currentModelLabel} 生视频 API`}
|
||||
>
|
||||
{generating ? <Loader2 className="h-4 w-4 animate-spin" /> : <Wand2 className="h-4 w-4" />}
|
||||
调用 {currentModelLabel} 生成视频
|
||||
用当前关键帧生成视频
|
||||
</button>
|
||||
<div className="mt-2 text-[10.5px] text-white/35 leading-relaxed">
|
||||
用当前 4 图槽、改造目标和时长提交生视频 API;生成中的进度和完成后的 MP4 会显示在 Video Gen 节点。
|
||||
直接用当前分镜关键帧作为首帧快速出片;4 图槽和改造目标只作为提示词参考,生成中的进度和完成后的 MP4 会显示在 Video Gen 节点。
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
@@ -382,6 +382,7 @@ export async function generateStoryboardVideo(
|
||||
scene_image?: ImageRef | null
|
||||
product_image?: ImageRef | null
|
||||
action_image?: ImageRef | null
|
||||
source_ref?: { kind: "image" | "source_video"; url: string } | null
|
||||
model?: string
|
||||
size?: string
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user