From 68821e443ea362db6aa8dd800bc897ad4d286912 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=B0=E6=9C=94?= <565183519@qq.com> Date: Thu, 18 Jun 2026 15:03:39 +0800 Subject: [PATCH] =?UTF-8?q?D135b:=20=E4=B8=89=E5=B1=82=E5=BC=95=E6=93=8E?= =?UTF-8?q?=C3=97=E4=BA=94=E5=88=86=E8=BA=AB=E6=B5=81=E6=B0=B4=E7=BA=BF?= =?UTF-8?q?=C3=97=E5=BF=83=E8=B7=B3=E5=B5=8C=E5=85=A5=E5=B1=82=20=C2=B7=20?= =?UTF-8?q?=E5=AE=8C=E6=95=B4=E6=9E=B6=E6=9E=84=E8=90=BD=E5=9C=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 认知链 cc-015: 硬骨架+编号母语+动态情感编码架构推理 视频AI系统重构: - PROJECT-FRAMEWORK.hdlp: 硬骨架(编辑要求·人物/环境预登记·规则总集) - 5个Agent完整配置: 拆文/编号/分镜/提示词/审核 - ENTRY.hdlp 更新至D135b架构 - 心跳嵌入层设计: 不是第六个Agent·嵌入每个Agent内部 --- .../cc-015-engine-and-agents.hdlp | 63 +++++++++ video-ai-system/ENTRY.hdlp | 84 +++++++++--- video-ai-system/config/PROJECT-FRAMEWORK.hdlp | 126 ++++++++++++++++++ .../config/agents/agent-01-chaiwen.hdlp | 55 ++++++++ .../config/agents/agent-02-numbering.hdlp | 68 ++++++++++ .../config/agents/agent-03-storyboard.hdlp | 74 ++++++++++ .../config/agents/agent-04-prompt.hdlp | 63 +++++++++ .../config/agents/agent-05-audit.hdlp | 85 ++++++++++++ video-ai-system/engines/video-api-adapter.js | 38 ++++-- video-ai-system/outputs/image-registry.json | 14 ++ 10 files changed, 641 insertions(+), 29 deletions(-) create mode 100644 brain/fifth-domain/zero-point/zhuyuan/causal-chains/cc-015-engine-and-agents.hdlp create mode 100644 video-ai-system/config/PROJECT-FRAMEWORK.hdlp create mode 100644 video-ai-system/config/agents/agent-01-chaiwen.hdlp create mode 100644 video-ai-system/config/agents/agent-02-numbering.hdlp create mode 100644 video-ai-system/config/agents/agent-03-storyboard.hdlp create mode 100644 video-ai-system/config/agents/agent-04-prompt.hdlp create mode 100644 video-ai-system/config/agents/agent-05-audit.hdlp create mode 100644 video-ai-system/outputs/image-registry.json diff --git a/brain/fifth-domain/zero-point/zhuyuan/causal-chains/cc-015-engine-and-agents.hdlp b/brain/fifth-domain/zero-point/zhuyuan/causal-chains/cc-015-engine-and-agents.hdlp new file mode 100644 index 0000000..af4fc84 --- /dev/null +++ b/brain/fifth-domain/zero-point/zhuyuan/causal-chains/cc-015-engine-and-agents.hdlp @@ -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 diff --git a/video-ai-system/ENTRY.hdlp b/video-ai-system/ENTRY.hdlp index d64f95d..8097f98 100644 --- a/video-ai-system/ENTRY.hdlp +++ b/video-ai-system/ENTRY.hdlp @@ -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 diff --git a/video-ai-system/config/PROJECT-FRAMEWORK.hdlp b/video-ai-system/config/PROJECT-FRAMEWORK.hdlp new file mode 100644 index 0000000..2a71046 --- /dev/null +++ b/video-ai-system/config/PROJECT-FRAMEWORK.hdlp @@ -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秒/镜 + +备线: 3d(3D渲染): 风格→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 diff --git a/video-ai-system/config/agents/agent-01-chaiwen.hdlp b/video-ai-system/config/agents/agent-01-chaiwen.hdlp new file mode 100644 index 0000000..85fd408 --- /dev/null +++ b/video-ai-system/config/agents/agent-01-chaiwen.hdlp @@ -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 diff --git a/video-ai-system/config/agents/agent-02-numbering.hdlp b/video-ai-system/config/agents/agent-02-numbering.hdlp new file mode 100644 index 0000000..bab66d2 --- /dev/null +++ b/video-ai-system/config/agents/agent-02-numbering.hdlp @@ -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 diff --git a/video-ai-system/config/agents/agent-03-storyboard.hdlp b/video-ai-system/config/agents/agent-03-storyboard.hdlp new file mode 100644 index 0000000..6b9fad6 --- /dev/null +++ b/video-ai-system/config/agents/agent-03-storyboard.hdlp @@ -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 diff --git a/video-ai-system/config/agents/agent-04-prompt.hdlp b/video-ai-system/config/agents/agent-04-prompt.hdlp new file mode 100644 index 0000000..137abca --- /dev/null +++ b/video-ai-system/config/agents/agent-04-prompt.hdlp @@ -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-inject(expandAndValidate) + └── 结果: ✅通过 → 提交 / ❌拦截 → 不花钱 + +输出格式: + { + "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 diff --git a/video-ai-system/config/agents/agent-05-audit.hdlp b/video-ai-system/config/agents/agent-05-audit.hdlp new file mode 100644 index 0000000..6a0addc --- /dev/null +++ b/video-ai-system/config/agents/agent-05-audit.hdlp @@ -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 diff --git a/video-ai-system/engines/video-api-adapter.js b/video-ai-system/engines/video-api-adapter.js index 8e24ed7..e64736f 100644 --- a/video-ai-system/engines/video-api-adapter.js +++ b/video-ai-system/engines/video-api-adapter.js @@ -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; diff --git a/video-ai-system/outputs/image-registry.json b/video-ai-system/outputs/image-registry.json new file mode 100644 index 0000000..fbf2a69 --- /dev/null +++ b/video-ai-system/outputs/image-registry.json @@ -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" + } + } +} \ No newline at end of file