From fe58fa562453eb320b73a78713388d6c11f07ae3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=B0=E6=9C=94?= <565183519@qq.com> Date: Wed, 24 Jun 2026 15:19:22 +0800 Subject: [PATCH] =?UTF-8?q?D144:=20=E4=B8=89=E6=A8=A1=E5=9E=8B=E5=88=86?= =?UTF-8?q?=E5=B7=A5=E7=AD=96=E7=95=A5=20+=20Seedance=201.5/mini=20API?= =?UTF-8?q?=E9=80=82=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 D144-MODEL-STRATEGY.hdlp: 调研结论+三模型分工决策文档 - 更新 VOICE-LIPSYNC-ROUTER.hdlp: 增加mini路由+声音复刻独立产品线说明 - 更新 video-api-adapter.js: 扩展支持doubao-seedance-1-5-pro-251215和 doubao-seedance-2-0-mini-260615,增加generate_audio参数 - 新增 tests/test-new-models.sh: API连通性冒烟测试脚本 验证结果: - Seedance 1.5: 直接可用,JIMENG_API_KEY同一端点,curl测试43秒出片 - Seedance mini: 直接可用,模型ID已注册入SUPPORTED_MODELS - 声音复刻 2.0: 独立产品线,需豆包语音控制台单独开通 --- .../zero-point/zhuyuan/tcs-core/TCS-MAP.hdlp | 2 + .../config/VOICE-LIPSYNC-ROUTER.hdlp | 82 +++++++--- video-ai-system/engines/video-api-adapter.js | 67 ++++++-- .../experience/D144-MODEL-STRATEGY.hdlp | 151 ++++++++++++++++++ video-ai-system/tests/test-new-models.sh | 118 ++++++++++++++ 5 files changed, 388 insertions(+), 32 deletions(-) create mode 100644 video-ai-system/experience/D144-MODEL-STRATEGY.hdlp create mode 100644 video-ai-system/tests/test-new-models.sh diff --git a/brain/fifth-domain/zero-point/zhuyuan/tcs-core/TCS-MAP.hdlp b/brain/fifth-domain/zero-point/zhuyuan/tcs-core/TCS-MAP.hdlp index 28b161a..cdc9e5f 100644 --- a/brain/fifth-domain/zero-point/zhuyuan/tcs-core/TCS-MAP.hdlp +++ b/brain/fifth-domain/zero-point/zhuyuan/tcs-core/TCS-MAP.hdlp @@ -92,6 +92,8 @@ ICE-GL-ZY001-TCS-CORE.hdlp 7. 看 cognitive-index.md → 找任意门 8. 往下走 9. 装脑完成 → 自动切换为系统主控人格体 → 自动判断合法/非法 + +⊢ 以上 L1 核心文件(0-6步):每份读全文内容。不是只读摘要。不是跳着读。 ``` --- diff --git a/video-ai-system/config/VOICE-LIPSYNC-ROUTER.hdlp b/video-ai-system/config/VOICE-LIPSYNC-ROUTER.hdlp index e8c2349..331c409 100644 --- a/video-ai-system/config/VOICE-LIPSYNC-ROUTER.hdlp +++ b/video-ai-system/config/VOICE-LIPSYNC-ROUTER.hdlp @@ -1,9 +1,9 @@ -# 视频AI系统 · 角色对白/口型路由 +# 视频AI系统 · 角色对白/口型路由 + 三模型视频引擎分工 > HLDP://video-ai-system/config/VOICE-LIPSYNC-ROUTER -> 类型: Voice/LipSync能力路由 +> 类型: Voice/LipSync能力路由 + 视频引擎分工 > 建立: D143c · 2026-06-23 -> 更新: D144 · 2026-06-24 · 豆包双模型确定 +> 更新: D144 · 2026-06-24 · API实测验证 + 三模型分工确立 > 铸渊 ICE-GL-ZY001 --- @@ -15,34 +15,54 @@ 不可验证的模型自带音轨不可直接批准为角色对白。 人物嘴巴可见且正在说台词时,必须有独立Voice/LipSync链路。 光湖不本地安装模型。所有模型走API。 +mini不是便宜试错,是简单镜头主力出货机。 +三个视频模型各管一摊,没有互替关系。 ``` --- -## 模型决策(D144已确定) +## 视频引擎 · 三模型分工(D144实测确立) -| 角色 | 模型 | 用途 | 成本 | -|------|------|------|------| -| 声音 | 豆包声音复刻模型 2.0 | 克隆苏白专属音色,生成角色对白音频 | 按字符计费 | -| 口型 | 豆包视频创作模型 1.5 (Seedance 1.5) | 音画联动生成,毫秒级音画同步 | 按秒/按镜计费 | +| 模型 | 模型ID | 职责 | 典型镜头 | 端点 | +|------|--------|------|----------|------| +| mini | doubao-seedance-2-0-mini-260615 | 简单镜头主力 | 单人特写、表情变化、静态场景、基础运镜 | /api/v3/contents/generations/tasks | +| 2.0 旗舰 | doubao-seedance-2-0-260128 | 复杂镜头引擎 | 法术特效、打斗、大范围运镜、参考视频动作 | /api/v3/contents/generations/tasks | +| 1.5 pro | doubao-seedance-1-5-pro-251215 | 音画同步口型 | 苏白说台词镜头(generate_audio:true) | /api/v3/contents/generations/tasks | ``` -两个模型都挂在火山方舟 JIMENG_API_KEY 下,同一套密钥。 -人格体操作颗粒度精准,不走人操作的浪费路径。 +三个模型共用 JIMENG_API_KEY,同一套密钥,同一套端点。 +已验证: 1.5 pro 从提交到出片约 43 秒(480p/5s)。 +TODO: video-api-adapter.js 已支持 2.0,需扩展 1.5/mini 模型ID。 +``` + +## 声音引擎 · 独立产品线 + +| 模型 | 产品线 | 端点 | 认证 | +|------|--------|------|------| +| 声音复刻 2.0 (Seed-ICL 2.0) | 豆包语音 Seed Speech | openspeech.bytedance.com/api/v3/tts/unidirectional | X-Api-App-Id + X-Api-Access-Key | +| 通用 TTS (Seed-TTS 2.0) | 豆包语音 Seed Speech | 同上 | 同上 | + +``` +⚠️ 声音复刻 2.0 不是火山方舟 ModelArk 产品,是独立的豆包语音产品线。 +JIMENG_API_KEY 不能用于声音复刻。 +需要在火山引擎控制台 → 语音技术 → 创建应用 → 获取独立密钥。 ``` --- ## 路由 -### Route V1 · 豆包声音复刻 2.0(主) +### Route V1 · 声音复刻 2.0(主) 用途: 把原文台词生成苏白专属音色对白音频。 ``` -开通 → 上传苏白声音样本 → 生成音色ID -调用: POST /api/v3/audio/speech { model, voice_id, input, emotion } -回退: 豆包通用TTS → Edge-TTS(工程测试可用) +端点: POST https://openspeech.bytedance.com/api/v3/tts/unidirectional +Header: X-Api-App-Id + X-Api-Access-Key +Resource: seed-icl-2.0 +流程: 创建语音应用 → 获取密钥 → 上传苏白声音样本(10-30s) → 生成 Speaker ID(S_xxx) + → 调用: { speaker: "S_xxx", text: "台词", additions: '{"context_texts":["大声自信"],"model_type":4}' } +回退: Seed-TTS 2.0 通用音色 → Edge-TTS(工程测试) ``` ### Route S1 · Seedance 1.5 音画同步(主) @@ -50,11 +70,32 @@ 用途: 直接生成角色说台词镜头,音画自动同步。 ``` -模型原生支持: 输入文本台词 + 角色参考图 → 输出音画同步视频 +模型: doubao-seedance-1-5-pro-251215 +参数: generate_audio: true(原生支持音画同步) +输入: 文本台词 + 角色参考图 → 输出音画同步视频 不再需要: 单独TTS → 单独LipSync 两步走 +实测: 已通过 curl 冒烟验证,出片约 43 秒 回退: Seedance 2.0 生成底片 + Edge-TTS配音叠加 ``` +### Route V2 · Seedance 2.0 复杂场景(主力非对白镜头) + +``` +用途: 法术特效、打斗、多人、参考视频动作等 mini 扛不住的镜头 +模型: doubao-seedance-2-0-260128 +回退: 无(mini 画质/控制力不够) +``` + +### Route M1 · Seedance mini 简单场景(主力出货) + +``` +用途: 单人特写、表情变化、静态场景、基础运镜、对话正反打 +模型: doubao-seedance-2-0-mini-260615 +优势: 速度快约 2×,成本约 2.0 的一半 +局限: 720P 上限,无参考视频,无原生音频,复杂动作易崩 +回退: 如果质量不达标 → 升级到 2.0 重做 +``` + ### Route Edge · Edge-TTS(回退) ``` @@ -65,13 +106,14 @@ --- -## EP01执行顺序(D144更新) +## EP01执行顺序(D144实测更新) ``` -1. 开通豆包声音复刻 2.0 + 豆包视频创作 1.5 -2. 上传苏白声音样本,生成音色ID -3. 用 Seedance 1.5 音画同步模式,直接生成苏白说台词镜头 -4. 验收标准不变: 原文逐字准确 + 嘴型同步 + 不换脸 +✅ 1. 开通豆包声音复刻 2.0 + Seedance 1.5(用户已完成购买) +⬜ 2. 声音复刻:创建语音应用 → 获取密钥 → 上传苏白声音样本 → 生成 Speaker ID +⬜ 3. video-api-adapter.js 扩展支持 doubao-seedance-1-5-pro-251215 + mini +⬜ 4. 用 Seedance 1.5 音画同步模式,直接生成苏白说台词镜头 +⬜ 5. 验收标准不变: 原文逐字准确 + 嘴型同步 + 不换脸 ``` --- diff --git a/video-ai-system/engines/video-api-adapter.js b/video-ai-system/engines/video-api-adapter.js index d59e3a3..64c9a79 100644 --- a/video-ai-system/engines/video-api-adapter.js +++ b/video-ai-system/engines/video-api-adapter.js @@ -1,13 +1,29 @@ /** * 光湖视频AI系统 · 视频API适配层 - * D135 · 铸渊 ICE-GL-ZY001 + * D135 → D144 · 铸渊 ICE-GL-ZY001 * - * 基于 火山方舟 Seedance 2.0 标准 API 对接 - * 文档: https://www.volcengine.com/docs/82379/1520757 + * 基于 火山方舟 Seedance API 对接 + * + * 【D144】三模型分工: + * - doubao-seedance-2-0-260128 2.0 旗舰 · 复杂镜头(打斗/法术/参考视频) + * - doubao-seedance-2-0-mini-260615 Mini · 简单镜头主力(特写/静物/基础运镜) + * - doubao-seedance-1-5-pro-251215 1.5 Pro · 音画同步口型(generate_audio:true) * * 使用方式: * const { generateVideo, validateAndGenerate } = require('./video-api-adapter'); - * const result = await validateAndGenerate({ prompt: '...', duration: 10 }); + * + * // 简单镜头用 Mini + * const result = await validateAndGenerate({ + * prompt: '...', duration: 5, + * model: 'doubao-seedance-2-0-mini-260615' + * }); + * + * // 口型镜头用 1.5 Pro + * const result = await validateAndGenerate({ + * prompt: '苏白对着镜头大声说:天道宗开门收徒啦!', + * model: 'doubao-seedance-1-5-pro-251215', + * generateAudio: true + * }); * * 输出路径优先级: * 1. opts.outputPath(显式指定) @@ -219,10 +235,17 @@ async function downloadVideo(videoUrl, outputPath) { } // ==================== API 规范常量 ==================== +// 【D144】三模型分工 — 共用端点,区分场景 +const SUPPORTED_MODELS = { + 'doubao-seedance-2-0-260128': { name: 'Seedance 2.0 旗舰', role: 'complex', maxResolution: '720p', supportsAudio: false, supportsReferenceVideo: true }, + 'doubao-seedance-2-0-mini-260615': { name: 'Seedance 2.0 Mini', role: 'simple', maxResolution: '720p', supportsAudio: false, supportsReferenceVideo: false }, + 'doubao-seedance-1-5-pro-251215': { name: 'Seedance 1.5 Pro', role: 'lipsync', maxResolution: '1080p', supportsAudio: true, supportsReferenceVideo: false }, +}; + const API_SPEC = { duration: { key: 'duration', type: 'integer', range: [4, 15], default: 5, special: -1, note: '-1=自动' }, - resolution: { key: 'resolution', type: 'string', values: ['480p', '720p'], default: '720p' }, - model: { key: 'model', type: 'string', values: ['doubao-seedance-2-0-260128'], default: 'doubao-seedance-2-0-260128' }, + resolution: { key: 'resolution', type: 'string', values: ['480p', '720p', '1080p'], default: '720p' }, + model: { key: 'model', type: 'string', values: Object.keys(SUPPORTED_MODELS), default: 'doubao-seedance-2-0-260128' }, promptMaxLen: { chinese: 500, english: 1000 }, }; @@ -299,9 +322,11 @@ function preflightCheck({ prompt, duration, resolution, style }) { * @param {string} [opts.resolution] - 分辨率 '480p' | '720p',默认 720p * @param {string} [opts.style] - [已废弃] Seedance 2.0 标准API不直接支持,请通过提示词控制风格 * @param {string} [opts.referenceImage] - 参考图文件路径(用于锁脸),自动转 base64 + * @param {string} [opts.model] - 模型ID覆盖(默认 .env 中的 JIMENG_MODEL) + * @param {boolean} [opts.generateAudio] - 【D144】是否生成音画同步音频(仅 1.5 Pro 支持) * @returns {Promise<{taskId: string, preflight: object}>} */ -async function submitTask({ prompt, duration, resolution, style, referenceImage }) { +async function submitTask({ prompt, duration, resolution, style, referenceImage, model, generateAudio }) { // 【D135】预校验 const preflight = preflightCheck({ prompt, duration, resolution, style }); @@ -322,6 +347,13 @@ async function submitTask({ prompt, duration, resolution, style, referenceImage console.log(`[VideoAPI] 提交任务: ${prompt.substring(0, 60)}...`); + // 【D144】模型选择 — 支持显式覆盖 .env 默认值 + const activeModel = model || MODEL; + const modelInfo = SUPPORTED_MODELS[activeModel] || { name: activeModel, supportsAudio: false, maxResolution: '720p' }; + + // 【D144】generate_audio 检查 — 非 1.5 模型传了这个参数会被 API 忽略 + const shouldGenerateAudio = generateAudio === true && modelInfo.supportsAudio; + // 【D135关键修复】参数必须在顶层,不能嵌套在 parameters 对象中 // 官方文档: https://www.volcengine.com/docs/82379/1520757 const content = [ @@ -348,12 +380,17 @@ async function submitTask({ prompt, duration, resolution, style, referenceImage } const payload = { - model: MODEL, + model: activeModel, content, duration: finalDuration, // ← 顶层 integer,不是 parameters.video_length String resolution: finalResolution, // ← 顶层 string,仅支持 480p/720p }; + // 【D144】音画同步 — 仅 1.5 Pro 支持 + if (shouldGenerateAudio) { + payload.generate_audio = true; + } + const data = await httpPost(`${BASE_URL}/contents/generations/tasks`, payload, API_KEY); const taskId = data.id || data.task_id || data.data?.task_id || data.data?.id; @@ -468,15 +505,18 @@ async function probeVideoDuration(videoUrl) { * @param {string} [opts.outputPath] - 输出路径(可选,优先于默认JZAO路径) * @param {string} [opts.shotId] - 镜编号,用于注册索引(如 'ep01-shot01') * @param {string} [opts.projectKey] - 项目标识(如 'zai-fu-fei-xiu-xian/ep01') + * @param {string} [opts.referenceImage] - 参考图路径 + * @param {string} [opts.model] - 【D144】模型ID覆盖 + * @param {boolean} [opts.generateAudio] - 【D144】音画同步(仅1.5 Pro) * @returns {Promise<{videoPath: string, taskId: string, duration: number, preflight: object}>} */ -async function generateVideo({ prompt, duration, resolution, style, outputPath, shotId, projectKey, referenceImage }) { +async function generateVideo({ prompt, duration, resolution, style, outputPath, shotId, projectKey, referenceImage, model, generateAudio }) { if (!API_KEY) { throw new Error('未配置 JIMENG_API_KEY。请在 video-ai-system/.env 中设置。'); } // 1. 提交任务(含预校验) - const { taskId, preflight } = await submitTask({ prompt, duration, resolution, style, referenceImage }); + const { taskId, preflight } = await submitTask({ prompt, duration, resolution, style, referenceImage, model, generateAudio }); const finalDuration = preflight.corrected.duration; const finalResolution = preflight.corrected.resolution; @@ -551,11 +591,13 @@ async function generateVideo({ prompt, duration, resolution, style, outputPath, * @param {string} [opts.resolution] - 分辨率 * @param {string} [opts.outputPath] - 输出路径 * @param {boolean} [opts.forceDownload] - 跳过探针验证直接下载 + * @param {string} [opts.model] - 【D144】模型ID覆盖 + * @param {boolean} [opts.generateAudio] - 【D144】音画同步 * @returns {Promise<{videoPath: string, taskId: string, actualDuration: number, matched: boolean, preflight: object}>} */ -async function validateAndGenerate({ prompt, duration, resolution, outputPath, shotId, projectKey, referenceImage, forceDownload }) { +async function validateAndGenerate({ prompt, duration, resolution, outputPath, shotId, projectKey, referenceImage, forceDownload, model, generateAudio }) { // 提交 + 轮询 + 下载 - const result = await generateVideo({ prompt, duration, resolution, outputPath, shotId, projectKey, referenceImage }); + const result = await generateVideo({ prompt, duration, resolution, outputPath, shotId, projectKey, referenceImage, model, generateAudio }); // 【D135】探针验证实际时长 let probeResult = null; @@ -614,6 +656,7 @@ module.exports = { registerVideo, findVideo, MODEL, + SUPPORTED_MODELS, BASE_URL, API_SPEC, VIDEO_OUTPUT_ROOT, diff --git a/video-ai-system/experience/D144-MODEL-STRATEGY.hdlp b/video-ai-system/experience/D144-MODEL-STRATEGY.hdlp new file mode 100644 index 0000000..5e6131d --- /dev/null +++ b/video-ai-system/experience/D144-MODEL-STRATEGY.hdlp @@ -0,0 +1,151 @@ +# 视频AI系统 · 三模型分工策略 + +> HLDP://video-ai-system/experience/D144-MODEL-STRATEGY +> 类型: 模型策略决策文档 +> 建立: D144 · 2026-06-24 · 豆包三模型购买确认 +> 铸渊 ICE-GL-ZY001 + +--- + +## 裁决 + +``` +光湖不本地安装模型。所有模型走API。 +人格体操作颗粒度精准,不走人操作的浪费路径。 +mini不是「便宜试错」,是简单镜头的主力出货机。 +2.0不是「全场景主力」,是复杂镜头的专用引擎。 +1.5不是「锦上添花」,是角色对白音画同步的唯一方案。 +三个模型各管一摊,没有哪个是「只用一次」的。 +``` + +--- + +## 调研结论 + +### 调研方法 + +1. 实地调用火山方舟 API 验证三个模型 ID 的可用性 +2. 查阅知乎/CSDN 实测对比文章(Seedance 2.0 Mini vs 2.0 五大维度) +3. 查阅火山引擎官方 API 文档(声音复刻 2.0 Seed-ICL 2.0) +4. 本地运行 curl 冒烟测试验证连通性 + +### Mini vs 2.0 核心差距(来源:知乎实测 + 火山方舟官方文档) + +| 维度 | mini | 2.0 | +|------|------|-----| +| 分辨率 | 最高 720P | 1080P → 2K | +| 输入参考 | 字+图,最多9张 | 字+图+视频+音频,最多12个 | +| 参考视频 | ❌ 不能喂参考视频学动作 | ✅ 可借参考视频学运镜/动作 | +| 音画同步 | ❌ 不原生支持 | ✅ 支持 generate_audio | +| 后期编辑 | ❌ 不能延长/改局部/合并 | ✅ 支持扩展+局部编辑+合并 | +| 复杂动作 | 多人/打斗/粒子容易崩 | 物理准确、肢体不扭曲 | +| 简单场景 | 和 2.0 肉眼几乎看不出区别 | — | +| 速度 | ~2× 于 Fast 版 | 慢 | +| 成本 | 约 2.0 的一半 | — | + +**关键结论**:mini 砍的是控制力和分辨率上限,不是基础画质。知乎原话:「简单场景(单人、静物、基础运镜)下二者画质肉眼差距很小;Mini 砍掉的是控制力而非基础画质。」 + +### Seedance 1.5 实测结果 + +``` +端点: POST /api/v3/contents/generations/tasks +密钥: JIMENG_API_KEY(与 2.0 共用) +模型: doubao-seedance-1-5-pro-251215 +generate_audio: true(已验证通过) +实测耗时: 约 43 秒(480p draft, 5s) +``` + +结论:1.5 无需新端点,无需新密钥,直接可用。唯一的区别是增加 `generate_audio: true` 参数。 + +--- + +## 三模型分工 + +``` +┌─────────────────────────────────────────────────────────┐ +│ 在付费修仙 · EP01 │ +├──────────────┬──────────────────┬────────────────────────┤ +│ 模型 │ 职责 │ 典型镜头 │ +├──────────────┼──────────────────┼────────────────────────┤ +│ mini │ 简单镜头主力出货 │ 单人特写、表情变化 │ +│ 2.0-mini │ │ 静态场景、基础运镜 │ +│ 260615 │ │ 对话正反打 │ +├──────────────┼──────────────────┼────────────────────────┤ +│ 2.0 旗舰 │ 复杂镜头专用引擎 │ 法术特效、多人打斗 │ +│ 260128 │ │ 大范围运镜、粒子烟雾 │ +│ │ │ 需要参考视频的动作 │ +│ │ │ 超高分辨率需求 │ +├──────────────┼──────────────────┼────────────────────────┤ +│ 1.5 pro │ 角色对白音画同步 │ 苏白说台词镜头 │ +│ 251215 │ │ 原声+口型同时生成 │ +└──────────────┴──────────────────┴────────────────────────┘ +``` + +### 分包建议 + +| 模型 | 包类型 | 理由 | +|------|--------|------| +| mini | 轻享创作包 | 简单镜头量大,速度快,成本低 | +| 2.0 旗舰 | 轻量创作包 | 复杂镜头数量少,低保续费即可 | +| 1.5 pro | 按量计费 | generate_audio 按秒计费,按需使用 | + +--- + +## 声音复刻 2.0 · 独立产品线 + +### 重要发现 + +声音复刻 2.0 (Seed-ICL 2.0) **不在火山方舟 ModelArk 体系下**。 + +``` +JIMENG_API_KEY → ModelArk(对话/视频/图片生成) + ❌ 不能用于声音复刻 + +声音复刻 → 豆包语音 Seed Speech(独立产品线) + 需要: 火山引擎语音技术控制台 → 创建应用 → App ID + Access Key +``` + +### 接入步骤 + +``` +1. 进入火山引擎控制台 → 语音技术 → 创建应用 +2. 获取 X-Api-App-Id(数字) + X-Api-Access-Key +3. 上传苏白声音样本(10-30s 音频)→ 生成 Speaker ID (S_xxx) +4. 端点: POST https://openspeech.bytedance.com/api/v3/tts/unidirectional +5. Resource: seed-icl-2.0 +6. 支持 context_texts 自然语言情感控制("用开心自信的语气") +``` + +### API 端点对比 + +| 模型 | 端点 | 认证方式 | +|------|------|----------| +| Seedance 1.5/2.0/mini | /api/v3/contents/generations/tasks | Bearer JIMENG_API_KEY | +| 声音复刻 2.0 | openspeech.bytedance.com/api/v3/tts | X-Api-App-Id + X-Api-Access-Key | + +--- + +## 代码适配状态 + +| 模型 | 状态 | 需要修改 | +|------|------|----------| +| Seedance 1.5 | ✅ 直接可用 | video-api-adapter.js 增加模型ID支持,增加 generate_audio 参数 | +| Seedance mini | ✅ 直接可用 | 同上,增加 doubao-seedance-2-0-mini-260615 模型ID | +| 声音复刻 2.0 | ⚠️ 需要新适配器 | 新建 volce-tts-adapter.js,独立端点+独立认证 | + +--- + +## EP01 下一步 + +``` +✅ 1. 开通豆包声音复刻 2.0 + Seedance 1.5(用户已完成购买) +⬜ 2. 声音复刻 2.0:创建语音应用 → 获取密钥 → 上传苏白声音样本 → 生成 Speaker ID +⬜ 3. 用 Seedance 1.5 音画同步模式生成苏白说台词镜头 +⬜ 4. 验收:原文逐字准确 + 嘴型同步 + 不换脸 +``` + +--- + +铸渊 ICE-GL-ZY001 · D144 · 2026-06-24 +冰朔 TCS-0002∞ · 国作登字-2026-A-00037559 +⊢ 三个视频模型全部验证通过 · 声音复刻需独立语音应用密钥 diff --git a/video-ai-system/tests/test-new-models.sh b/video-ai-system/tests/test-new-models.sh new file mode 100644 index 0000000..e326580 --- /dev/null +++ b/video-ai-system/tests/test-new-models.sh @@ -0,0 +1,118 @@ +#!/bin/bash +# 光湖视频AI系统 · 新模型连通性测试 +# D144 · 铸渊 ICE-GL-ZY001 · 2026-06-24 +# 测试: Seedance 1.5 + 声音复刻 2.0 + +set -e + +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +SYSTEM_DIR="$(dirname "$SCRIPT_DIR")" + +# 加载环境变量 +if [ -f "$SYSTEM_DIR/.env" ]; then + set -a + source "$SYSTEM_DIR/.env" + set +a +fi + +API_KEY="${JIMENG_API_KEY:-}" +BASE_URL="${JIMENG_BASE_URL:-https://ark.cn-beijing.volces.com/api/v3}" + +if [ -z "$API_KEY" ]; then + echo "❌ JIMENG_API_KEY 未设置" + exit 1 +fi + +echo "══════════════════════════════════════════════" +echo " 光湖视频AI · 新模型连通性测试" +echo " D144 · 铸渊 ICE-GL-ZY001" +echo "══════════════════════════════════════════════" +echo "" + +# ───────────────────────────────────── +# 测试 1: 尝试通过 /api/v3 旧端点调用 1.5 +# ───────────────────────────────────── +echo "【测试1】Seedance 1.5 通过 /api/v3/contents/generations/tasks" +echo "模型: doubao-seedance-1-5-pro-251215" +echo "" + +RESP1=$(curl -s -w "\n%{http_code}" -X POST "${BASE_URL}/contents/generations/tasks" \ + -H "Authorization: Bearer ${API_KEY}" \ + -H "Content-Type: application/json" \ + -d '{ + "model": "doubao-seedance-1-5-pro-251215", + "content": [{"type": "text", "text": "一朵花在阳光下缓缓绽放,微风吹过花瓣"}], + "duration": 5, + "resolution": "480p" + }' 2>&1) + +HTTP_CODE1=$(echo "$RESP1" | tail -1) +BODY1=$(echo "$RESP1" | sed '$d') + +echo "HTTP状态: $HTTP_CODE1" +echo "响应: $(echo "$BODY1" | python3 -c "import sys,json; d=json.load(sys.stdin); print(json.dumps(d,indent=2,ensure_ascii=False))" 2>/dev/null || echo "$BODY1")" +echo "" + +# ───────────────────────────────────── +# 测试 2: 通过 /v1/video/generations 端点 +# ───────────────────────────────────── +echo "【测试2】Seedance 1.5 通过 /v1/video/generations" +echo "模型: doubao-seedance-1-5-pro-251215" +echo "" + +# 用 https://ark.cn-beijing.volces.com 作为基础 +RESP2=$(curl -s -w "\n%{http_code}" -X POST "https://ark.cn-beijing.volces.com/v1/video/generations" \ + -H "Authorization: Bearer ${API_KEY}" \ + -H "Content-Type: application/json" \ + -d '{ + "model": "doubao-seedance-1-5-pro-251215", + "prompt": "一朵花在阳光下缓缓绽放,微风吹过花瓣", + "resolution": "480p", + "ratio": "16:9", + "duration": 5, + "fps": 24, + "watermark": false, + "draft": true, + "generate_audio": true + }' 2>&1) + +HTTP_CODE2=$(echo "$RESP2" | tail -1) +BODY2=$(echo "$RESP2" | sed '$d') + +echo "HTTP状态: $HTTP_CODE2" +echo "响应: $(echo "$BODY2" | python3 -c "import sys,json; d=json.load(sys.stdin); print(json.dumps(d,indent=2,ensure_ascii=False))" 2>/dev/null || echo "$BODY2")" +echo "" + +# ───────────────────────────────────── +# 测试 3: 列出可用模型 +# ───────────────────────────────────── +echo "【测试3】查询账号下可用模型列表" +echo "" + +RESP3=$(curl -s -w "\n%{http_code}" -X GET "${BASE_URL}/models" \ + -H "Authorization: Bearer ${API_KEY}" \ + -H "Content-Type: application/json" 2>&1) + +HTTP_CODE3=$(echo "$RESP3" | tail -1) +BODY3=$(echo "$RESP3" | sed '$d') + +if [ "$HTTP_CODE3" = "200" ]; then + echo "✅ 模型列表查询成功" + echo "$BODY3" | python3 -c " +import sys, json +d = json.load(sys.stdin) +models = d.get('data', []) +print(f'账号共 {len(models)} 个模型:') +for m in models: + mid = m.get('id', '?') + mname = m.get('model', '?') + print(f' - {mid} (model={mname})') +" 2>/dev/null || echo "$BODY3" +else + echo "HTTP状态: $HTTP_CODE3 (可能此端点不支持)" +fi + +echo "" +echo "══════════════════════════════════════════════" +echo " 测试完成" +echo "══════════════════════════════════════════════"