auto-save 2026-05-13 21:46 (~3)
This commit is contained in:
@@ -2454,6 +2454,13 @@
|
|||||||
"type": "session-heartbeat",
|
"type": "session-heartbeat",
|
||||||
"message": "Codex 会话活跃 · 最近命令:codex · 6 项未提交变更 · 最近提交:auto-save 2026-05-13 21:35 (~6)",
|
"message": "Codex 会话活跃 · 最近命令:codex · 6 项未提交变更 · 最近提交:auto-save 2026-05-13 21:35 (~6)",
|
||||||
"files_changed": 6
|
"files_changed": 6
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ts": "2026-05-13T21:41:08+08:00",
|
||||||
|
"type": "commit",
|
||||||
|
"message": "auto-save 2026-05-13 21:40 (~6)",
|
||||||
|
"hash": "97d6104",
|
||||||
|
"files_changed": 6
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -830,6 +830,18 @@ api/main.py
|
|||||||
<h2>变更记录</h2>
|
<h2>变更记录</h2>
|
||||||
<p>这个记录不是 git log 的替代品。它记录“产品理解发生了什么变化、影响了哪些源码、你以后描述需求时该怎么说”。后续每次改功能都要补一条。</p>
|
<p>这个记录不是 git log 的替代品。它记录“产品理解发生了什么变化、影响了哪些源码、你以后描述需求时该怎么说”。后续每次改功能都要补一条。</p>
|
||||||
<div class="changelog">
|
<div class="changelog">
|
||||||
|
<article class="change">
|
||||||
|
<header>
|
||||||
|
<h3>2026-05-13 · 生视频提示词改为产品图优先</h3>
|
||||||
|
<span class="tag blue">Prompt</span>
|
||||||
|
<span class="tag violet">StoryboardWorkbench</span>
|
||||||
|
</header>
|
||||||
|
<div class="body">
|
||||||
|
<p><strong>问题:</strong>已经有真实 SKG 产品图后,提示词还偏“借鉴原视频”,容易让模型保留竞品或改变产品形态。</p>
|
||||||
|
<p><strong>改动:</strong>生成视频 prompt 明确“上传的 SKG 产品图是唯一产品真源”,首尾帧只控制起止构图、场景和动作,原视频链接只参考节奏和镜头调度;增加产品一致性、产品呈现、禁止非 SKG 产品/竞品包装/随机新增结构等约束。</p>
|
||||||
|
<p><strong>影响:</strong><code>web/app/page.tsx</code>。</p>
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
<article class="change">
|
<article class="change">
|
||||||
<header>
|
<header>
|
||||||
<h3>2026-05-13 · 产品参考支持本地上传和拖拽</h3>
|
<h3>2026-05-13 · 产品参考支持本地上传和拖拽</h3>
|
||||||
|
|||||||
@@ -254,15 +254,19 @@ export default function Home() {
|
|||||||
? `参考元素:${frame.description.objects.slice(0, 6).map((o) => o.name).join("、")}`
|
? `参考元素:${frame.description.objects.slice(0, 6).map((o) => o.name).join("、")}`
|
||||||
: ""
|
: ""
|
||||||
const subjectDirection = scene.subject?.trim()
|
const subjectDirection = scene.subject?.trim()
|
||||||
|| "保留参考里的主体位置和动作关系,但人物/主体改成干净可信的 SKG 产品演示语境;不要保留医疗骨架、竞品或原视频人物设定,除非用户明确写了要保留。"
|
|| "保留首尾帧里的主体位置、手部动作关系和镜头调度,但人物/主体必须服务于 SKG 产品演示;不要保留医疗骨架、竞品或原视频人物设定,除非用户明确写了要保留。"
|
||||||
const productDirection = scene.product?.trim()
|
const productDirection = scene.product?.trim()
|
||||||
|| "让 SKG 产品成为清晰可见的视觉主角,产品轮廓稳定,位置连续,不要在镜头中变成其他物体。"
|
|| "以已上传 SKG 产品图为唯一产品真源,把参考视频或首尾帧里的任何非 SKG 产品替换成该产品;产品轮廓、颜色、材质、按键/接口/包装比例必须稳定,不要变成其他物体。"
|
||||||
const sceneDirection = scene.scene?.trim()
|
const sceneDirection = scene.scene?.trim()
|
||||||
|| "借鉴参考画面的构图、可信感和空间层次,但改造成适合 SKG 产品广告的现代家居、办公或零售场景。"
|
|| "借鉴参考画面的构图、可信感和空间层次,但改造成适合 SKG 产品广告的现代家居、办公或零售场景。"
|
||||||
const actionDirection = scene.action?.trim()
|
const actionDirection = scene.action?.trim()
|
||||||
|| "按首帧到尾帧做平滑过渡,动作连续自然,镜头运动稳定,最后准确停在尾帧意图。"
|
|| "按首帧到尾帧做平滑过渡,动作连续自然,镜头运动稳定,最后准确停在尾帧意图。"
|
||||||
const prompt = [
|
const prompt = [
|
||||||
`竖屏 9:16,${duration.toFixed(1)} 秒,SKG 产品短视频广告。`,
|
`竖屏 9:16,${duration.toFixed(1)} 秒,SKG 产品短视频广告。`,
|
||||||
|
productRefs.length
|
||||||
|
? `已上传 ${productRefs.length} 张 SKG 真实产品参考图。产品参考图是唯一产品真源:视频中出现的产品必须严格匹配这些图的外观、颜色、材质、结构比例和关键细节。`
|
||||||
|
: "未上传产品图时,仍需生成一个干净高级的 SKG 产品广告画面,但不得保留原视频里的竞品包装或平台元素。",
|
||||||
|
"首帧和尾帧只用于控制画面起止、构图、场景和动作方向;如果首尾帧里有竞品、文字包装或非 SKG 产品,必须替换为上传的 SKG 产品参考。",
|
||||||
"使用首帧和尾帧生成连续过渡视频:首帧必须严格作为视频开始画面,尾帧必须作为视频结束目标画面,中间只做自然运动补间。",
|
"使用首帧和尾帧生成连续过渡视频:首帧必须严格作为视频开始画面,尾帧必须作为视频结束目标画面,中间只做自然运动补间。",
|
||||||
"生成一段单镜头连续视频,一镜到底,从首帧平滑过渡到尾帧;不要跳切,不要突然换场景,不要突然换主体,不要蒙太奇,不要多镜头拼接。",
|
"生成一段单镜头连续视频,一镜到底,从首帧平滑过渡到尾帧;不要跳切,不要突然换场景,不要突然换主体,不要蒙太奇,不要多镜头拼接。",
|
||||||
"如果提供了原视频链接,把它只作为节奏、镜头运动、动作顺序和画面调度参考;不要照搬原视频里的品牌、文字、水印、竞品产品或具体人物。",
|
"如果提供了原视频链接,把它只作为节奏、镜头运动、动作顺序和画面调度参考;不要照搬原视频里的品牌、文字、水印、竞品产品或具体人物。",
|
||||||
@@ -274,13 +278,14 @@ export default function Home() {
|
|||||||
`首帧:${labelOf(firstRef, "当前分镜关键帧")}`,
|
`首帧:${labelOf(firstRef, "当前分镜关键帧")}`,
|
||||||
`尾帧:${labelOf(lastRef, "未指定,按首帧小幅自然运动收尾")}`,
|
`尾帧:${labelOf(lastRef, "未指定,按首帧小幅自然运动收尾")}`,
|
||||||
`SKG 产品参考:${productRefs.length ? productRefs.map((ref, i) => `${i + 1}. ${labelOf(ref, "SKG 产品角度")}`).join(";") : "SKG 产品视觉主角"}`,
|
`SKG 产品参考:${productRefs.length ? productRefs.map((ref, i) => `${i + 1}. ${labelOf(ref, "SKG 产品角度")}`).join(";") : "SKG 产品视觉主角"}`,
|
||||||
`动作参考:${labelOf(scene.action_image, "自然拿取、佩戴、展示或靠近产品的动作")}`,
|
|
||||||
sourceScene,
|
sourceScene,
|
||||||
sourceStyle,
|
sourceStyle,
|
||||||
sourceObjects,
|
sourceObjects,
|
||||||
|
"产品一致性要求:整个视频只能出现同一个 SKG 产品或同一套产品包装;不要生成第二种产品,不要改变 logo/形状/颜色,不要凭空增加按钮、屏幕、线缆、文字标签或说明书。",
|
||||||
|
"产品呈现要求:至少一次让产品清晰占据画面视觉中心,边缘清楚、材质真实、比例可信;手部接触产品时不要遮挡关键外观,产品不能融化、扭曲、穿帮或漂移。",
|
||||||
"运动要求:动作幅度小而连续,速度均匀,手部和产品位置前后一致,产品外形不变形,人物表情和姿态不漂移,背景只允许轻微景深和光影变化。",
|
"运动要求:动作幅度小而连续,速度均匀,手部和产品位置前后一致,产品外形不变形,人物表情和姿态不漂移,背景只允许轻微景深和光影变化。",
|
||||||
"商业质感:真实拍摄感,干净高级,柔和稳定打光,产品边缘清晰,材质真实,画面无抖动、无拉伸、无闪烁。",
|
"商业质感:真实拍摄感,干净高级,柔和稳定打光,产品边缘清晰,材质真实,画面无抖动、无拉伸、无闪烁。",
|
||||||
"禁止:字幕、文字、平台 UI、TikTok 水印、logo 水印、免责声明、竞品包装、随机新物体、医学骨架、夸张病症画面、恐怖元素、画面撕裂、人物或产品突然变形。",
|
"禁止:字幕、文字、平台 UI、TikTok 水印、logo 水印、免责声明、竞品包装、随机新物体、非 SKG 产品、医学骨架、夸张病症画面、恐怖元素、画面撕裂、人物或产品突然变形。",
|
||||||
].join("\n")
|
].join("\n")
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|||||||
Reference in New Issue
Block a user