refactor(phase1): 统一渲染入口 + 模板系统双读兼容 #630

Merged
auto-approve-bot merged 4 commits from refactor/phase1-unify-render-entry into develop 2026-07-20 12:39:43 +08:00
Owner

Phase 1 - 渲染链路统一

剪辑计划架构整合 Phase 1:后端内部统一,不碰前端API。

改动内容

1. RenderAdapter 新增 render_from_memory 内存模式入口

  • 接受内存中的 plan/clips/asset_path_map,不读DB
  • 复用统一的 BGM 准备、ASR 初始化、分辨率解析、渲染执行、缩略图生成、OSS上传逻辑
  • 抽出 _do_render 内部方法,render_plan 和 render_from_memory 共用同一套核心渲染流程

2. generation.py 渲染入口迁移

  • _render_video 改为调用 RenderAdapter.render_from_memory
  • 消除重复的 BGM 准备、ASR 初始化、分辨率配置、渲染调用代码
  • 保留素材库配音混音(后处理混音,属于生成调度层逻辑)
  • 默认分辨率通过 plan.config.export.resolution 传递,保持 1280x720 不变

3. 模板系统双读兼容

  • _validate_template_exists:优先读 EditTemplate(新系统),fallback 到 TemplateModel(旧系统)
  • _load_template_plan_config:优先从 EditTemplate.config + TemplateClipConfig 读取,fallback 到旧系统独立字段
  • 新系统路径自动提取 intro_outro 配置和 editing_mode

4. 测试

  • 新增 7 个 render_from_memory 单元测试
  • RenderAdapter 测试从 38 → 45 个
  • 全量单测 152 个全过(render_adapter + unified_render_service)

影响范围

  • 纯后端内部重构,API 接口不变
  • 一键生成路径渲染行为不变(默认分辨率、BGM逻辑都兼容)
  • 剪辑计划渲染路径逻辑不变(_do_render 是从原 render_plan 抽出来的)
## Phase 1 - 渲染链路统一 剪辑计划架构整合 Phase 1:后端内部统一,不碰前端API。 ### 改动内容 **1. RenderAdapter 新增 render_from_memory 内存模式入口** - 接受内存中的 plan/clips/asset_path_map,不读DB - 复用统一的 BGM 准备、ASR 初始化、分辨率解析、渲染执行、缩略图生成、OSS上传逻辑 - 抽出 _do_render 内部方法,render_plan 和 render_from_memory 共用同一套核心渲染流程 **2. generation.py 渲染入口迁移** - _render_video 改为调用 RenderAdapter.render_from_memory - 消除重复的 BGM 准备、ASR 初始化、分辨率配置、渲染调用代码 - 保留素材库配音混音(后处理混音,属于生成调度层逻辑) - 默认分辨率通过 plan.config.export.resolution 传递,保持 1280x720 不变 **3. 模板系统双读兼容** - _validate_template_exists:优先读 EditTemplate(新系统),fallback 到 TemplateModel(旧系统) - _load_template_plan_config:优先从 EditTemplate.config + TemplateClipConfig 读取,fallback 到旧系统独立字段 - 新系统路径自动提取 intro_outro 配置和 editing_mode **4. 测试** - 新增 7 个 render_from_memory 单元测试 - RenderAdapter 测试从 38 → 45 个 - 全量单测 152 个全过(render_adapter + unified_render_service) ### 影响范围 - 纯后端内部重构,API 接口不变 - 一键生成路径渲染行为不变(默认分辨率、BGM逻辑都兼容) - 剪辑计划渲染路径逻辑不变(_do_render 是从原 render_plan 抽出来的)
xiaoxia added 1 commit 2026-07-20 11:59:22 +08:00
refactor(phase1): 统一渲染入口 + 模板系统双读兼容
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 / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (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
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 15s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m11s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 59s
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Failing after 2m9s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 2m31s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 2m42s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 2m45s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m34s
AI Code Review / AI Code Review (pull_request) Successful in 7m12s
f9046da92e
Phase 1 - 渲染链路统一:
1. RenderAdapter 新增 render_from_memory 内存模式入口,
   一键生成路径复用统一的 BGM/ASR/分辨率/渲染/缩略图逻辑
2. 抽出 _do_render 内部方法,render_plan 和 render_from_memory 共用
3. generation.py _render_video 改为调用 RenderAdapter.render_from_memory,
   消除重复的渲染准备代码
4. 模板系统双读兼容:优先读 EditTemplate(新系统),
   找不到 fallback 到 TemplateModel(旧系统)
5. 新增 7 个 render_from_memory 单元测试

不改变任何外部API,纯后端内部重构。

🚀 预览环境已部署

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

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

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

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

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #630 | | 预览链接 | [https://pr-630.preview.xiaoxiajianji.com](https://pr-630.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
xiaoxia added 1 commit 2026-07-20 12:14:00 +08:00
style: fix ruff + black formatting issues
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 / Check if frontend-only change (pull_request) Successful in 4s
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 16s
AI Code Review / AI Code Review (pull_request) Failing after 31s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Unit Tests (pull_request) Successful in 1m8s
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Failing after 2m12s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 3m20s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 4m36s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 4m49s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 2m17s
d5cda56505
xiaoxia force-pushed refactor/phase1-unify-render-entry from c9b21a627a to d5cda56505 2026-07-20 12:14:00 +08:00 Compare
xiaoxia added 1 commit 2026-07-20 12:21:25 +08:00
style: fix ruff unused imports
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 Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (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 17s
AI Code Review / AI Code Review (pull_request) Failing after 30s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 17s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Unit Tests (pull_request) Successful in 1m17s
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Failing after 2m6s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 5m36s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 3m15s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 5m53s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m54s
332e05a397
xiaoxia added 1 commit 2026-07-20 12:33:58 +08:00
style: fix isort import ordering after removing unused imports
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 / 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 / Build Production Web Image (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
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 19s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m9s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 55s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 2m27s
AI Code Review / AI Code Review (pull_request) Successful in 2m51s
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Successful in 2m46s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m9s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m34s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 5m45s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 6s
0faa9b8960
Collaborator

代码审查结果 - PR #630

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

💡 建议(3个可选)

  1. apps/worker/video_processing/render_adapter.py 第620行:建议将 import shutil 移至文件顶部。虽然在 finally 块中导入语法上可行,但这不符合 Python 的常规代码风格(PEP 8),且可能导致 IDE 静态分析失效。
  2. apps/worker/video_processing/render_adapter.py 第540行:建议在创建临时目录(tempfile.mkdtemp)之前进行参数校验(if not clipsif not asset_path_map)。目前的逻辑是先创建目录,校验失败后在 finally 块中删除,这会产生不必要的文件系统操作。
  3. apps/worker/worker_app/tasks/generation.py 第1020行:建议将硬编码的 limit=200 提取为常量或配置项。虽然目前模板片段数超过 200 的概率较低,但硬编码限制缺乏灵活性,且容易在边界情况(如 201 个片段)下导致数据截断或逻辑错误。

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


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

## 代码审查结果 - PR #630 ### ⚠️ 问题(0个需要修改) ### 💡 建议(3个可选) 1. **apps/worker/video_processing/render_adapter.py 第620行**:建议将 `import shutil` 移至文件顶部。虽然在 `finally` 块中导入语法上可行,但这不符合 Python 的常规代码风格(PEP 8),且可能导致 IDE 静态分析失效。 2. **apps/worker/video_processing/render_adapter.py 第540行**:建议在创建临时目录(`tempfile.mkdtemp`)之前进行参数校验(`if not clips` 和 `if not asset_path_map`)。目前的逻辑是先创建目录,校验失败后在 `finally` 块中删除,这会产生不必要的文件系统操作。 3. **apps/worker/worker_app/tasks/generation.py 第1020行**:建议将硬编码的 `limit=200` 提取为常量或配置项。虽然目前模板片段数超过 200 的概率较低,但硬编码限制缺乏灵活性,且容易在边界情况(如 201 个片段)下导致数据截断或逻辑错误。 --- ✅ 格式检查通过 | ✅ 逻辑审查需修改 | ✅ 建议关注性能 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-20 12:36:49 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
auto-approve-bot approved these changes 2026-07-20 12:37:08 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

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

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot merged commit e5fffe40c1 into develop 2026-07-20 12:39:43 +08:00
auto-approve-bot deleted branch refactor/phase1-unify-render-entry 2026-07-20 12:39:43 +08:00

🗑️ 预览环境已清理

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

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

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