feat: 节奏模板让批量变体片段时长分布不同 (Issue #1764) #1770

Merged
xiaoxia merged 2 commits from feat/rhythm-templates-1764 into develop 2026-09-07 20:21:44 +08:00
Owner

变更内容

引入节奏模板,让批量生成时每个变体的片段时长分布不同,降低平台查重风险。

新增功能

  • 节奏模板池:预设 6 种权重序列 [1,1,1,1,1][2,1,3,1,2][1,2,1,2,1]
  • get_rhythm_template(seed):根据变体 seed 随机选择模板
  • adapt_template_length():将模板适配到实际片段数(截断/循环)
  • plan_clip_durations() 新增 rhythm_template 参数,按权重比例分配时长
  • 保底约束:每段 ≥ 2s,总时长 = 配音时长(误差 ≤ 0.5s)

改动位置

  • packages/domain/voice_duration_planner.py:核心节奏模板逻辑
  • apps/api/app/services/edit_plan_service.pyensure_batch_variant_plans 为每个变体生成不同节奏模板写入 plan config;apply_voice_duration_to_plan 从 config 读取模板传给分配函数

测试

  • 17 个新测试覆盖模板池/适配/分配/验收
  • 验收测试:批量 3 变体至少 2 组不同时长序列

验收标准

  • 节奏模板池 6 种模板
  • 不同变体用不同模板
  • 总时长 = 配音时长
  • 每段 ≥ 2s
  • 17 个测试通过
## 变更内容 引入节奏模板,让批量生成时每个变体的片段时长分布不同,降低平台查重风险。 ### 新增功能 - **节奏模板池**:预设 6 种权重序列 `[1,1,1,1,1]`、`[2,1,3,1,2]`、`[1,2,1,2,1]` 等 - **get_rhythm_template(seed)**:根据变体 seed 随机选择模板 - **adapt_template_length()**:将模板适配到实际片段数(截断/循环) - **plan_clip_durations()** 新增 `rhythm_template` 参数,按权重比例分配时长 - **保底约束**:每段 ≥ 2s,总时长 = 配音时长(误差 ≤ 0.5s) ### 改动位置 - `packages/domain/voice_duration_planner.py`:核心节奏模板逻辑 - `apps/api/app/services/edit_plan_service.py`:`ensure_batch_variant_plans` 为每个变体生成不同节奏模板写入 plan config;`apply_voice_duration_to_plan` 从 config 读取模板传给分配函数 ### 测试 - 17 个新测试覆盖模板池/适配/分配/验收 - 验收测试:批量 3 变体至少 2 组不同时长序列 ## 验收标准 - [x] 节奏模板池 6 种模板 - [x] 不同变体用不同模板 - [x] 总时长 = 配音时长 - [x] 每段 ≥ 2s - [x] 17 个测试通过
xiaoxia added 1 commit 2026-09-07 20:18:06 +08:00
feat: 节奏模板让批量变体片段时长分布不同 (Issue #1764)
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 2s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 2s
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web 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 / Retag skipped Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (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 / PR Build API Image (pull_request) Successful in 36s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 37s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 1m31s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m45s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 2m29s
CI/CD Pipeline / Validate - Style (pull_request) Has been cancelled
CI/CD Pipeline / Validate - Security (pull_request) Has been cancelled
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Has been cancelled
CI/CD Pipeline / Build Production API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (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 / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / CI Gate (pull_request) Has been cancelled
AI Code Review / AI Code Review (pull_request) Has been cancelled
PR Automation / Auto Approve on CI Green (pull_request) Has been cancelled
PR Automation / Auto Merge on CI Green + Approved (pull_request) Has been cancelled
eb089fa26d
- 新增 RHYTHM_TEMPLATES 节奏模板池(6 种权重序列)
- get_rhythm_template(seed):根据变体 seed 随机选模板
- adapt_template_length():将模板适配到实际片段数
- plan_clip_durations() 支持 rhythm_template 参数按权重分配时长
- 保底约束:每段 >= 2s,总时长 = 配音时长
- edit_plan_service: ensure_batch_variant_plans 为每个变体生成不同节奏模板
- 17 个新测试覆盖模板池/适配/分配/验收

🚀 预览环境已部署

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

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

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

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

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #1770 | | 预览链接 | [https://pr-1770.preview.xiaoxiajianji.com](https://pr-1770.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
auto-approve-bot added 1 commit 2026-09-07 20:20:54 +08:00
style: auto-format with black + isort + prettier [skip ci-format-check]
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 4s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 3s
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) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (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 / PR Build API Image (pull_request) Successful in 26s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 27s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 1m34s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m44s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 2m10s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 2m51s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m12s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 4m5s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 49s
AI Code Review / AI Code Review (pull_request) Successful in 6m41s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Failing after 12m53s
Preview Cleanup / Cleanup Preview Environment (pull_request) Failing after 13m1s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 20m23s
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 / CI Gate (pull_request) Successful in 6s
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
0d9d4e584f
xiaoxia merged commit 2a0b75c007 into develop 2026-09-07 20:21:44 +08:00
Sign in to join this conversation.