fix(#549): 预设配音无声 - 顶层voice_id+custom_text与tts配置路径不匹配 #626

Merged
auto-approve-bot merged 4 commits from fix/549-preset-voice-silent into develop 2026-07-20 12:19:38 +08:00
Owner

问题

用户选择预设配音并输入文案后,生成的视频里听不到配音,等于选了也白选。

根因

前后端配置路径不匹配

  • 前端一键生成页面传 config.voice_id + config.custom_text(顶层字段)
  • 统一渲染引擎从 config.tts 嵌套对象读取 TTS 配置
  • 两条路径完全不匹配,导致 TTS 配音从未被触发

修复

_maybe_add_voiceover_layer 增加桥接兼容逻辑:

  • tts.enabled 为 False 但顶层有 voice_id + custom_text
  • 自动映射为 tts 配置并触发配音生成
  • tts 配置已存在时优先使用 tts 配置,不被顶层字段覆盖

测试

新增4个单元测试:

  • test_top_level_voice_id_with_text_triggers_tts - 桥接触发正常
  • test_tts_config_takes_priority - tts配置优先于顶层字段
  • test_top_level_voice_id_without_text_no_trigger - 缺文本不触发
  • test_no_voice_config_no_trigger - 无配置不触发

109个测试全绿。

## 问题 用户选择预设配音并输入文案后,生成的视频里听不到配音,等于选了也白选。 ## 根因 **前后端配置路径不匹配**: - 前端一键生成页面传 `config.voice_id` + `config.custom_text`(顶层字段) - 统一渲染引擎从 `config.tts` 嵌套对象读取 TTS 配置 - 两条路径完全不匹配,导致 TTS 配音从未被触发 ## 修复 在 `_maybe_add_voiceover_layer` 增加桥接兼容逻辑: - 当 `tts.enabled` 为 False 但顶层有 `voice_id` + `custom_text` 时 - 自动映射为 tts 配置并触发配音生成 - `tts` 配置已存在时优先使用 tts 配置,不被顶层字段覆盖 ## 测试 新增4个单元测试: - `test_top_level_voice_id_with_text_triggers_tts` - 桥接触发正常 - `test_tts_config_takes_priority` - tts配置优先于顶层字段 - `test_top_level_voice_id_without_text_no_trigger` - 缺文本不触发 - `test_no_voice_config_no_trigger` - 无配置不触发 109个测试全绿。
xiaoxia added 1 commit 2026-07-20 10:43:21 +08:00
fix(#549): 预设配音无声 - 顶层voice_id+custom_text与tts配置路径不匹配
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
Preview Deploy / Deploy Preview Environment (pull_request) Failing after 21s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 21s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
AI Code Review / AI Code Review (pull_request) Failing after 24s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 38s
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Failing after 2m3s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 2m27s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 2m31s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 2m34s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m34s
d919650fdf
根因:前端一键生成页面传 config.voice_id + config.custom_text(顶层字段),
      统一渲染引擎从 config.tts 嵌套对象读取TTS配置,路径完全不匹配,
      导致 TTS 配音从未被触发,选了预设配音也等于没选。

修复:在 _maybe_add_voiceover_layer 增加桥接兼容逻辑——
      当 tts.enabled 为 False 但顶层有 voice_id + custom_text 时,
      自动映射为 tts 配置并触发配音生成。

新增4个单元测试覆盖:桥接触发、tts配置优先、缺文本不触发、无配置不触发。
xiaoxia added 1 commit 2026-07-20 11:31:08 +08:00
style: black format test_unified_render_service.py
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
Preview Deploy / Deploy Preview Environment (pull_request) Failing after 23s
AI Code Review / AI Code Review (pull_request) Failing after 40s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 22s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 4m41s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 33s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Failing after 2m13s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 6m20s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 7m14s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m50s
b8715d5122
xiaoxia added 1 commit 2026-07-20 11:44:29 +08:00
style: 修复ruff E741 ambiguous variable name (l -> layer)
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
Preview Deploy / Deploy Preview Environment (pull_request) Failing after 24s
AI Code Review / AI Code Review (pull_request) Failing after 32s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 9s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 4m14s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 22s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 4m54s
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Successful in 2m49s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 7m23s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m36s
aa78f35056
xiaoxia added 1 commit 2026-07-20 12:10:47 +08:00
fix(test): 修复E741变量名替换不完整导致的NameError
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 12s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Unit Tests (pull_request) Successful in 1m12s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m36s
AI Code Review / AI Code Review (pull_request) Successful in 2m36s
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Successful in 4m3s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 4m55s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 5m5s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 2m54s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 8m50s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 6s
af5a6f587d

🚀 预览环境已部署

项目 详情
PR号 #626
预览链接 https://pr-626.preview.xiaoxiajianji.com
API环境 staging

💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。

🔄 每次提交新代码后预览环境会自动更新。

🗑️ PR 关闭或合并后,预览环境会自动清理。

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #626 | | 预览链接 | [https://pr-626.preview.xiaoxiajianji.com](https://pr-626.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
Collaborator

代码审查结果 - PR #626

⚠️ 问题(1个需要修改)

  1. apps/worker/video_processing/unified_render_service.py 第678行:桥接逻辑条件判断存在缺陷,当 config.tts.enabled 显式设置为 False 时,代码仍会执行桥接逻辑并强制启用 TTS,违背了显式配置优先的原则。
    • 后果:如果用户显式配置 tts: {enabled: false} 意在禁用配音,但同时又传了 voice_id 等顶层字段(可能是脏数据或旧逻辑残留),系统会错误地启用配音,导致非预期行为。
    • 修改建议:应仅在 tts 配置不存在或为空时才进行桥接,而不是仅检查 enabled 为假。建议修改条件为 if not config.get("tts"):,确保只要 tts 字段存在(无论 enabled 是 true 还是 false),都优先使用 tts 配置,不再回退到顶层字段。

💡 建议(2个可选)

  1. apps/worker/video_processing/unified_render_service.py 第690行:日志中打印了 top_voice_id,如果该 ID 包含敏感信息(如鉴权 Token),可能存在信息泄露风险。
    • 建议:确认 voice_id 的性质,如果是公开的模型 ID(如示例中的 longxiaoxia_v3)则当前做法可接受;如果是敏感 Token,建议仅打印 ID 的前几位或脱敏处理。
  2. tests/unit/test_unified_render_service.py:测试用例覆盖不够全面。
    • 建议:增加一个测试用例,验证当 config.tts 存在且 enabledFalse 时,即使存在顶层 voice_idcustom_text,也不应触发桥接和配音。这能直接覆盖上述逻辑问题。

格式检查通过 | 逻辑审查需修改 | 性能无明显问题


🤖 由 AI 代码审查机器人自动生成 | 2026-07-20 12:13:23 | 模型:

## 代码审查结果 - PR #626 ### ⚠️ 问题(1个需要修改) 1. **apps/worker/video_processing/unified_render_service.py 第678行**:桥接逻辑条件判断存在缺陷,当 `config.tts.enabled` 显式设置为 `False` 时,代码仍会执行桥接逻辑并强制启用 TTS,违背了显式配置优先的原则。 - **后果**:如果用户显式配置 `tts: {enabled: false}` 意在禁用配音,但同时又传了 `voice_id` 等顶层字段(可能是脏数据或旧逻辑残留),系统会错误地启用配音,导致非预期行为。 - **修改建议**:应仅在 `tts` 配置**不存在**或为空时才进行桥接,而不是仅检查 `enabled` 为假。建议修改条件为 `if not config.get("tts"):`,确保只要 `tts` 字段存在(无论 enabled 是 true 还是 false),都优先使用 `tts` 配置,不再回退到顶层字段。 ### 💡 建议(2个可选) 1. **apps/worker/video_processing/unified_render_service.py 第690行**:日志中打印了 `top_voice_id`,如果该 ID 包含敏感信息(如鉴权 Token),可能存在信息泄露风险。 - **建议**:确认 `voice_id` 的性质,如果是公开的模型 ID(如示例中的 `longxiaoxia_v3`)则当前做法可接受;如果是敏感 Token,建议仅打印 ID 的前几位或脱敏处理。 2. **tests/unit/test_unified_render_service.py**:测试用例覆盖不够全面。 - **建议**:增加一个测试用例,验证当 `config.tts` 存在且 `enabled` 为 `False` 时,即使存在顶层 `voice_id` 和 `custom_text`,也不应触发桥接和配音。这能直接覆盖上述逻辑问题。 --- ✅ 格式检查通过 | ❌ 逻辑审查需修改 | ✅ 性能无明显问题 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-20 12:13:23 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
auto-approve-bot approved these changes 2026-07-20 12:15:52 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot approved these changes 2026-07-20 12:15:53 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot merged commit dc12d4669f into develop 2026-07-20 12:19:38 +08:00
auto-approve-bot deleted branch fix/549-preset-voice-silent 2026-07-20 12:19:38 +08:00

🗑️ 预览环境已清理

PR #626 已关闭或合并,对应的预览环境已被清理。

如有需要,可以重新打开 PR 来重新生成预览环境。

🗑️ **预览环境已清理** PR #626 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Sign in to join this conversation.