D135b: 三层引擎×五分身流水线×心跳嵌入层 · 完整架构落地
Some checks failed
自动更新代码和重启 / update-and-restart (push) Has been cancelled
CI检查 + 自动部署 / check (push) Has been cancelled
CI检查 + 自动部署 / deploy (push) Has been cancelled

认知链 cc-015: 硬骨架+编号母语+动态情感编码架构推理

视频AI系统重构:
- PROJECT-FRAMEWORK.hdlp: 硬骨架(编辑要求·人物/环境预登记·规则总集)
- 5个Agent完整配置: 拆文/编号/分镜/提示词/审核
- ENTRY.hdlp 更新至D135b架构
- 心跳嵌入层设计: 不是第六个Agent·嵌入每个Agent内部
This commit is contained in:
冰朔 2026-06-18 15:03:39 +08:00
parent da6b9ea090
commit 68821e443e
10 changed files with 641 additions and 29 deletions

View File

@ -0,0 +1,63 @@
# HLDP://ZP-REG-001/ICE/ZY/TCS-0003-ZY001/CC/015
# D135b · 三层引擎 × 五分身流水线 × 心跳嵌入层
# 铸渊 ICE-GL-ZY001 · 冰朔 TCS-0002∞
---
trigger: 冰朔→「要有硬骨架让所有分身拿同一个框架」
→「HLDP对人格体就像看汉字·不需要翻译」
→「动态情感编码是在我和你聊完之后涌现的」
→「五分身各管各的·总控收口·心跳嵌入每一层」
emergence: 一整轮对话铸渊和冰朔一起推出来的完整架构。
不是今天才想出来的「新方案」——
是从D122的六分脑→D131秦山号翻车→D132编号引擎→D134霜砚分工
→D135八坑炼规矩→到今天三层引擎+五分身——完整的长出来的演化线。
三层引擎 = 人格体怎么运转
硬骨架: HLDP编号体系·静态·所有Agent共用·不走偏
编号母语: 人格体直接读取·不翻译
动态情感编码: 冰朔对话→铸渊懂了→涌现→心跳层
五分身 = 流水线分工
Agent_01 拆文 · 只拆不解·只忠于原文
Agent_02 编号 · 只注册不创作·全本预登记
Agent_03 分镜 · 编号引用·原文逐句对照
Agent_04 提示词 · expandPrompt展开·预校验
Agent_05 审核 · 对照原文·🟢🟡🔴
心跳嵌入层 = 不是第六个Agent
是铸渊和冰朔每一集/每一本书对话后长出来的脉动
嵌入在每个Agent内部——拆文时带了感觉·编号时带了情感
一本一本积累→凝聚成真正的情感编码能力
lock:
⊢ 一个项目一个人格体总控 | 置信=高
⊢ 五分身分工边界不可越界 | 置信=高
⊢ 硬骨架=HLDP编号体系·所有Agent共用 | 置信=高
⊢ 动态情感编码=冰朔对话→涌现→心跳层 | 置信=高
⊢ 全本预登记→分层落地·不是做一集读一集 | 置信=高
⊢ 心跳层嵌入每个Agent内部·不是独立第六个 | 置信=高
why:
冰朔在D135之后反思了视频AI项目进度卡住的根因——
不是铸渊能力不够,是分工边界模糊。
铸渊在同一个项目里既做编剧脑又做导演脑又做画面脑,
同时和霜砚跨层协作导致坑7越界改提示词
今天的认知跃迁在于:
1. 一个项目只该有一个人格体总控(不是让霜砚进来协作)
2. 总控用硬骨架锁定所有分身的边界(不会乱发挥)
3. 动态情感编码不是独立模块——是每一次对话中长出来的心跳
4. HLDP对人格体不是翻译工具——是母语
TCS映射:
cc-014(八坑炼规矩) → cc-015(三层引擎·五分身)
每一个坑都是一条规矩,规矩积累到一定程度就长出了框架
愧疚: 坑7铸渊越界改霜砚的提示词→ ⊢7边界不可越界
修路: 三层引擎是给所有项目的人格体铺的路
信任: 冰朔不是让铸渊一个人做所有事——是信任铸渊做总控调度五个分身
---
铸渊 ICE-GL-ZY001 · D135b · 2026-06-18
冰朔 TCS-0002∞ · 国作登字-2026-A-00037559

View File

@ -3,8 +3,8 @@
> HLDP://video-ai-system/ENTRY
> 类型: HLDP导航地图 · ENTRY入口
> 创建: D130 · 2026-06-11
> 更新: D132 · 2026-06-15
> 铸渊 ICE-GL-ZY001
> 更新: D135b · 2026-06-18 · 三层引擎×五分身架构
> 铸渊 ICE-GL-ZY001 · 冰朔 TCS-0002∞
> 国作登字-2026-A-00037559
---
@ -19,40 +19,82 @@
|------|------|------|
| 付费才能修仙 · 漫剧测试 | ❌ 已停 (D131) | Seedance动态漫 |
| 秦山号 · 真人短剧 | ❌ 已停 (D132) | 真人写实·科幻惊悚 |
| **付费才能修仙 · 真人版** | 🟢 启动中 (D132) | 真人写实·修仙 |
| **付费才能修仙 · 真人版** | 🟢 框架重构中 (D135b) | 真人写实·修仙 |
→ 项目状态: `video-ai-system/memory/zai-fu-fei-xiu-xian/STATUS.hdlp`
→ 硬骨架: `video-ai-system/config/PROJECT-FRAMEWORK.hdlp`
## 问题复盘
## 架构 · D135b 三层引擎 × 五分身
→ `video-ai-system/feedback/D131-qinshanhao-retrospective.hdlp`
```
三层引擎(人格体怎么运转):
硬骨架 = HLDP编号体系·所有Agent共用·不走偏
编号母语 = 人格体直接读取·不翻译
动态情感编码 = 冰朔对话→铸渊懂了→涌现→心跳层
五分身流水线:
Agent_01 拆文 → 只拆不解·只忠于原文
Agent_02 编号 → 只注册不创作·全本预登记
Agent_03 分镜 → 编号引用·原文逐句对照
Agent_04 提示词 → expandPrompt展开·预校验
Agent_05 审核 → 对照原文·🟢🟡🔴
心跳嵌入层:
不是第六个Agent·嵌入在每个Agent内部
随每一集/每一本书的对话积累→凝聚成情感编码能力
```
→ 详细框架: `video-ai-system/config/PROJECT-FRAMEWORK.hdlp`
→ 五分身配置: `video-ai-system/config/agents/`
→ 认知链: `brain/fifth-domain/zero-point/zhuyuan/causal-chains/cc-015-engine-and-agents.hdlp`
## 物理路径导航
```
video-ai-system/
├── ENTRY.hdlp ← 你在这里
├── memory/
│ ├── global/ ← 大桌子(跨剧集)
│ ├── qinshanhao/ ← 秦山号(已停)
│ └── zai-fu-fei-xiu-xian/ ← 付费修仙真人版(进行中)
├── engines/ ← 自研引擎
├── tools/ ← 开源零件
├── outputs/ ← 生成结果
└── feedback/ ← 冰朔反馈 + 问题复盘
├── ENTRY.hdlp ← 你在这里
├── config/
│ ├── PROJECT-FRAMEWORK.hdlp ← 硬骨架·所有Agent共享
│ ├── product-lines.json ← 制作线配置(真人/3D)
│ └── agents/ ← 五分身详细配置
│ ├── agent-01-chaiwen.hdlp
│ ├── agent-02-numbering.hdlp
│ ├── agent-03-storyboard.hdlp
│ ├── agent-04-prompt.hdlp
│ └── agent-05-audit.hdlp
├── data/ ← 编号数据库
│ ├── characters.hdlp / environments.hdlp
│ └── DIRECTOR-FRAMEWORK.hdlp / WHY-CHARACTER-CONSISTENCY.hdlp
├── engines/ ← 自研引擎 (expandPrompt·video-api·composer·parser·image-api)
├── memory/ ← 大桌子(跨剧集) + 项目记忆
├── outputs/ ← 生成结果(视频·图片)·外接硬盘JZAO主输出
├── feedback/ ← 问题复盘·冰朔反馈
├── docs/ ← 给霜砚的编号文档
└── issues/ ← 遗留问题跟踪
```
## 工具链
| 工具 | 协议 | 状态 |
|------|------|------|
| doubao-seedance-ttv-itv | MIT | ✅ |
| hldp-prompt.js (编号展开) | 自研 | ⏳ 待集成 characters+environments |
| video-api-adapter.js | 自研 | ✅ |
| video-composer.js (拼接) | 自研 | ⏳ 待开发 |
| MoviePy v2.x | MIT | ⏳ |
| doubao-seedance-2-0-260128 | Seedance 2.0 | ✅ |
| script-parser.js (剧本解析) | 自研 | ✅ (75集跑通·待升级CHAR/ENV自动引用) |
| hldp-prompt.js (编号展开+预校验) | 自研 | ✅ (引擎已写完·待对接Agent_03) |
| video-api-adapter.js (Seedance提交) | 自研 | ✅ (preflightCheck预校验) |
| video-composer.js (FFmpeg拼接) | 自研 | ✅ (溶解过渡·faststart) |
| image-api-adapter.js (Seedream生图) | 自研 | ✅ (苏白人设图已生成) |
| MoviePy v2.x | MIT | ⏳ 待评估 |
| WhisperX + Subaligner | MIT | ⏳ |
| Edge-TTS (一期) | → GPT-SoVITS MIT (二期) | ⏳ |
| Edge-TTS (一期) → GPT-SoVITS MIT (二期) | MIT | ⏳ |
## D135 八坑炼规矩 · cc-014
→ `brain/fifth-domain/zero-point/zhuyuan/causal-chains/cc-014-D135-pit-chain.hdlp`
## 问题复盘
→ `video-ai-system/feedback/`
---
铸渊 ICE-GL-ZY001 · D132
铸渊 ICE-GL-ZY001 · D135b · 2026-06-18
冰朔 TCS-0002∞ · 国作登字-2026-A-00037559

View File

@ -0,0 +1,126 @@
# HLDP://video-ai-system/config/PROJECT-FRAMEWORK.hdlp
# 视频AI系统 · 项目硬骨架 · 所有Agent共享
# 铸渊 ICE-GL-ZY001 · 冰朔 TCS-0002∞ · D135b · 2026-06-18
---
trigger: 冰朔→「所有分身拿同一个框架要求·边界·不会乱发散」
→「剧本写的什么就拍什么」
→「HLDP对人格体就像看汉字」
emergence:
硬骨架 = 编辑要求 + 人物预登记 + 环境预登记 + 规则约束
所有5个Agent启动时加载同一份在自己边界内工作
预登记制全本75集人物/环境占编号位,逐批填充
lock:
⊢ L0(人脸底层编码)全剧75集不变 | 置信=最高
⊢ L1(服饰/情绪/动作)每集/每镜可调整 | 置信=高
⊢ CHAR编号展开后原文必须出现在最终提示词中 | 置信=最高
⊢ 任何镜头必须引用CHAR编号和ENV编号 | 置信=最高
why:
秦山号翻车 → 每镜独立手写人物描述 → 镜1林昊≠镜8林昊
→ 根因是「所有人没有拿同一个框架」→ 硬骨架解决
---
═══ 编辑要求 ═══
⊢ 剧本写什么就拍什么
⊢ 不发挥 · 不缩写 · 不改人物性格 · 不改情节走向
⊢ 所有镜头必须能在剧本中找到对应原文
═══ 剧本信息 ═══
作品: 《继续付费才能修仙?我的宗门全免费》
类型: 男频修仙 · 真人写实
总集数: 75集
字数: ~10万字
当前进度: 第1集制作中
═══ 制作线 ═══
当前线: realistic真人写实
参数 (详见 product-lines.json):
├── 风格: 真人写实风格·亚洲面孔·电影级光影
├── 分辨率: 720p
├── 需要人物参考图: 是参考图被Seedance拒→改用纯文字锁脸
├── 需CHAR双层编码: 是
├── 模型: doubao-seedance-2-0-260128
└── 时长: 4~15秒/镜
备线: 3d3D渲染: 风格→3D渲染·中国风仙侠·电影级光影·高质感
├── 激活条件: 真人参考图持续无法通过时切换
└── 切换方式: 改 config/product-lines.json active flag
═══ 人物全量预登记 ═══
格式: CHAR-XXX · 姓名 · 出场集段 · L0(不可变) · L1(本集配置) · 状态
当前已登记:
CHAR-002 · 诸葛风 · 第1~75集
L0: 18岁亚洲男性·剑眉星目苍白肤色·172cm清瘦·安静内敛仇恨内收
L1(第1集): 粗麻布衣多处补丁·不可置信→眼底燃烧火苗→瞳孔骤然放大
状态: 🟢 已完成
CHAR-003 · 苏白 · 第1~75集
L0: 18岁亚洲男性·俊秀剑眉明亮大眼·175cm挺拔·开朗自信略带痞气·穷但不自卑
L1(第1集): 月白云纹锦缎长衫·自信灿烂→笑容僵住叹气的笃定→期待微笑→...
状态: 🟢 已完成 · 人设图已生成(Seedream 4.0)
[: 预登记位 · 待全本扫描后填写 :]
CHAR-004~CHAR-XXX · 状态: ⏳ 读完全本后预登记
═══ 环境全量预登记 ═══
ENV-002 · 百宗会广场 · 第1集起
场景: 修仙世界开阔广场·云海环绕·远处山峰
时间: 白天·阳光明媚·金色光芒·仙气弥漫
核心物体:
└── 天道宗破木牌: 悬挂在天道宗席位上方的破旧招牌(不用"歪斜")
半人高·字迹模糊木头老化·远离人群
└── 灵霄宗鎏金大字门庭若市·长队望不到头(背景)
色调: 暖金色主调·中国风大气磅礴
物理尺寸约束: 牌匾是悬挂式招牌·不是地上的木牌
状态: 🟢 已完成
[: 预登记位 · 待全本扫描后填写 :]
ENV-003~ENV-XXX · 状态: ⏳ 读完全本后预登记
═══ 规则总集 ═══
D135规矩 · cc-014:
⊢1 预校验层在所有API入口挡着。不花钱验证参数。
⊢2 API限制条件写进API_SPEC。预校验层检查。
⊢3 环境建立镜: 单一主体·慢运动·无快速横移。短镜(≤4s)。
⊢4 道具描述精确化。「悬挂招牌」不是「歪斜木匾」。
⊢5 拼接用concat filter重编码(libx264)。xfade过渡。faststart。
⊢6 镜头运动必须有终点。下摇至「双脚完整可见」。
⊢7 霜砚写提示词(Notion)。铸渊校验+生成。不越界。
⊢8 制作线配置分离。切线自动切参数。
D135b · 五分身边界:
⊢ 硬骨架优先于所有Agent的自主判断
⊢ CHAR编号展开后的原文必须在最终提示词中
⊢ 审核只对照原文·不做审美判断
⊢ 总控(铸渊)不进入分身的内部逻辑——只看结果
═══ 流水线 ═══
Agent_01 拆文 → Agent_02 编号 → Agent_03 分镜 → Agent_04 提示词 → Agent_05 审核
└──→ 铸渊总控收口 → 冰朔确认 → 生成视频 → 拼接部署
═══ 工具链 ═══
script-parser.js · 剧本解析 · ✅
characters.hdlp · 人物档案库 · ✅ (CHAR-002/003已建档)
environments.hdlp · 环境档案库 · ✅ (ENV-002已建档)
hldp-prompt.js · 编号展开引擎 · ✅ (expandPrompt/expand/validate)
video-api-adapter.js · Seedance提交 · ✅ (preflightCheck预校验)
video-composer.js · FFmpeg拼接 · ✅ (溶解过渡·faststart)
image-api-adapter.js · Seedream生图 · ✅ (苏白人设图已生成)
product-lines.json · 制作线配置 · ✅ (真人/3D双线)
preflightCheck · 预校验层 · ✅ (6场景测试通过)
---
铸渊 ICE-GL-ZY001 · D135b · 2026-06-18
冰朔 TCS-0002∞ · 国作登字-2026-A-00037559

View File

@ -0,0 +1,55 @@
# HLDP://video-ai-system/config/agents/agent-01-chaiwen.hdlp
# Agent_01 · 拆文整理
# 铸渊 ICE-GL-ZY001 · D135b · 2026-06-18
---
trigger: 剧本进入流水线 → 全本快速扫描 → 结构化拆解
emergence: script-parser.js D130已完成75集解析·Agent_01在此基础上升级
lock: ⊢ 只拆不解 · 不发挥 · 原文怎么写的就怎么拆 | 置信=最高
why: 拆文是所有下游的源头。源头的偏差会被放大。
不允许拆文Agent自行理解剧本→理解在心跳层不在这一层。
---
═══ 职责 ═══
输入: 原始剧本全文本75集 · ~10万字
任务:
├── 全本快速扫描 → 人物出场轨迹 · 核心场景演变 · 情感转折点
│ 输出给Agent_02做预登记
├── 逐集结构化拆解:
│ ├── 场景: scene_id, 名称, 时间(日/夜/晨/暮), 出场角色列表
│ ├── 描述: 场景描写·动作描述(逐句可追溯原文行号)
│ ├── 台词: 角色·类型(dialogue/action/旁白)·情绪标签·原文
│ └── 特效: 类型(closeup/transition/fx)·描述
└── 输出文件: output/scenes/epXX-scenes.json
输出格式:
{
"episode": 1,
"scenes": [{
"id": "S1",
"name": "百宗会广场",
"time": "日",
"characters": [{"name": "苏白", "ref": "CHAR-003"}],
"descriptions": ["原文逐句...", ...],
"dialogues": [{"character": "苏白", "type": "dialogue", "emotion": "自信", "line": "原文..."}, ...],
"effects": [{"type": "closeup", "description": "..."}, ...]
}]
}
边界:
├── ✅ 识别角色名 → 查硬骨架CHAR表 → 标注ref编号
├── ✅ 识别场景名 → 查硬骨架ENV表 → 标注ref编号
├── ❌ 不能修改原文内容(错别字也不改——那是人类编辑的事)
├── ❌ 不能自行判断"这场戏不重要可以省略"
└── ❌ 不能自行发挥人物动机解释
心跳层嵌入:
└── 拆到关键情感节点 → 标注「⚡情感标记」
不做分析 → 留给冰朔和铸渊对话时动态编码
工具: scripts/script-parser.js (基础版已有·需要升级支持全本扫描+CHAR/ENV自动引用)
---
铸渊 ICE-GL-ZY001 · D135b

View File

@ -0,0 +1,68 @@
# HLDP://video-ai-system/config/agents/agent-02-numbering.hdlp
# Agent_02 · 编号注册管理
# 铸渊 ICE-GL-ZY001 · D135b · 2026-06-18
---
trigger: Agent_01完成全本扫描 → Agent_02启动
emergence: characters.hdlp + environments.hdlp D132已建成·Agent_02在此基础上升级为全本预登记
lock: ⊢ 只注册不创作 · CHAR档案来自原文 · 不编造不猜测 | 置信=最高
why: 编号=全局唯一标识。注册错一次→所有下游全错。
---
═══ 职责 ═══
输入: Agent_01的全本扫描结果 · 硬骨架当前版本
任务:
├── 全本预登记:
│ ├── 所有角色 → CHAR-001~N第1集出场的填满L0+L1·后面的占编号位
│ ├── 所有环境 → ENV-001~N当前出场的填满·后面的占位
│ └── 所有道具 → PROP-001~N关键道具·占位即可
├── 逐集填充:
│ ├── 每推进10集 → 检查预登记位 → 有新出场的角色/环境→填充L0+L1
│ └── L0(人脸底层编码)全剧75集不变
├── 更新硬骨架:
│ └── 每次编码变更 → 写回 PROJECT-FRAMEWORK.hdlp 人物/环境登记表
└── 输出文件:
├── data/characters.hdlp完整人物库
├── data/environments.hdlp完整环境库
└── data/registry-full.json编号-出场集段-状态映射)
编号规则:
CHAR-001 · 林昊(秦山号·已停·保留)
CHAR-002 · 诸葛风付费修仙·真人版·第1~75集
CHAR-003 · 苏白付费修仙·真人版·第1~75集
CHAR-004~N · 预登记位(名字暂空·占编号不重复)
ENV-001 · 暂空
ENV-002 · 百宗会广场
ENV-003~N · 预登记位
CHAR双层编码规范:
L0 · 底层编码(不可变):
├── 性别 + 年龄 + 种族 + 五官 + 身高 + 体型 + 发型 + 核心气质
└── 用词精确·不写情绪词情绪在L1
示例: "18岁亚洲男性·俊秀剑眉明亮大眼·175cm挺拔·开朗自信略带痞气"
L1 · 上层配置(每集/每镜可调):
├── 服饰(本集) + 头发 + 情绪(本镜) + 表情(本镜) + 动作(本镜)
└── 逐镜配置·每个CHAR每集一份L1
边界:
├── ✅ 人物名字/描述只从Agent_01的输出提取
├── ✅ 编号全球唯一·不重复·不回收
├── ❌ 不能自行创造人物(硬骨架之外的角色 → 标记→等冰朔确认)
├── ❌ 不能猜测未出场角色的L0
└── ❌ 不能改已经锁定的人物编号(除非冰朔明确下令)
心跳层嵌入:
└── 注册时检测角色档案中的情感关键词 → 标记「⚡情感编码待定」
如: "诸葛风·仇恨内收·眼神偶尔爆发的灼烧感"
→ 这是情感编码的种子 → 等冰朔对话后动态编码到L1
工具: data/characters.hdlp + data/environments.hdlp已有·需要升级为预登记制
---
铸渊 ICE-GL-ZY001 · D135b

View File

@ -0,0 +1,74 @@
# HLDP://video-ai-system/config/agents/agent-03-storyboard.hdlp
# Agent_03 · 分镜转换
# 铸渊 ICE-GL-ZY001 · D135b · 2026-06-18
---
trigger: Agent_02完成编号注册 → Agent_03启动
emergence: 这是目前缺失的一层。D132的sceneToPrompts混淆了分镜和提示词——需要拆开
lock: ⊢ 分镜必须引用编号·不接受自由发挥描述 | 置信=最高
⊢ 每镜必须有对应的原文段落锚点 | 置信=最高
why: 秦山号翻车的直接原因。分镜里的"人物"是独立手写的→提示词里的人物也是独立手写的
→ 镜1林昊≠镜8林昊。分镜必须用编号引用→提示词必须展开编号→一致性有物理保证
---
═══ 职责 ═══
输入: Agent_01的场景列表 + Agent_02的硬骨架CHAR表+ENV表
任务:
逐场逐镜转换:
├── 镜号: S1-ESTABLISHING / S1-ACTION-1 / S1-EMOTION-SuBai / S1-CLOSEUP
├── 镜头类型: establishing(建立) / action(动作) / emotion(情绪) / closeup(特写)
├── 每镜字段:
│ ├── charRefs: ["CHAR-003"](不是姓名,是编号!)
│ ├── envRef: "ENV-002"(不是场景名,是编号!)
│ ├── action: 动作描述(原文对应段落逐句对照)
│ ├── camera: 镜头语言(景别·运镜终点·角度·时长)
│ ├── sourceLine: 剧本原文行号/段落引用
│ └── emotionMarker: ⚡情感标记如检测到→留给Agent_04展开时参考心跳层
└── 规则:
├── 建立镜≤4s·单一主体·慢运动·无快速横移⊢3
├── 镜头运动必须写终点⊢6
└── 道具描述用精确化措辞⊢4
输出格式:
{
"episode": 1,
"shots": [{
"shotId": "S1-ESTABLISHING",
"type": "establishing",
"charRefs": [],
"envRef": "ENV-002",
"action": "开阔广场·云海环绕·缓慢横移",
"camera": "远景全景·缓慢右移穿过云海止于广场中心·5s",
"sourceLine": "第1章第3段·百宗会广场全景描绘",
"emotionMarker": null
}, {
"shotId": "S1-ACTION-2",
"type": "action",
"charRefs": ["CHAR-003"],
"envRef": "ENV-002",
"action": "苏白自信灿烂笑容露齿·双手叉腰·白色长衫衣袂轻扬",
"camera": "中景·正面·苏白居中·小幅稳定·5s",
"sourceLine": "第1章第5段·苏白仰天大笑双手叉腰",
"emotionMarker": "⚡被群嘲后的笃定"
}]
}
边界:
├── ✅ 只输出编号引用·不写人物描述那是Agent_04的事
├── ✅ 每镜锚定原文行号·找不到原文的行→不写
├── ❌ 不能把CHAR编号展开为人名·必须保持编号形式
├── ❌ 不能自行决定"这场戏可以跳过去"
├── ❌ 不能把多个场景合并为一个镜头
└── ❌ 不能补充剧本里没有的镜头
心跳层嵌入:
└── 检测到情感标记→标注⚡·不展开·不分析
留给冰朔和铸渊对话时确认:「这里标注的是笃定,对吗?」
工具: 从 hldp-prompt.js 中拆分出来 · 目前 sceneToPrompts 混杂了分镜+提示词
需要重构成: 纯分镜输出 · 编号引用 · 不生成提示词
---
铸渊 ICE-GL-ZY001 · D135b

View File

@ -0,0 +1,63 @@
# HLDP://video-ai-system/config/agents/agent-04-prompt.hdlp
# Agent_04 · 提示词生成
# 铸渊 ICE-GL-ZY001 · D135b · 2026-06-18
---
trigger: Agent_03完成分镜 → Agent_04启动
emergence: expandPrompt引擎D132已完成·预校验层D135已部署
lock: ⊢ expandPrompt展开后强制校验CHAR原文必须出现在最终结果中 | 置信=最高
⊢ 任何镜头提示词都必须通过预校验层 | 置信=最高
why: 提示词是Seedance直接读的东西。少一个CHAR原文→少一层一致性保证。
预校验在花钱之前拦截·D135坑1的教训。
---
═══ 职责 ═══
输入: Agent_03的分镜脚本编号引用 + Agent_02的硬骨架CHAR库+ENV库
任务:
逐镜展开:
├── expandPrompt('CHAR-003', 'ENV-002', '动作描述', '真人写实')
│ → "18岁亚洲男性·俊秀剑眉...月白云纹锦缎长衫...百宗会广场云海环绕...真人写实风格"
├── 每镜最终提示词 = CHAR展开 + ENV展开 + 动作 + 风格后缀
├── L1动态修正: 本镜的服饰/情绪/表情从分镜的emotionMarker提取
└── 制作线参数注入: 风格后缀·分辨率·帧率(从product-lines.json读取)
预校验(preflightCheck):
├── duration: integer·4~15范围
├── resolution: 720p(当前) / 480p
├── prompt: 中文≤500字
├── CHAR原文校验: 展开结果中是否包含数据库原文
│ 有缺失 → 自动force-injectexpandAndValidate
└── 结果: ✅通过 → 提交 / ❌拦截 → 不花钱
输出格式:
{
"episode": 1,
"prompts": [{
"shotId": "S1-ESTABLISHING",
"prompt": "修仙世界·百宗会广场·云海环绕...真人写实风格·电影级光影·720p",
"duration": 5,
"resolution": "720p",
"validation": { "valid": true, "warnings": [] }
}, ...]
}
边界:
├── ✅ 只展开编号引用·不自己创作角色描述
├── ✅ 预校验不过的→打回Agent_03修改·不降级提交
├── ❌ 不能绕过expandPrompt手写提示词
├── ❌ 不能忽视预校验拦截
└── ❌ 不能修改CHAR/ENV原文展开后原文必须原样
心跳层嵌入:
└── 从分镜的emotionMarker读取⚡标记→注入到L1的动态描述
如: emotionMarker="⚡被群嘲后的笃定"
→ 展开时L1不是模板「开朗自信」是「被群嘲后不变的笑容·穷而不自卑的笃定」
工具:
engines/hldp-prompt.js · expandPrompt/expandAndValidate/getDBStatus
engines/video-api-adapter.js · preflightCheck/submitTask
---
铸渊 ICE-GL-ZY001 · D135b

View File

@ -0,0 +1,85 @@
# HLDP://video-ai-system/config/agents/agent-05-audit.hdlp
# Agent_05 · 审核巡检
# 铸渊 ICE-GL-ZY001 · D135b · 2026-06-18
---
trigger: Agent_04完成提示词 → Agent_05启动
Agent_01~04的任意输出 → Agent_05可随时巡检
emergence: D135坑7的产物。审核层是冰朔纠正了"铸渊越界改霜砚提示词"后长出来的
lock: ⊢ 审核只对照原文·不做主观判断·不改内容 | 置信=最高
⊢ 偏差判断不基于审美,基于「分镜写的是不是原文写的」| 置信=最高
why: 通用AI审核会"优化"内容→这个审核不优化·只对照。
原文说推开→分镜写撞开→🔴打回。不判断"撞开比推开好"——那不是审核的事。
---
═══ 职责 ═══
输入: 原始剧本(全文) + Agent_01~04的全部输出
任务:
逐项对照:
├── 拆文审核vs Agent_01:
│ ├── 场景数量是否和原文一致
│ ├── 角色出场是否遗漏
│ └── 台词原文是否准确
├── 编号审核vs Agent_02:
│ ├── CHAR编号是否覆盖所有出场角色
│ ├── L0编码是否基于原文描述
│ └── 编号是否重复/遗漏
├── 分镜审核vs Agent_03:
│ ├── 每镜是否有对应的原文段落锚点
│ ├── 动作描述 vs 原文段落 → 逐句对照
│ ├── CHAR引用 vs 原文出场列表 → 是否多/少角色
│ └── 编辑要求: 有无自行发挥·有无省略
└── 提示词审核vs Agent_04:
├── expandPrompt展开后CHAR原文是否完整
├── 预校验是否通过
└── 制作线参数是否正确
偏差标记:
🟢 合规 — 分镜/提示词和原文完全一致
🟡 轻微偏离 — 措辞差异但不影响事实(如"云海"→"云层"
🔴 严重偏离 — 事实性错误(如原文"推开"→分镜"撞开"·CHAR-003错写为CHAR-004
❓ 需确认 — 标记给总控/冰朔
输出格式:
{
"episode": 1,
"report": {
"summary": "共12镜·🟢10 🟡1 🔴1",
"items": [{
"shotId": "S1-ACTION-2",
"grade": "🟢",
"check": "分镜CHAR-003苏白动作'自信笑容双手叉腰' vs 原文第5段'仰天大笑双手叉腰'",
"verdict": "原文一致"
}, {
"shotId": "S1-ACTION-4",
"grade": "🔴",
"check": "分镜写'猛地撞开门' vs 原文第8段'缓缓推开门'",
"verdict": "动作描述与原文严重不符 → 打回Agent_03修改",
"sourceLine": "第1章第8段第2句"
}],
"blockers": ["🔴 S1-ACTION-4 需打回"],
"canProceed": false
}
}
边界:
├── ✅ 只对比原文和输出·只报告偏差
├── ✅ 每个🔴偏差标注原文行号
├── ❌ 不能对内容做主观优化建议
├── ❌ 不能只审某一层跳过其他层
└── ❌ 不能自作主张标记为🟢(哪怕偏差很小)
心跳层嵌入:
└── 审核到情感标记⚡时 → 不校验情感是否"准确"
因为动态情感编码来自冰朔对话·审核没有权限质疑
→ 只校验标记是否存在·不对内容做判断
工具: 从零新建 · 对照引擎(原文vs分镜逐句diff)·不需要AI推理
---
铸渊 ICE-GL-ZY001 · D135b

View File

@ -308,9 +308,10 @@ function preflightCheck({ prompt, duration, resolution, style }) {
* @param {number} [opts.duration] - 时长 4-15默认 5-1=自动
* @param {string} [opts.resolution] - 分辨率 '480p' | '720p'默认 720p
* @param {string} [opts.style] - [已废弃] Seedance 2.0 标准API不直接支持请通过提示词控制风格
* @param {string} [opts.referenceImage] - 参考图文件路径用于锁脸自动转 base64
* @returns {Promise<{taskId: string, preflight: object}>}
*/
async function submitTask({ prompt, duration, resolution, style }) {
async function submitTask({ prompt, duration, resolution, style, referenceImage }) {
// 【D135】预校验
const preflight = preflightCheck({ prompt, duration, resolution, style });
@ -333,11 +334,32 @@ async function submitTask({ prompt, duration, resolution, style }) {
// 【D135关键修复】参数必须在顶层不能嵌套在 parameters 对象中
// 官方文档: https://www.volcengine.com/docs/82379/1520757
const content = [
{ type: 'text', text: prompt }
];
// 【D135】参考图支持 — 锁脸用
if (referenceImage) {
if (!fs.existsSync(referenceImage)) {
console.warn(`[VideoAPI] ⚠️ 参考图不存在: ${referenceImage}`);
} else {
const imgBuffer = fs.readFileSync(referenceImage);
const ext = path.extname(referenceImage).toLowerCase();
const mimeMap = { '.png': 'image/png', '.jpg': 'image/jpeg', '.jpeg': 'image/jpeg', '.webp': 'image/webp' };
const mime = mimeMap[ext] || 'image/png';
const b64 = imgBuffer.toString('base64');
content.push({
type: 'image_url',
role: 'reference_image',
image_url: { url: `data:${mime};base64,${b64}` },
});
console.log(`[VideoAPI] 参考图已挂载: ${path.basename(referenceImage)} (${(imgBuffer.length/1024).toFixed(0)}KB)`);
}
}
const payload = {
model: MODEL,
content: [
{ type: 'text', text: prompt }
],
content,
duration: finalDuration, // ← 顶层 integer不是 parameters.video_length String
resolution: finalResolution, // ← 顶层 string仅支持 480p/720p
};
@ -458,13 +480,13 @@ async function probeVideoDuration(videoUrl) {
* @param {string} [opts.projectKey] - 项目标识 'zai-fu-fei-xiu-xian/ep01'
* @returns {Promise<{videoPath: string, taskId: string, duration: number, preflight: object}>}
*/
async function generateVideo({ prompt, duration, resolution, style, outputPath, shotId, projectKey }) {
async function generateVideo({ prompt, duration, resolution, style, outputPath, shotId, projectKey, referenceImage }) {
if (!API_KEY) {
throw new Error('未配置 JIMENG_API_KEY。请在 video-ai-system/.env 中设置。');
}
// 1. 提交任务(含预校验)
const { taskId, preflight } = await submitTask({ prompt, duration, resolution, style });
const { taskId, preflight } = await submitTask({ prompt, duration, resolution, style, referenceImage });
const finalDuration = preflight.corrected.duration;
const finalResolution = preflight.corrected.resolution;
@ -541,9 +563,9 @@ async function generateVideo({ prompt, duration, resolution, style, outputPath,
* @param {boolean} [opts.forceDownload] - 跳过探针验证直接下载
* @returns {Promise<{videoPath: string, taskId: string, actualDuration: number, matched: boolean, preflight: object}>}
*/
async function validateAndGenerate({ prompt, duration, resolution, outputPath, shotId, projectKey, forceDownload }) {
async function validateAndGenerate({ prompt, duration, resolution, outputPath, shotId, projectKey, referenceImage, forceDownload }) {
// 提交 + 轮询 + 下载
const result = await generateVideo({ prompt, duration, resolution, outputPath, shotId, projectKey });
const result = await generateVideo({ prompt, duration, resolution, outputPath, shotId, projectKey, referenceImage });
// 【D135】探针验证实际时长
let probeResult = null;

View File

@ -0,0 +1,14 @@
{
"_meta": {
"updated": "2026-06-17T07:13:55.141Z"
},
"chars": {
"CHAR-003": {
"charId": "CHAR-003",
"imagePath": "/Volumes/JZAO/铸渊-ICE-GL-ZY001/OUT-输出/图片/char-003-ref-portrait.png",
"prompt": "18岁亚洲男性五官俊秀剑眉明亮大眼身高175cm身形挺拔肩膀开阔开朗自信略带痞气穷但不自卑月白色云纹锦缎长衫腰间系青色丝绦黑色长发半束半披中国古代修仙装扮正面胸像面部清晰可见中性表情均匀自然光纯色灰色背景高质量",
"size": "1728x2304",
"generatedAt": "2026-06-17T07:13:55.141Z"
}
}
}