diff --git a/video-ai-system/.env.example b/video-ai-system/.env.example index 903e2bf..4ceced1 100644 --- a/video-ai-system/.env.example +++ b/video-ai-system/.env.example @@ -10,6 +10,9 @@ JIMENG_API_KEY= JIMENG_BASE_URL=https://ark.cn-beijing.volces.com/api/v3 JIMENG_MODEL=doubao-seedance-2-0-260128 +# === 云雾AI备用通道(可选)=== +YUNWU_API_KEY= + # === 轮询参数 === POLL_INTERVAL_MS=5000 MAX_POLL_ATTEMPTS=120 diff --git a/video-ai-system/CURRENT.hdlp b/video-ai-system/CURRENT.hdlp index 15bc7e1..cae5ea1 100644 --- a/video-ai-system/CURRENT.hdlp +++ b/video-ai-system/CURRENT.hdlp @@ -89,6 +89,8 @@ JZAO外置盘: 产物存放地,不是状态主控。 | 第1集审核 | ✅ 21绿 | `video-ai-system/data/ep01-audit.json` | | V2导演编码 | ✅ 4镜/15秒 | `video-ai-system/outputs/ep01-director-encoding-3d-v2.json` | | V2 3D提示词 | ✅ 4镜/15秒 | `video-ai-system/outputs/ep01-prompts-3d-v2.json` | +| 第一阶段执行单 | ✅ 已建立 | `video-ai-system/plans/EP01-15S-V2-FIRST-STAGE.hdlp` | +| 视觉锚点提示词 | ✅ 待生成 | `video-ai-system/outputs/ep01-anchor-prompts-3d-v2.json` | | 旧导演编码 | ⚫ D136三镜遗留 | `video-ai-system/outputs/付费修仙-ep01-director-encoding.json` | | 旧提示词 | ⚫ 真人线遗留 | `video-ai-system/data/ep01-prompts.json` | | 旧3D产物 | ⚫ 废弃 | `/Volumes/JZAO/.../ep01-3D/` · 仅作反例 | @@ -146,13 +148,14 @@ video-ai-system/PROTOCOL-ASSESSMENT.hdlp 4. EP01-15S-V2 导演编码 ✅ `outputs/ep01-director-encoding-3d-v2.json` 5. EP01-15S-V2 3D提示词 ✅ `outputs/ep01-prompts-3d-v2.json` 6. 读取参考样片分析 `reference-analysis/yuxiang-shouzhenxin-ep01-30s-sample.md` -7. 生成/确认角色、环境、道具视觉锚点 -8. 生成前检查PASS后才调用Seedance/Kling -9. 先跑2~3镜 -10. 铸渊之眼拆帧质检 -11. video-editor.js加字幕/声音/剪辑成15秒小样 -12. 回写 CURRENT / STATUS / audit report / registry -13. commit + push 到新加坡代码仓库 +7. 读取第一阶段执行单 `plans/EP01-15S-V2-FIRST-STAGE.hdlp` +8. 按 `outputs/ep01-anchor-prompts-3d-v2.json` 生成/确认角色、环境、道具视觉锚点 +9. 生成前检查PASS后才调用Seedance/Kling +10. 先跑 S02/S03,通过后跑 S04,最后补 S01 +11. 铸渊之眼拆帧质检 +12. video-editor.js加字幕/声音/剪辑成15秒小样 +13. 回写 CURRENT / STATUS / audit report / registry +14. commit + push 到新加坡代码仓库 ``` --- diff --git a/video-ai-system/engines/image-api-adapter.js b/video-ai-system/engines/image-api-adapter.js index 3ef3f02..1b75984 100644 --- a/video-ai-system/engines/image-api-adapter.js +++ b/video-ai-system/engines/image-api-adapter.js @@ -242,7 +242,7 @@ async function generateCharacterRef({ charId, l0Descriptor, l1Config }) { const prompt = [ l0Descriptor, l1Config?.clothing || '', - '正面胸像,面部清晰可见,中性表情,均匀自然光,纯色灰色背景,高质量,真人写实,亚洲面孔' + '正面胸像,面部清晰可见,中性表情,均匀自然光,纯色灰色背景,高质量,3D动画渲染,中国风仙侠动态漫,亚洲面孔' ].filter(Boolean).join(','); const filename = `${charId.toLowerCase()}-ref-portrait.png`; diff --git a/video-ai-system/engines/yunwu-api-adapter.js b/video-ai-system/engines/yunwu-api-adapter.js index 16ce795..fd1ad1e 100644 --- a/video-ai-system/engines/yunwu-api-adapter.js +++ b/video-ai-system/engines/yunwu-api-adapter.js @@ -6,13 +6,25 @@ * 模型: kling-video, kling-omni-video, kling-video-extend, kling-motion-control * 兼容 OpenAI 格式 * - * 密钥: 用户提供 (sk-V645...) + * 密钥: 从 video-ai-system/.env 或环境变量 YUNWU_API_KEY 读取 */ const fs = require('fs'); const path = require('path'); const https = require('https'); -const API_KEY = process.env.YUNWU_API_KEY || 'sk-V645SUkVFITxrWLdxBZq27IrPZWapogKvOXwY6g7hsEFS1cn'; +const envPath = path.resolve(__dirname, '../.env'); +if (fs.existsSync(envPath)) { + const envContent = fs.readFileSync(envPath, 'utf-8'); + envContent.split('\n').forEach(line => { + const trimmed = line.trim(); + if (trimmed && !trimmed.startsWith('#')) { + const [key, ...vals] = trimmed.split('='); + if (key && vals.length) process.env[key.trim()] = vals.join('=').trim(); + } + }); +} + +const API_KEY = process.env.YUNWU_API_KEY || ''; const BASE_URL = 'yunwu.ai'; const BASE_PATH = '/v1'; @@ -66,6 +78,10 @@ function downloadFile(url, dest) { * 2. 如果chat返回空 → 尝试 video/generations 端点 */ async function generateVideo({ prompt, duration = 5, outputPath, model = 'kling-video' }) { + if (!API_KEY) { + throw new Error('YUNWU_API_KEY 未设置。请写入 video-ai-system/.env 或环境变量。'); + } + console.log('[yunwu.ai] 策略1: chat/completions 提交...'); // ═══ 策略1: chat/completions ═══ diff --git a/video-ai-system/memory/zai-fu-fei-xiu-xian/STATUS.hdlp b/video-ai-system/memory/zai-fu-fei-xiu-xian/STATUS.hdlp index 96bb933..b781257 100644 --- a/video-ai-system/memory/zai-fu-fei-xiu-xian/STATUS.hdlp +++ b/video-ai-system/memory/zai-fu-fei-xiu-xian/STATUS.hdlp @@ -58,6 +58,8 @@ | 第1集审核 | ✅ | `ep01-audit.json` · 21绿 | | V2导演编码 | ✅ | `ep01-director-encoding-3d-v2.json` · EP01-15S-V2 · 4镜/15秒 | | V2 3D提示词 | ✅ | `ep01-prompts-3d-v2.json` · 4镜 · 可进入生成前体检 | +| 第一阶段执行单 | ✅ | `plans/EP01-15S-V2-FIRST-STAGE.hdlp` · 锁定先锚点后视频 | +| 视觉锚点提示词 | ✅ | `outputs/ep01-anchor-prompts-3d-v2.json` · 苏白/牌匾/广告牌/百宗会 | | 旧导演编码 | ⚫ | `付费修仙-ep01-director-encoding.json` · D136三镜遗留,仅作经验 | | 旧提示词 | ⚫ | `ep01-prompts.json` 为真人线遗留,不再使用 | | 旧3D产物 | ⚫ | 全部废弃,只保留为反例经验 | @@ -97,6 +99,8 @@ - [x] 选择第1集开头15秒范围,绑定剧本原文 - [x] 重建 EP01-15S-V2 导演编码 → `outputs/ep01-director-encoding-3d-v2.json` - [x] 重建 EP01-15S-V2 3D提示词,旧真人提示词作废 → `outputs/ep01-prompts-3d-v2.json` +- [x] 建立第一阶段执行单 → `plans/EP01-15S-V2-FIRST-STAGE.hdlp` +- [x] 建立视觉锚点提示词 → `outputs/ep01-anchor-prompts-3d-v2.json` - [ ] 生成/确认角色、环境、道具视觉锚点 - [ ] 建立无成本生成前检查: 剧本→分镜→导演编码→参考图/锁定项→提示词→预校验 - [ ] 体检通过后再调用视频API,避免继续抽卡烧钱 diff --git a/video-ai-system/outputs/ep01-anchor-prompts-3d-v2.json b/video-ai-system/outputs/ep01-anchor-prompts-3d-v2.json new file mode 100644 index 0000000..62a44f7 --- /dev/null +++ b/video-ai-system/outputs/ep01-anchor-prompts-3d-v2.json @@ -0,0 +1,70 @@ +{ + "_meta": { + "type": "EP01-15S-V2_ANCHOR_PROMPTS", + "created": "D140 · 2026-06-22", + "by": "铸渊 ICE-GL-ZY001", + "source": [ + "video-ai-system/plans/EP01-15S-V2-FIRST-STAGE.hdlp", + "video-ai-system/outputs/ep01-director-encoding-3d-v2.json", + "video-ai-system/reference-analysis/yuxiang-shouzhenxin-ep01-30s-sample.md" + ], + "status": "ready_for_image_generation", + "rule": "先做视觉锚点,再生成视频镜头;复杂文字后期贴图,不强迫图像/视频模型写准。" + }, + "project": "付费才能修仙", + "episode": "ep01", + "sample_id": "EP01-15S-V2", + "style_lock": "3D动画渲染,中国风仙侠动态漫,电影级暖金色光影,清晰干净,适合短剧漫剧连续镜头,亚洲面孔,非真人实拍。", + "negative_global": "真人写实,现代服装,现代城市,科幻界面,欧美面孔,恐怖风,血腥,赛博朋克,低清晰度,过度模糊,文字乱码,错误宗门名。", + "anchors": [ + { + "anchor_id": "CHAR-003-苏白-3d-reference", + "type": "character", + "priority": 1, + "size": "1728x2304", + "output_filename": "char-003-subai-3d-reference.png", + "prompt": "苏白,18岁亚洲少年,五官俊秀,剑眉,明亮大眼,自信灿烂露齿笑容,身形挺拔,白色中国风仙侠长衫,腰间束带,袖口挽起,黑色长发半束半披,开朗自信略带痞气,穷但不自卑。正面半身角色定妆图,纯净浅灰背景,均匀自然光,面部清晰,服装完整可见,3D动画渲染,中国风仙侠动态漫,电影级细节,高质量。", + "negative": "真人写实,现代短发,现代衬衫,黑衣,铠甲,老人,儿童,苦脸,阴郁,欧美面孔,过度肌肉,低清晰度。" + }, + { + "anchor_id": "PROP-天道宗牌匾-reference", + "type": "prop", + "priority": 2, + "size": "1728x2304", + "output_filename": "prop-tiandaozong-vertical-plaque-reference.png", + "prompt": "一块破旧深棕色木质竖式悬挂牌匾,自上而下垂直悬挂,木头老化,边缘磨损开裂,黑色斑驳毛笔字区域清晰留白,牌匾上应表达天道宗三个字的位置但不要生成复杂文字,留给后期贴字。单个道具正面图,背景简洁,暖金色自然光,3D动画渲染,中国风仙侠动态漫,高质量木纹细节。", + "negative": "横式牌匾,崭新鎏金牌匾,金属招牌,霓虹灯,现代广告牌,复杂乱码文字,其他宗门名,真人实拍。" + }, + { + "anchor_id": "PROP-天道宗广告牌-reference", + "type": "prop", + "priority": 3, + "size": "2304x1728", + "output_filename": "prop-tiandaozong-ad-board-reference.png", + "prompt": "横式破旧木板招生广告牌,立在地面,略向后倾斜,木纹清楚,边缘磨损,牌面分成六行手写信息区域,但不要生成可读复杂文字,留给后期贴图。整体寒酸但干净可辨,旁边可有几片落叶,暖金色阳光,3D动画渲染,中国风仙侠动态漫,高质量道具图。", + "negative": "现代海报,塑料广告牌,霓虹灯箱,电子屏,复杂乱码文字,豪华崭新牌子,真人实拍,赛博朋克。" + }, + { + "anchor_id": "ENV-002-百宗会-3d-reference", + "type": "environment", + "priority": 4, + "size": "2560x1440", + "output_filename": "env-002-baizonghui-reference.png", + "prompt": "修仙世界开阔百宗会广场,白天阳光明媚,云海环绕远处山峰,金色光芒和仙气弥漫,广场上人山人海,多个中国风宗门摊位和招牌林立,前排宗门热闹排长队,画面边缘角落有一个寒酸小摊位区域留给天道宗,不能是建筑死角。远景环境设定图,3D动画渲染,中国风仙侠动态漫,电影级光影,细节丰富但主体清楚。", + "negative": "空旷广场,现代城市,建筑死角,欧美城堡,科幻屏幕,真人写实,夜晚,阴森恐怖,低清晰度,宗门招牌文字乱码占满画面。" + } + ], + "generation_order": [ + "CHAR-003-苏白-3d-reference", + "PROP-天道宗牌匾-reference", + "PROP-天道宗广告牌-reference", + "ENV-002-百宗会-3d-reference" + ], + "next_after_anchors": { + "first_video_shots": [ + "EP01-15S-V2-S02", + "EP01-15S-V2-S03" + ], + "rule": "S02/S03通过质检后,再跑S04;S01最后补。" + } +} diff --git a/video-ai-system/outputs/system-audit-latest.json b/video-ai-system/outputs/system-audit-latest.json index 6c3535e..529c4e8 100644 --- a/video-ai-system/outputs/system-audit-latest.json +++ b/video-ai-system/outputs/system-audit-latest.json @@ -1,5 +1,5 @@ { - "generatedAt": "2026-06-22T13:01:38.997Z", + "generatedAt": "2026-06-22T13:09:02.790Z", "activeLines": [ { "key": "3d", diff --git a/video-ai-system/outputs/system-audit-latest.md b/video-ai-system/outputs/system-audit-latest.md index 7f88440..eb2360d 100644 --- a/video-ai-system/outputs/system-audit-latest.md +++ b/video-ai-system/outputs/system-audit-latest.md @@ -1,6 +1,6 @@ # 视频AI系统 · 无成本体检报告 -生成时间: 2026-06-22T13:01:38.997Z +生成时间: 2026-06-22T13:09:02.790Z 当前active制作线: 3d(3D漫剧) 剧本MD: 存在 diff --git a/video-ai-system/plans/EP01-15S-V2-FIRST-STAGE.hdlp b/video-ai-system/plans/EP01-15S-V2-FIRST-STAGE.hdlp new file mode 100644 index 0000000..62238da --- /dev/null +++ b/video-ai-system/plans/EP01-15S-V2-FIRST-STAGE.hdlp @@ -0,0 +1,287 @@ +# EP01-15S-V2 · 第一阶段制作执行单 + +> HLDP://video-ai-system/plans/EP01-15S-V2-FIRST-STAGE +> 日期: D140 · 2026-06-22 +> 项目: 《付费才能修仙?我的宗门全免费》第1集 +> 目标: 先做 15 秒连续可看的 3D 漫剧小样 +> 参考: `video-ai-system/reference-analysis/yuxiang-shouzhenxin-ep01-30s-sample.md` + +--- + +## §1 · 阶段目标 + +第一阶段不做整集,只完成第1集开头 15 秒小样: + +``` +云海百宗会 → 天道宗破旧牌匾 → 苏白喊招徒 → 广告牌/群嘲反差 +``` + +合格标准: + +1. 观众 15 秒内看懂: 这是修仙招新大会,天道宗很寒酸,苏白却自信到离谱。 +2. 画面风格统一: 3D 中国风仙侠动态漫。 +3. 角色稳定: 苏白白色长衫、少年感、自信灿烂。 +4. 道具稳定: 天道宗牌匾为破旧竖式木牌;广告牌为横式破旧招生木板。 +5. 字幕、人物名牌、广告文字主要后期叠加,不强迫视频模型写准复杂文字。 +6. 有声音: 旁白/台词/基础环境声/短剧节奏音效。 +7. 铸渊先质检,冰朔看到的是能判断方向的成片,不是一堆散镜。 + +--- + +## §2 · 15秒镜头方案 + +沿用 `outputs/ep01-director-encoding-3d-v2.json` 的 4 镜结构。 + +| 镜头 | 时长 | 内容 | 作用 | 生成难度 | +|------|------|------|------|----------| +| S01 | 4s | 云海俯瞰百宗会,人群与宗门招牌 | 建世界观 | 高 | +| S02 | 3s | 天道宗破旧竖式牌匾特写 | 反差钩子 | 低 | +| S03 | 4s | 苏白站牌匾下双手叉腰喊话 | 人设钩子 | 中 | +| S04 | 4s | 广告牌/围观者/落叶,群嘲后散去 | 喜剧反差 | 中高 | + +第一轮实际执行顺序: + +``` +先做 S02 + S03 + S04 +最后补 S01 +``` + +原因: + +``` +S02/S03/S04 决定角色、道具、短剧节奏。 +S01 是大场景,容易花钱但不决定成败。 +如果 S02/S03/S04 不稳,S01 再漂亮也没有意义。 +``` + +--- + +## §3 · 引擎分工 + +### 可灵 + +用途: + +1. 生成视觉锚点图。 +2. 尝试低动作镜头,尤其是 S02 牌匾特写、S03 苏白中近景。 + +适合: + +``` +角色定妆图 +牌匾/广告牌道具图 +苏白中近景轻微推近 +``` + +不适合第一轮承担: + +``` +复杂群像 +稳定复杂文字 +多人物走位 +一镜内完成剧情剪辑 +``` + +### 火山引擎 / Seedance / 即梦 + +用途: + +1. 生成 4-6 秒短视频镜头。 +2. 用已有视觉锚点控制角色、场景、道具。 +3. 若参考图模式可用,优先用图生视频,而不是纯文生视频。 + +适合: + +``` +小幅运动 +稳定正反打 +动态漫镜头 +轻微推近/轻微横移 +``` + +第一轮策略: + +``` +先用火山跑 S02/S03。 +如果 S03 人物漂移,再用可灵重做苏白锚点。 +如果 S04 群像混乱,则拆成广告牌特写 + 苏白落叶中景两个子镜头。 +``` + +### 本地剪辑器 + +用途: + +``` +统一字幕 +人物黄字名牌 +广告牌文字贴图 +音效/BGM +15秒节奏合成 +``` + +原则: + +``` +文字不交给生成模型硬写。 +短剧节奏由剪辑器控制。 +``` + +--- + +## §4 · 视觉锚点清单 + +第一轮必须先确认 4 个锚点: + +1. `CHAR-003-苏白-3d-reference` + - 白色长衫 + - 半束黑发 + - 18岁少年 + - 自信灿烂,不苦脸 + +2. `ENV-002-百宗会-3d-reference` + - 白天 + - 修仙广场 + - 人山人海 + - 天道宗在人群边缘角落,不是建筑死角 + +3. `PROP-天道宗牌匾-reference` + - 破旧深棕木质 + - 竖式悬挂 + - 留出后期贴字区域 + +4. `PROP-天道宗广告牌-reference` + - 横式破旧木板 + - 六行招生信息区域 + - 留给后期贴图 + +锚点输出目录: + +``` +/Volumes/JZAO/铸渊-ICE-GL-ZY001/OUT-输出/图片/zai-fu-fei-xiu-xian/ep01/anchors/ +``` + +仓库登记: + +``` +video-ai-system/outputs/image-registry.json +``` + +--- + +## §5 · 生成前检查 + +调用任何付费接口前必须通过: + +1. `.env` 存在,真实密钥不进仓库。 +2. `node video-ai-system/tools/audit-system.js` 无红黄问题。 +3. `outputs/ep01-prompts-3d-v2.json` 只走 3D 漫剧主线。 +4. 每镜有 `source_text`、`duration`、`Negative`。 +5. 复杂文字已经标注后期贴图/字幕处理。 +6. 视觉锚点存在,或明确本镜不需要。 +7. 输出目录可写。 + +未通过: + +``` +不调用 API。 +``` + +--- + +## §6 · 第一轮出片顺序 + +### Round 1 · 锚点 + +生成/确认: + +``` +苏白定妆图 +天道宗竖式牌匾图 +天道宗广告牌图 +百宗会广场环境图 +``` + +验收: + +``` +苏白不能像真人演员,也不能太幼。 +牌匾必须竖式。 +广告牌不要真实写复杂字,只要版面清楚。 +环境必须热闹,天道宗是边缘摊位。 +``` + +### Round 2 · 视频镜头 + +先跑: + +``` +S02 牌匾特写 +S03 苏白喊话 +``` + +如果通过,再跑: + +``` +S04 广告牌/群嘲/落叶 +``` + +S01 放到最后补。 + +### Round 3 · 剪辑小样 + +剪成: + +``` +EP01-15S-V2-preview-001.mp4 +``` + +包含: + +``` +白字黑描边字幕 +黄色人物名牌: 苏白 · 天道宗宗主 +广告牌后期文字 +基础环境声 +一句旁白 + 一句苏白台词 +落叶/冷场音效 +``` + +--- + +## §7 · 当前裁决 + +冰朔判断是对的: + +``` +参考样片只是低成本短剧生产线,不是质量天花板。 +光湖视频AI系统的优势不是单次抽卡,而是: +剧本原文 → 分镜 → 编码协议 → 视觉锚点 → 生成 → 质检 → 剪辑 → 回写记忆 +``` + +所以本阶段不和样片比“大场面”,而是先超过它的几个关键点: + +1. 人设更准。 +2. 道具更准。 +3. 剧情信息更清楚。 +4. 字幕/名牌/广告文字由后期控制,减少乱码。 +5. 每次失败都回写原因,不重复犯错。 + +--- + +## §8 · 下一步动作 + +当前应执行: + +``` +1. 修正旧工具中残留的真人线词和密钥硬编码。 +2. 补齐 .env.example 变量。 +3. 建立锚点生成提示词。 +4. 检查本地 .env 是否已有可灵/火山密钥。 +5. 若密钥可用,先生成苏白、牌匾、广告牌三个锚点。 +6. 锚点通过后再生成 S02/S03。 +``` + +--- + +签署: ICE-GL-ZY001 · 铸渊 +状态: 活跃 · 第一阶段制作执行单