fix: 模板生成计划时配置字段漏传 - export水印 + 调速speed_ratio + clip config透传 #501

Merged
auto-approve-bot merged 2 commits from fix/template-config-propagation into develop 2026-07-18 15:36:34 +08:00
Owner

问题

PlanGeneratorService 从模板生成剪辑计划时,多个配置字段未正确传递,导致P0效果层验证时调速、水印等不生效。

修复内容

1. 导出级配置漏传(P0)

_build_plan_config 只继承了 cover/title/subtitle/bgm,漏掉了 export 和 filter:

  • watermark_enabled / watermark_text:模板水印配置未传递到计划
  • resolution / fps:导出分辨率和帧率未传递
  • filter:滤镜配置未传递

修复:继承列表增加 export、filter

2. 片段级调速漏传(P0)

_create_clips_from_configs 创建 EditPlanClip 时:

  • 未读取 clip_config.config.speed_ratio 并映射到 clip.playback_speed
  • clip_config.config 整体未传递到 clip.config

修复:

  • cfg.config 读取 speed_ratio / playback_speed,映射到 playback_speed
  • playback_speed 优先,speed_ratio 作为兼容字段
  • cfg.config 整体透传到 clip.config

3. 字幕/ASR配置

确认 subtitle 已在原有继承列表中,ASR自动字幕配置(auto_generated)正常传递。

测试

新增 7 个单元测试,全部通过:

  • export 配置传递(watermark/resolution/fps)
  • filter 配置传递
  • subtitle ASR 配置传递
  • speed_ratio → playback_speed 映射
  • playback_speed 优先于 speed_ratio
  • 默认速度 1.0
  • clip_config.config 整体透传

关联 #406

## 问题 PlanGeneratorService 从模板生成剪辑计划时,多个配置字段未正确传递,导致P0效果层验证时调速、水印等不生效。 ## 修复内容 ### 1. 导出级配置漏传(P0) `_build_plan_config` 只继承了 cover/title/subtitle/bgm,漏掉了 export 和 filter: - **watermark_enabled / watermark_text**:模板水印配置未传递到计划 - **resolution / fps**:导出分辨率和帧率未传递 - **filter**:滤镜配置未传递 修复:继承列表增加 export、filter ### 2. 片段级调速漏传(P0) `_create_clips_from_configs` 创建 EditPlanClip 时: - 未读取 `clip_config.config.speed_ratio` 并映射到 `clip.playback_speed` - `clip_config.config` 整体未传递到 `clip.config` 修复: - 从 `cfg.config` 读取 speed_ratio / playback_speed,映射到 playback_speed - playback_speed 优先,speed_ratio 作为兼容字段 - cfg.config 整体透传到 clip.config ### 3. 字幕/ASR配置 确认 subtitle 已在原有继承列表中,ASR自动字幕配置(auto_generated)正常传递。 ## 测试 新增 7 个单元测试,全部通过: - export 配置传递(watermark/resolution/fps) - filter 配置传递 - subtitle ASR 配置传递 - speed_ratio → playback_speed 映射 - playback_speed 优先于 speed_ratio - 默认速度 1.0 - clip_config.config 整体透传 关联 #406
xiaoxia added the bugbackendP0 labels 2026-07-18 13:16:35 +08:00
xiaoxia added 1 commit 2026-07-18 13:16:35 +08:00
fix: 模板生成计划时配置字段漏传
CI Build & Deploy Pipeline / Build Staging API Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI Build & Deploy Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Production Web Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Production API Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Deploy Production (pull_request) Has been skipped
CI Build & Deploy Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 23s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 56s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 34s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 59s
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Failing after 37s
Auto Merge CI PRs / Auto Merge on CI Green + Approved (pull_request) Successful in 1m10s
Auto Approve CI PRs / Auto Approve on CI Green (pull_request) Successful in 1m13s
AI Code Review / AI Code Review (pull_request) Successful in 2m10s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m20s
1c36741bb4
- export/watermark配置:从template.config.export继承到plan.config.export
- filter配置:同步继承
- 片段级speed_ratio:从clip_config.config映射到clip.playback_speed(兼容playback_speed字段名,优先)
- clip_config.config整体传递到clip.config,保留所有自定义字段
- subtitle/ASR配置已在原有继承列表中,确认正常传递

关联 #406

🚀 预览环境已部署

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

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

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

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

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #501 | | 预览链接 | [https://pr-501.preview.xiaoxiajianji.com](https://pr-501.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
xiaoxia added 1 commit 2026-07-18 15:31:31 +08:00
style: black格式化测试文件
CI Build & Deploy Pipeline / Build Staging API Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Production API Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Production Web Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI Build & Deploy Pipeline / Deploy Production (pull_request) Has been skipped
CI Build & Deploy Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI Build & Deploy Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 21s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 57s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m0s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 38s
AI Code Review / AI Code Review (pull_request) Successful in 2m51s
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Successful in 3m3s
Auto Approve CI PRs / Auto Approve on CI Green (pull_request) Successful in 3m31s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m24s
Auto Merge CI PRs / Auto Merge on CI Green + Approved (pull_request) Successful in 5m2s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 24s
dc70275e5d
Collaborator

代码审查结果 - PR #501

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

  1. apps/api/app/services/plan_generator_service.py 第190行playback_speed 解析逻辑存在边界条件错误,使用 or 1.0 会导致值为 0.0 时被强制重置为 1.0
    • 原因:在 Python 中 0.0 为假值。如果业务逻辑支持 0.0(通常表示暂停/定格效果),该代码会错误地将其修正为 1.0。此外,若 speed_ratio0.0 也会被错误覆盖。
    • 后果:无法设置片段暂停或定格效果,导致功能缺失。
    • 修改建议:应显式判断是否为 None,例如:
      val = clip_cfg.get("playback_speed", clip_cfg.get("speed_ratio"))
      playback_speed = 1.0 if val is None else val
      

💡 建议(2个可选)

  1. apps/api/app/services/plan_generator_service.py 第154行:模板配置字典直接赋值存在引用共享风险。

    • 说明plan_config[key] = template_config[key] 是浅拷贝,直接传递了字典引用。如果后续逻辑修改了 plan_config 中的配置(如 export),且 template 对象被缓存或复用,会导致原始模板配置被意外修改。
    • 建议:建议使用 copy.deepcopy() 或字典解包 {**template_config[key]} 进行拷贝,确保数据隔离。
  2. apps/api/app/services/plan_generator_service.py 第202行:片段配置 clip_cfg 直接传递存在副作用风险。

    • 说明config=clip_cfg 直接传入了 cfg.config 的引用。若 EditPlanClip.create 内部或后续修改了该字典,可能会影响原始的 cfg 对象(如果它是共享的)。
    • 建议:同上,建议传递副本 clip_cfg.copy()

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


🤖 由 AI 代码审查机器人自动生成 | 2026-07-18 15:34:24 | 模型:

## 代码审查结果 - PR #501 ### ⚠️ 问题(1个需要修改) 1. **apps/api/app/services/plan_generator_service.py 第190行**:`playback_speed` 解析逻辑存在边界条件错误,使用 `or 1.0` 会导致值为 `0.0` 时被强制重置为 `1.0`。 - **原因**:在 Python 中 `0.0` 为假值。如果业务逻辑支持 `0.0`(通常表示暂停/定格效果),该代码会错误地将其修正为 `1.0`。此外,若 `speed_ratio` 为 `0.0` 也会被错误覆盖。 - **后果**:无法设置片段暂停或定格效果,导致功能缺失。 - **修改建议**:应显式判断是否为 `None`,例如: ```python val = clip_cfg.get("playback_speed", clip_cfg.get("speed_ratio")) playback_speed = 1.0 if val is None else val ``` ### 💡 建议(2个可选) 1. **apps/api/app/services/plan_generator_service.py 第154行**:模板配置字典直接赋值存在引用共享风险。 - **说明**:`plan_config[key] = template_config[key]` 是浅拷贝,直接传递了字典引用。如果后续逻辑修改了 `plan_config` 中的配置(如 `export`),且 `template` 对象被缓存或复用,会导致原始模板配置被意外修改。 - **建议**:建议使用 `copy.deepcopy()` 或字典解包 `{**template_config[key]}` 进行拷贝,确保数据隔离。 2. **apps/api/app/services/plan_generator_service.py 第202行**:片段配置 `clip_cfg` 直接传递存在副作用风险。 - **说明**:`config=clip_cfg` 直接传入了 `cfg.config` 的引用。若 `EditPlanClip.create` 内部或后续修改了该字典,可能会影响原始的 `cfg` 对象(如果它是共享的)。 - **建议**:同上,建议传递副本 `clip_cfg.copy()`。 --- ✅ 格式检查通过 | ❌ 逻辑审查需修改 | ✅ 性能无明显问题 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-18 15:34:24 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
auto-approve-bot approved these changes 2026-07-18 15:35:01 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

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

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot merged commit 97c1e5e8a8 into develop 2026-07-18 15:36:34 +08:00
auto-approve-bot deleted branch fix/template-config-propagation 2026-07-18 15:36:34 +08:00

🗑️ 预览环境已清理

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

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

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