fix(#462): 修复直通模式下水印静默失效 - 配置格式不兼容 #739

Merged
xiaoxia merged 2 commits from fix/462-pass-through-watermark into develop 2026-07-22 22:42:15 +08:00
Owner

fix #462 水印配置格式不兼容

fix #462 水印配置格式不兼容
xiaoxia added 1 commit 2026-07-22 19:36:47 +08:00
fix(#462): 修复直通模式下水印静默失效 - 配置格式不兼容
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m11s
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 / Check if frontend-only change (pull_request) Successful in 25s
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 2m20s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 11s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 8s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 25s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 35s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Failing after 33s
AI Code Review / AI Code Review (pull_request) Successful in 5m40s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 24s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 9m17s
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 / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Unit Tests (pull_request) Successful in 1m0s
CI/CD Pipeline / Integration Tests (pull_request) Failing after 2m51s
CI/CD Pipeline / PR Build Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been cancelled
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been cancelled
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been cancelled
25c9af5daa
根因:API层水印配置存在 config.export.watermark_enabled/text(扁平格式),
但渲染引擎只从 config.watermark(嵌套格式)读取,两套格式不兼容导致
水印配置永远读不到,所有模式下水印都静默失效,单clip直通模式更隐蔽。

修复:
1. 新增 _resolve_watermark_config 静态方法,统一解析水印配置
2. 同时支持两种存储格式:
   - 嵌套格式(优先):config.watermark = {enabled, mode, ...}
   - 扁平格式:config.export.watermark_enabled + watermark_text
3. _can_use_pass_through 和 _build_filter_complex 两处均使用统一方法
4. 补充 9 个单测覆盖两种格式及边界情况

🚀 预览环境已部署

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

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

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

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

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #739 | | 预览链接 | [https://pr-739.preview.xiaoxiajianji.com](https://pr-739.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
xiaoxia added 1 commit 2026-07-22 20:09:23 +08:00
fix(ci): auto-fix lint/format issues
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 20s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 36s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 27s
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 / Frontend Lint (pull_request) Successful in 41s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 1m55s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 47s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Failing after 46s
CI/CD Pipeline / Frontend Unit Tests (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
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 36s
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 3m8s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 48s
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 / Integration Tests (pull_request) Failing after 2m39s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (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
AI Code Review / AI Code Review (pull_request) Successful in 5m19s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 10m40s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 16m37s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 1m10s
fadc3c7378
auto-approve-bot approved these changes 2026-07-22 20:12:19 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

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

CI全绿,自动审批通过。

CI全绿,自动审批通过。
Collaborator

代码审查结果 - PR #739

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

  1. apps/worker/video_processing/unified_render_service.py 第870-876行:扁平格式解析时缺乏异常处理,存在类型转换崩溃风险。
    • 问题描述:在解析扁平格式(export 字段)的水印配置时,直接使用 float()int() 强制转换 watermark_opacitywatermark_font_size。如果配置中这些字段的值是非数字字符串(如 "high""large")或 None,将抛出 ValueErrorTypeError,导致 Worker 进程崩溃。相比之下,嵌套格式使用 from_dict 通常具备更好的容错性。
    • 修改建议:在构造 WatermarkConfig 的代码块外层添加 try...except ValueError, TypeError,捕获异常时记录警告日志并返回 None,或者封装一个安全的类型转换辅助函数。

💡 建议(2个可选)

  1. apps/worker/video_processing/unified_render_service.py 第1行(推测):确认模块级导入是否存在。

    • 问题描述:原代码在 _can_use_pass_through 方法内部有 from video_processing.watermark_engine import WatermarkConfig 的局部导入,新代码将其移除并改为调用静态方法。如果文件顶部没有导入 WatermarkConfig,新代码将无法运行。
    • 修改建议:请确认文件顶部已包含 from video_processing.watermark_engine import WatermarkConfig
  2. apps/worker/video_processing/unified_render_service.py 第865行:布尔值校验不够严谨。

    • 问题描述:enabled = export_cfg.get("watermark_enabled", False) 直接获取值。如果配置源(如某些 YAML 或非严格 JSON 解析器)传入了字符串 "false",Python 会将其视为真值(非空字符串),导致本应关闭的水印被意外开启。
    • 修改建议:建议显式检查布尔类型,例如 enabled = export_cfg.get("watermark_enabled") is Truebool(export_cfg.get("watermark_enabled"))(取决于业务对弱类型的需求),确保逻辑严格符合预期。

格式检查通过 | 逻辑审查需修改 | ⚠️ 建议关注性能


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

## 代码审查结果 - PR #739 ### ⚠️ 问题(1个需要修改) 1. **apps/worker/video_processing/unified_render_service.py 第870-876行**:扁平格式解析时缺乏异常处理,存在类型转换崩溃风险。 - 问题描述:在解析扁平格式(`export` 字段)的水印配置时,直接使用 `float()` 和 `int()` 强制转换 `watermark_opacity` 和 `watermark_font_size`。如果配置中这些字段的值是非数字字符串(如 `"high"`、`"large"`)或 `None`,将抛出 `ValueError` 或 `TypeError`,导致 Worker 进程崩溃。相比之下,嵌套格式使用 `from_dict` 通常具备更好的容错性。 - 修改建议:在构造 `WatermarkConfig` 的代码块外层添加 `try...except ValueError, TypeError`,捕获异常时记录警告日志并返回 `None`,或者封装一个安全的类型转换辅助函数。 ### 💡 建议(2个可选) 1. **apps/worker/video_processing/unified_render_service.py 第1行(推测)**:确认模块级导入是否存在。 - 问题描述:原代码在 `_can_use_pass_through` 方法内部有 `from video_processing.watermark_engine import WatermarkConfig` 的局部导入,新代码将其移除并改为调用静态方法。如果文件顶部没有导入 `WatermarkConfig`,新代码将无法运行。 - 修改建议:请确认文件顶部已包含 `from video_processing.watermark_engine import WatermarkConfig`。 2. **apps/worker/video_processing/unified_render_service.py 第865行**:布尔值校验不够严谨。 - 问题描述:`enabled = export_cfg.get("watermark_enabled", False)` 直接获取值。如果配置源(如某些 YAML 或非严格 JSON 解析器)传入了字符串 `"false"`,Python 会将其视为真值(非空字符串),导致本应关闭的水印被意外开启。 - 修改建议:建议显式检查布尔类型,例如 `enabled = export_cfg.get("watermark_enabled") is True` 或 `bool(export_cfg.get("watermark_enabled"))`(取决于业务对弱类型的需求),确保逻辑严格符合预期。 --- ✅ 格式检查通过 | ❌ 逻辑审查需修改 | ⚠️ 建议关注性能 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-22 20:16:23 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
xiaoxia merged commit 18a1f4e43d into develop 2026-07-22 22:42:15 +08:00

🗑️ 预览环境已清理

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

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

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