test(wave118): 抽离chroma_key_config领域模型 + 45单测 #1013

Closed
xiaoxia wants to merge 1 commits from test/wave118-chroma-key-config into develop
Owner

变更内容

  • 从 chroma_key_engine.py 抽离 chroma_key_config 领域模型到 packages/domain/chroma_key_config.py
  • chroma_key_engine.py: 248→46行 (-81%)
  • 新增 45 个单测,覆盖 ChromaKeyConfig 全部纯逻辑
  • 原有 91 个测试无回归,合计 136 passed
  • 保持向后兼容:chroma_key_engine 模块保留全部公开接口作为薄包装
## 变更内容 - 从 chroma_key_engine.py 抽离 chroma_key_config 领域模型到 packages/domain/chroma_key_config.py - chroma_key_engine.py: 248→46行 (-81%) - 新增 45 个单测,覆盖 ChromaKeyConfig 全部纯逻辑 - 原有 91 个测试无回归,合计 136 passed - 保持向后兼容:chroma_key_engine 模块保留全部公开接口作为薄包装
xiaoxia added 1 commit 2026-07-27 08:25:55 +08:00
test(wave118): 抽离chroma_key_config领域模型 + 45单测
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 22s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m8s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m5s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 44s
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 / PR Build Worker Image (pull_request) Successful in 52s
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 2m59s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 2m6s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m5s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 51s
AI Code Review / AI Code Review (pull_request) Successful in 2m48s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m53s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 5m24s
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
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 / Unit Tests (pull_request) Successful in 2m42s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 2m14s
CI/CD Pipeline / Deploy Production (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 / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
ACR Cleanup / ACR Image Cleanup (pull_request_target) Has been cancelled
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 24s
ea2cd42c59
- 抽离ChromaKeyConfig数据类、5个预设、颜色归一化、colorkey/chromakey滤镜构建到packages/domain/chroma_key_config.py
- chroma_key_engine.py: 248→46行 (-81%),保留ChromaKeyEngine薄包装类+模块级向后兼容导入
- 45个纯逻辑单测全绿,原有91个测试无回归
- 合计136 passed

🚀 预览环境已部署

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

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

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

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

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

代码审查结果 - PR #1013

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

  1. packages/domain/chroma_key_config.py 第177行 (normalize_color):存在严重的过滤器注入风险。

    • 说明:该函数对于不符合 Hex 或 0x 格式的输入(如颜色名)直接透传,未对 ]; 等特殊字符进行过滤。如果 key_color 被构造为 "red];overlay=...[out",生成的滤镜字符串将变成 [in]colorkey=color=red];overlay=...[out...,导致 FFmpeg 滤镜链结构被破坏,攻击者可借此注入任意滤镜操作(如覆盖水印、文件泄露)。
    • 后果:代码注入、安全漏洞、视频处理管道被破坏。
    • 建议:严格限制透传字符,仅允许 [a-zA-Z],或禁止包含 [ ] ; = \ 等特殊字符的输入。
  2. packages/domain/chroma_key_config.py 第226行 (build_colorkey_filter):溢色抑制逻辑与 key_color 强耦合,存在逻辑错误。

    • 说明:代码中 spill_suppress 逻辑硬编码为降低绿色通道增益(gg)并提升红蓝(rr, bb)。当用户使用蓝幕(key_color="#0000FF")或红幕并开启溢出抑制时,该逻辑依然降低绿色通道,导致错误的色彩补偿和严重的画面偏色。
    • 后果:非绿幕场景下开启溢色抑制会导致画面颜色异常。
    • 建议:修改逻辑根据 key_color 判断主要抑制通道,或者明确标注该功能仅支持绿幕。

💡 建议(1个可选)

  1. packages/domain/chroma_key_config.py 第73行 (from_dict)key_color 处理对空值和 None 的容错性不足。
    • 说明:当 datakey_color 显式为 None 或空字符串 "" 时,str(None) 变为 "None""".strip() 变为 "",这些无效值会传递给 FFmpeg 导致错误。
    • 建议:在 strip() 后增加判断:if not key_color: key_color = DEFAULT_KEY_COLOR

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


🤖 由 AI 代码审查机器人自动生成 | 2026-07-27 00:45:47 | 模型:

## 代码审查结果 - PR #1013 ### ⚠️ 问题(2个需要修改) 1. **packages/domain/chroma_key_config.py 第177行 (`normalize_color`)**:存在严重的过滤器注入风险。 - **说明**:该函数对于不符合 Hex 或 0x 格式的输入(如颜色名)直接透传,未对 `]`、`;` 等特殊字符进行过滤。如果 `key_color` 被构造为 `"red];overlay=...[out"`,生成的滤镜字符串将变成 `[in]colorkey=color=red];overlay=...[out...`,导致 FFmpeg 滤镜链结构被破坏,攻击者可借此注入任意滤镜操作(如覆盖水印、文件泄露)。 - **后果**:代码注入、安全漏洞、视频处理管道被破坏。 - **建议**:严格限制透传字符,仅允许 `[a-zA-Z]`,或禁止包含 `[` `]` `;` `=` `\` 等特殊字符的输入。 2. **packages/domain/chroma_key_config.py 第226行 (`build_colorkey_filter`)**:溢色抑制逻辑与 `key_color` 强耦合,存在逻辑错误。 - **说明**:代码中 `spill_suppress` 逻辑硬编码为降低绿色通道增益(`gg`)并提升红蓝(`rr`, `bb`)。当用户使用蓝幕(`key_color="#0000FF"`)或红幕并开启溢出抑制时,该逻辑依然降低绿色通道,导致错误的色彩补偿和严重的画面偏色。 - **后果**:非绿幕场景下开启溢色抑制会导致画面颜色异常。 - **建议**:修改逻辑根据 `key_color` 判断主要抑制通道,或者明确标注该功能仅支持绿幕。 ### 💡 建议(1个可选) 1. **packages/domain/chroma_key_config.py 第73行 (`from_dict`)**:`key_color` 处理对空值和 `None` 的容错性不足。 - **说明**:当 `data` 中 `key_color` 显式为 `None` 或空字符串 `""` 时,`str(None)` 变为 `"None"`,`"".strip()` 变为 `""`,这些无效值会传递给 FFmpeg 导致错误。 - **建议**:在 `strip()` 后增加判断:`if not key_color: key_color = DEFAULT_KEY_COLOR`。 --- ❌ 格式检查通过 | ❌ 逻辑审查需修改 | ⚠️ 建议关注性能 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-27 00:45:47 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
xiaoxia closed this pull request 2026-07-27 15:26:26 +08:00

🗑️ 预览环境已清理

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

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

🗑️ **预览环境已清理** PR #1013 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Some checks are pending
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 22s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m8s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m5s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 44s
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 / PR Build Worker Image (pull_request) Successful in 52s
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 2m59s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 2m6s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m5s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 51s
AI Code Review / AI Code Review (pull_request) Successful in 2m48s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m53s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 5m24s
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
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 / Unit Tests (pull_request) Successful in 2m42s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 2m14s
CI/CD Pipeline / Deploy Production (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 / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
ACR Cleanup / ACR Image Cleanup (pull_request_target) Has been cancelled
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 24s

Pull request closed

Sign in to join this conversation.