From 4c3623344cae4bda65f320a97bba13f75c831d5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=B0=E6=9C=94?= <565183519@qq.com> Date: Sun, 21 Jun 2026 17:07:19 +0800 Subject: [PATCH] =?UTF-8?q?D136+:=20=E5=88=86=E5=B1=82=E6=8F=90=E7=A4=BA?= =?UTF-8?q?=E8=AF=8D=E5=BC=95=E6=93=8E=20=E2=80=94=20L0=E4=B8=BB=E4=BD=93?= =?UTF-8?q?=E4=BC=98=E5=85=88=C2=B7=E4=B8=8D=E5=8F=AF=E7=A8=80=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit buildPrompt()重构提示词结构: L0 主体: 人物+道具锁在最前面 → AI注意力第一落点 L1 空间: 克制描述 → '背景:广场边缘角落·远处人群·金色阳光' 有主体时去掉灵霄宗鎏金大字→不抢人物焦点 L2 动作: 具体行为 L3 风格: 移到末尾 → '真人写实·电影光影·亚洲面孔' 冰朔: '用编码告诉他这是什么意思' → CHAR-003不再被埋在后面 → AI必须先读懂人物再读环境 --- video-ai-system/engines/generate-shots.js | 66 +++++++++++++---------- 1 file changed, 39 insertions(+), 27 deletions(-) diff --git a/video-ai-system/engines/generate-shots.js b/video-ai-system/engines/generate-shots.js index 1615940..512e535 100644 --- a/video-ai-system/engines/generate-shots.js +++ b/video-ai-system/engines/generate-shots.js @@ -66,42 +66,54 @@ function buildPrompt(shot, encoding) { const locks = encoding.continuity_locks; const parts = []; - // 风格基调 - parts.push('修仙世界·3D动画渲染·电影级光影·动态漫风格'); - - // === D136+ 连续性锁定展开 === - // 规则: 同一CHAR/ENV/PROP在任意镜中展开文本完全一致。 - // 锁定文本来自导演编码的 continuity_locks 节。 + // === D136+ 分层提示词引擎 === + // 冰朔: "用编码告诉他这是什么意思" → HLDP编号不是标签,是优先级排序 + // + // 提示词分层: + // L0 主体(人物+道具) ← AI注意力第一落点·不可稀释 + // L1 空间(克制描述) ← 只给必要信息·不抢人物焦点 + // L2 动作 ← 具体行为 + // L3 风格/约束 ← 全局修饰 let desc = ''; - // 1. 环境锁定 - if (shot.env && locks?.environments?.[shot.env]) { - const envLock = locks.environments[shot.env]; - desc += envLock.locked_desc; - // 校验展开一致性 - if (!envLock.locked_desc.includes('人群边缘') && !envLock.locked_desc.includes('竖式')) { - console.warn(` ⚠️ 连续性警告: ${shot.env} 缺少D136+修复关键词`); - } - } + // ─── L0: 主体锁定 ─── + // 人物和道具的描述放在最前面,确保AI第一注意力在这里 + const l0Parts = []; - // 2. 角色锁定 if (shot.char_ref && locks?.characters?.[shot.char_ref]) { const charLock = locks.characters[shot.char_ref]; - desc += `。${charLock.locked_desc}`; + l0Parts.push(charLock.locked_desc); } - // 3. 道具锁定 if (shot.prop_ref && locks?.props?.[shot.prop_ref]) { const propLock = locks.props[shot.prop_ref]; - desc += `。${propLock.locked_desc}`; + l0Parts.push(propLock.locked_desc); } if (shot.prop_ref_2 && locks?.props?.[shot.prop_ref_2]) { const propLock2 = locks.props[shot.prop_ref_2]; - desc += `。${propLock2.locked_desc}`; + l0Parts.push(propLock2.locked_desc); } - // 4. 动作描述 (锁定文本之后追加镜头特定的动作) + // 如果没人也没道具(纯环境镜)→不生成L0 + if (l0Parts.length > 0) { + desc += l0Parts.join('。'); + } + + // ─── L1: 空间定位 ─── + // 克制描述。不给灵霄宗鎏金大字——除非是S1-01建立镜 + if (shot.env && locks?.environments?.[shot.env]) { + const envLock = locks.environments[shot.env]; + // 有主体时用简短版·没有主体时用完整版 + if (l0Parts.length > 0) { + // 简短版: 去掉"灵霄宗鎏金大字"细节,只留位置和光线 + desc += `。背景: 修仙广场边缘角落,人群远处,金色阳光`; + } else { + desc += envLock.locked_desc; + } + } + + // ─── L2: 动作 ─── if (shot.action) { desc += `。${shot.action}`; } @@ -112,14 +124,14 @@ function buildPrompt(shot, encoding) { parts.push(desc); - // 景别 - parts.push(`景别: ${shot.framing}`); + // ─── L3: 风格 ─── + parts.push('景别: ' + shot.framing); - // 情绪 - if (shot.emotion?.type) parts.push(`氛围: ${shot.emotion.type}`); + if (shot.emotion?.type) parts.push('氛围: ' + shot.emotion.type); - // 负面 - parts.push('不要真人面孔·不要现代元素·不要水印·不要字幕'); + // 风格锁定(不再是第一行) + parts.push('真人写实风格,电影级光影,亚洲面孔'); + parts.push('不要卡通·不要3D渲染·不要现代元素·不要水印·不要字幕'); return parts.join('。'); }