fix: 片段去重从已有片段构建used_segments,实现跨任务去重 #1522

Merged
xiaoxia merged 1 commits from fix/cross-task-segment-dedup into develop 2026-08-27 15:25:05 +08:00
Owner

问题

create_clips_from_assets_editorused_segments 每次调用初始化为空字典,只跟踪当前API调用内创建的时间段,不避开之前任务已使用的时间段。

影响:用户多次为同一 plan 添加素材片段时,新片段可能与已有片段使用同一段素材区域,导致视频内容重复。

修复

apps/api/app/api/routes/templates_editor/clips.py 第 389 行附近:

初始化 used_segments 后,遍历 existing_clips_list(已通过 list_clips 获取),将已有片段的 asset_id/start_time/duration 填充到 used_segments,使 _calc_random_start_time 能避开所有已使用的时间区间。

改动量:+7 行代码

测试

新增 TestCrossTaskSegmentDedup(4个用例):

  • 已有片段的时间段被正确纳入去重
  • 多个已有片段都被收集
  • 没有 asset_id 的片段被忽略
  • 没有已有片段时行为不变

全部 15 个相关测试通过。

## 问题 `create_clips_from_assets_editor` 中 `used_segments` 每次调用初始化为空字典,只跟踪当前API调用内创建的时间段,不避开之前任务已使用的时间段。 **影响**:用户多次为同一 plan 添加素材片段时,新片段可能与已有片段使用同一段素材区域,导致视频内容重复。 ## 修复 在 `apps/api/app/api/routes/templates_editor/clips.py` 第 389 行附近: 初始化 `used_segments` 后,遍历 `existing_clips_list`(已通过 `list_clips` 获取),将已有片段的 `asset_id`/`start_time`/`duration` 填充到 `used_segments`,使 `_calc_random_start_time` 能避开所有已使用的时间区间。 **改动量**:+7 行代码 ## 测试 新增 `TestCrossTaskSegmentDedup`(4个用例): - ✅ 已有片段的时间段被正确纳入去重 - ✅ 多个已有片段都被收集 - ✅ 没有 asset_id 的片段被忽略 - ✅ 没有已有片段时行为不变 全部 15 个相关测试通过。
xiaoxia added 1 commit 2026-08-27 14:58:23 +08:00
fix: 片段去重从已有片段构建used_segments,实现跨任务去重
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 1m4s
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 / Validate - Type Check (mypy) (pull_request) Successful in 2m44s
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 3m1s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 2m28s
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 2m46s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 1m32s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 1m42s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 4m58s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 8m41s
AI Code Review / AI Code Review (pull_request) Successful in 7m37s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 5m40s
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 / 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 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
CI/CD Pipeline / Integration Tests (pull_request) Successful in 6m54s
CI/CD Pipeline / CI Gate (pull_request) Successful in 28s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 2m32s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 3m18s
9d646e3de7
问题:create_clips_from_assets_editor 中 used_segments 每次调用初始化为空字典,
只跟踪当前API调用内创建的时间段,不避开之前任务已使用的时间段。

修复:在初始化 used_segments 后,遍历 existing_clips_list(已通过 list_clips 获取),
将已有片段的 asset_id/start_time/duration 填充到 used_segments,
使 _calc_random_start_time 能避开所有已使用的时间区间。

新增测试:TestCrossTaskSegmentDedup(4个用例),验证:
- 已有片段的时间段被正确纳入去重
- 多个已有片段都被收集
- 没有 asset_id 的片段被忽略
- 没有已有片段时行为不变

🚀 预览环境已部署

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

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

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

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

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

CI全绿,自动审批通过。

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

CI全绿,自动审批通过。

CI全绿,自动审批通过。
xiaoxia merged commit 29c0d76677 into develop 2026-08-27 15:25:05 +08:00

🗑️ 预览环境已清理

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

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

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