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('。'); }