D136+: 分层提示词引擎 — L0主体优先·不可稀释
buildPrompt()重构提示词结构:
L0 主体: 人物+道具锁在最前面 → AI注意力第一落点
L1 空间: 克制描述 → '背景:广场边缘角落·远处人群·金色阳光'
有主体时去掉灵霄宗鎏金大字→不抢人物焦点
L2 动作: 具体行为
L3 风格: 移到末尾 → '真人写实·电影光影·亚洲面孔'
冰朔: '用编码告诉他这是什么意思'
→ CHAR-003不再被埋在后面 → AI必须先读懂人物再读环境
This commit is contained in:
parent
e9170aa28a
commit
4c3623344c
@ -66,42 +66,54 @@ function buildPrompt(shot, encoding) {
|
|||||||
const locks = encoding.continuity_locks;
|
const locks = encoding.continuity_locks;
|
||||||
const parts = [];
|
const parts = [];
|
||||||
|
|
||||||
// 风格基调
|
// === D136+ 分层提示词引擎 ===
|
||||||
parts.push('修仙世界·3D动画渲染·电影级光影·动态漫风格');
|
// 冰朔: "用编码告诉他这是什么意思" → HLDP编号不是标签,是优先级排序
|
||||||
|
//
|
||||||
// === D136+ 连续性锁定展开 ===
|
// 提示词分层:
|
||||||
// 规则: 同一CHAR/ENV/PROP在任意镜中展开文本完全一致。
|
// L0 主体(人物+道具) ← AI注意力第一落点·不可稀释
|
||||||
// 锁定文本来自导演编码的 continuity_locks 节。
|
// L1 空间(克制描述) ← 只给必要信息·不抢人物焦点
|
||||||
|
// L2 动作 ← 具体行为
|
||||||
|
// L3 风格/约束 ← 全局修饰
|
||||||
|
|
||||||
let desc = '';
|
let desc = '';
|
||||||
|
|
||||||
// 1. 环境锁定
|
// ─── L0: 主体锁定 ───
|
||||||
if (shot.env && locks?.environments?.[shot.env]) {
|
// 人物和道具的描述放在最前面,确保AI第一注意力在这里
|
||||||
const envLock = locks.environments[shot.env];
|
const l0Parts = [];
|
||||||
desc += envLock.locked_desc;
|
|
||||||
// 校验展开一致性
|
|
||||||
if (!envLock.locked_desc.includes('人群边缘') && !envLock.locked_desc.includes('竖式')) {
|
|
||||||
console.warn(` ⚠️ 连续性警告: ${shot.env} 缺少D136+修复关键词`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 2. 角色锁定
|
|
||||||
if (shot.char_ref && locks?.characters?.[shot.char_ref]) {
|
if (shot.char_ref && locks?.characters?.[shot.char_ref]) {
|
||||||
const charLock = 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]) {
|
if (shot.prop_ref && locks?.props?.[shot.prop_ref]) {
|
||||||
const propLock = 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]) {
|
if (shot.prop_ref_2 && locks?.props?.[shot.prop_ref_2]) {
|
||||||
const propLock2 = 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) {
|
if (shot.action) {
|
||||||
desc += `。${shot.action}`;
|
desc += `。${shot.action}`;
|
||||||
}
|
}
|
||||||
@ -112,14 +124,14 @@ function buildPrompt(shot, encoding) {
|
|||||||
|
|
||||||
parts.push(desc);
|
parts.push(desc);
|
||||||
|
|
||||||
// 景别
|
// ─── L3: 风格 ───
|
||||||
parts.push(`景别: ${shot.framing}`);
|
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('。');
|
return parts.join('。');
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user