saas-backend-agent
c4068c1d3f
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 1s
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (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 / PR Build Web Image (pull_request) Has been skipped
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 / Retag skipped Staging 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 Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (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 / Validate - Style (pull_request) Successful in 4m57s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 5m3s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 5m52s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 5m52s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 5m55s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 6m10s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 6m15s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 6m15s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 7m16s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 8m20s
CI/CD Pipeline / Build Production API Image (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 / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / CI Gate (pull_request) Successful in 3s
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
AI Code Review / AI Code Review (pull_request) Successful in 10m20s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 4m10s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 4m22s
feat: SceneChange 场景检测前置到渲染前,场景点缓存到素材 metadata
现状问题:
- 场景检测是接口返回后的后台任务,视频已用随机 start_time 渲染完,
SceneChange 更新 DB 对当前成片查重率无作用
- 首次生成的素材没有缓存,渲染前仍走随机起点(后台任务异步补缓存)
- 镜头段固定顺序分配(第N个clip固定用第N段),同样素材组合起始帧仍相同
改动:
1. 场景点持久化到素材 metadata(scene_change_points: list[float])
- 后台 _update_mediakit_recommendations_async:检测前查缓存命中跳过,
detect_scene_changes 成功后写入 asset.metadata 并 repo.update
2. 渲染前同步读缓存选镜头段(clips.py from-assets 主流程)
- 素材加载时 extract_scene_points_from_metadata 读缓存
- 有缓存:build_scene_segments → shuffle 随机镜头段顺序 →
pick_scene_aware_start 段内取点 + 越界检查 + used_segments 冲突避让
(含 1.5s 边缘间隙)
- 无缓存/全冲突:回退 _calc_random_start_time(受控复用逻辑不变)
3. 一键生成路径同步改造(plan_generator_service + plan_generator_utils)
- distribute_assets 新增 asset_scene_points 参数,7 个分配点统一
走 _resolve_start_time(场景优先、随机兜底)
- _fetch_asset_scene_points 读 metadata;预览随机模式不读 DB
4. 镜头段工具下沉 domain 层:build_scene_segments /
pick_start_in_scene_segment / pick_scene_aware_start /
extract_scene_points_from_metadata,clips.py 保留旧名兼容别名
- 镜头段必须 shuffle 后遍历,不按固定顺序分配
测试:新增 19 个测试覆盖缓存解析(合法/脏数据/自动补0)、
段内取点/冲突避让/shuffle 覆盖多段、两条路径集成、后台写缓存。
全量 14032 单测通过。
2026-09-02 08:24:56 +08:00
..
2026-08-29 17:54:15 +08:00
2026-08-07 19:50:01 +08:00
2026-08-24 14:16:00 +08:00
2026-08-07 22:42:20 +08:00
2026-08-08 11:14:45 +08:00
2026-08-24 14:16:00 +08:00
2026-06-23 14:34:01 +08:00
2026-07-24 08:47:07 +00:00
2026-07-27 07:23:03 +08:00
2026-07-23 17:57:33 +08:00
2026-08-11 22:02:08 +08:00
2026-07-24 19:04:19 +08:00
2026-07-26 22:04:30 +08:00
2026-07-25 00:16:10 +00:00
2026-07-14 09:50:57 +08:00
2026-09-01 01:25:25 +08:00
2026-09-01 20:00:12 +08:00
2026-07-14 09:49:35 +08:00
2026-07-14 09:49:35 +08:00
2026-08-20 21:41:01 +08:00
2026-07-13 16:14:46 +08:00
2026-07-24 10:24:53 +08:00
2026-07-14 07:07:51 +08:00
2026-07-23 23:01:01 +08:00
2026-07-18 15:05:08 +08:00
2026-07-27 07:23:54 +08:00
2026-07-17 18:28:54 +08:00
2026-06-27 22:52:09 +08:00
2026-09-01 17:40:34 +08:00
2026-08-29 17:54:15 +08:00
2026-07-12 11:49:41 +08:00
2026-07-13 16:14:46 +08:00
2026-07-27 00:25:32 +08:00
2026-07-27 00:25:32 +08:00
2026-07-24 16:44:35 +08:00
2026-07-15 00:12:04 +08:00
2026-07-24 08:47:07 +00:00
2026-08-09 15:10:25 +08:00
2026-07-26 23:21:17 +00:00
2026-07-13 17:45:37 +08:00
2026-07-23 00:25:25 +08:00
2026-07-23 09:56:48 +08:00
2026-07-22 22:41:24 +08:00
2026-07-22 22:42:05 +08:00
2026-07-23 21:52:01 +08:00
2026-07-13 16:14:46 +08:00
2026-07-18 14:45:53 +08:00
2026-08-23 16:03:30 +08:00
2026-08-17 21:08:52 +08:00
2026-08-29 23:21:59 +00:00
2026-07-23 23:01:01 +08:00
2026-07-30 00:26:00 +08:00
2026-07-25 00:16:10 +00:00
2026-07-26 00:13:44 +08:00
2026-07-26 13:14:47 +08:00
2026-07-30 08:20:36 +08:00
2026-07-14 10:52:01 +08:00
2026-07-27 10:09:14 +08:00
2026-07-25 00:16:10 +00:00
2026-07-13 16:14:46 +08:00
2026-07-26 13:14:47 +08:00
2026-07-24 16:44:35 +08:00
2026-07-12 09:14:55 +08:00
2026-07-24 18:58:17 +08:00
2026-07-27 07:23:54 +08:00
2026-08-17 18:18:48 +08:00
2026-08-30 02:33:19 +08:00
2026-07-27 15:28:17 +08:00
2026-07-25 00:16:10 +00:00
2026-07-30 00:25:42 +08:00
2026-07-25 00:16:10 +00:00
2026-07-24 08:47:07 +00:00
2026-07-14 07:07:51 +08:00
2026-08-14 22:16:00 +08:00
2026-07-22 15:20:53 +08:00
2026-07-24 13:35:05 +00:00
2026-08-24 14:16:00 +08:00
2026-07-22 22:42:10 +08:00
2026-07-19 07:28:56 +08:00
2026-08-16 19:25:23 +08:00
2026-08-16 07:20:15 +00:00
2026-08-10 10:40:11 +08:00
2026-08-24 23:31:00 +08:00
2026-08-31 00:36:06 +08:00
2026-09-01 05:13:39 +00:00
2026-07-26 12:58:22 +08:00
2026-07-25 11:31:28 +08:00
2026-07-26 22:04:19 +08:00
2026-07-25 22:33:25 +08:00
2026-07-25 17:38:17 +08:00
2026-07-26 22:04:29 +08:00
2026-09-01 05:25:08 +00:00
2026-07-26 18:17:04 +08:00
2026-07-24 11:25:49 +08:00
2026-07-24 10:59:46 +00:00
2026-09-01 20:00:12 +08:00
2026-07-21 18:50:37 +08:00
2026-07-24 10:59:46 +00:00
2026-07-21 19:00:12 +08:00
2026-08-07 20:46:00 +08:00
2026-07-24 18:58:21 +08:00
2026-07-25 22:33:25 +08:00
2026-07-20 23:48:36 +08:00
2026-07-24 18:58:21 +08:00
2026-07-26 15:38:17 +08:00
2026-07-25 22:33:25 +08:00
2026-09-02 01:40:34 +08:00
2026-07-25 17:38:17 +08:00
2026-07-23 23:54:56 +08:00
2026-08-24 16:06:00 +08:00
2026-07-24 13:35:05 +00:00
2026-07-27 13:33:18 +00:00
2026-07-25 16:17:09 +00:00
2026-07-22 15:53:51 +08:00
2026-07-20 09:43:49 +08:00
2026-07-24 14:07:12 +00:00
2026-07-24 08:47:07 +00:00
2026-07-25 00:16:10 +00:00
2026-07-13 12:14:02 +08:00
2026-07-24 08:47:07 +00:00
2026-07-21 18:50:37 +08:00
2026-07-25 17:38:17 +08:00
2026-07-13 16:14:46 +08:00
2026-08-26 10:42:39 +00:00
2026-07-25 22:33:26 +08:00
2026-06-27 22:52:09 +08:00
2026-07-25 03:33:12 +00:00
2026-07-24 18:58:17 +08:00
2026-07-24 11:25:49 +08:00
2026-06-27 22:52:09 +08:00
2026-08-29 04:25:30 +00:00
2026-07-20 09:43:49 +08:00
2026-07-26 10:47:55 +00:00
2026-06-27 22:52:09 +08:00
2026-07-14 11:02:57 +08:00
2026-08-30 02:33:19 +08:00
2026-08-20 21:41:01 +08:00
2026-07-18 19:58:08 +08:00
2026-08-23 12:55:39 +08:00
2026-07-25 10:04:00 +08:00
2026-07-26 12:58:22 +08:00
2026-07-26 12:58:22 +08:00
2026-07-24 08:47:07 +00:00
2026-08-31 23:44:35 +00:00
2026-08-22 21:51:01 +08:00
2026-08-31 16:56:52 +08:00
2026-07-24 14:07:12 +00:00
2026-07-24 14:07:12 +00:00
2026-07-24 14:07:12 +00:00
2026-07-24 22:03:50 +08:00
2026-07-24 22:03:50 +08:00
2026-08-31 11:11:43 +08:00
2026-08-30 21:56:02 +08:00
2026-08-30 03:38:42 +00:00
2026-07-24 16:44:35 +08:00
2026-07-19 17:40:44 +08:00
2026-07-30 00:26:11 +08:00
2026-07-30 11:50:48 +08:00
2026-07-30 11:50:48 +08:00
2026-07-13 11:07:10 +08:00
2026-07-27 07:18:00 +08:00
2026-07-25 00:16:10 +00:00
2026-07-26 22:04:19 +08:00
2026-07-13 16:14:46 +08:00
2026-07-24 08:47:07 +00:00
2026-07-27 13:33:18 +00:00
2026-07-22 23:57:27 +08:00
2026-07-25 17:38:17 +08:00
2026-07-30 07:34:57 +08:00
2026-07-30 08:19:40 +08:00
2026-07-26 22:04:19 +08:00
2026-09-01 20:00:12 +08:00
2026-08-14 22:16:00 +08:00
2026-08-03 13:51:27 +08:00
2026-09-02 01:40:34 +08:00
2026-08-03 09:43:34 +08:00
2026-07-21 23:33:01 +08:00
2026-07-24 16:00:04 +00:00
2026-07-24 16:00:04 +00:00
2026-07-26 00:25:22 +08:00
2026-07-30 00:26:00 +08:00
2026-07-25 00:16:10 +00:00
2026-07-29 12:12:37 +08:00
2026-07-27 10:09:14 +08:00
2026-07-25 00:16:10 +00:00
2026-08-24 14:16:00 +08:00
2026-08-24 01:16:00 +08:00
2026-07-23 23:55:01 +08:00
2026-07-17 20:46:29 +08:00
2026-07-25 00:16:10 +00:00
2026-07-17 15:37:41 +08:00
2026-08-16 07:01:41 +00:00
2026-07-23 15:57:09 +00:00
2026-07-13 16:14:46 +08:00
2026-07-17 15:37:41 +08:00
2026-07-30 00:26:00 +08:00
2026-07-30 01:13:58 +08:00
2026-07-24 16:44:35 +08:00
2026-07-27 18:30:13 +08:00
2026-07-30 07:45:04 +08:00
2026-07-30 00:26:05 +08:00
2026-07-09 11:53:39 +08:00
2026-07-13 16:14:46 +08:00
2026-07-15 13:20:55 +08:00
2026-07-27 15:28:17 +08:00
2026-07-30 00:25:42 +08:00
2026-07-25 00:16:10 +00:00
2026-08-26 17:22:08 +08:00
2026-09-01 20:37:25 +08:00
2026-07-15 13:20:58 +08:00
2026-07-21 18:50:37 +08:00
2026-07-27 07:23:54 +08:00
2026-08-02 22:14:12 +08:00
2026-08-02 08:55:14 +08:00
2026-08-02 08:55:14 +08:00
2026-08-29 18:38:42 +00:00
2026-08-09 11:21:08 +08:00
2026-06-24 19:54:36 +08:00
2026-07-23 23:01:01 +08:00
2026-07-24 11:25:49 +08:00
2026-08-07 15:16:44 +08:00
2026-08-07 15:16:44 +08:00
2026-08-24 16:51:04 +08:00
2026-07-25 22:33:25 +08:00
2026-07-24 08:47:07 +00:00
2026-07-24 08:47:07 +00:00
2026-07-24 08:47:07 +00:00
2026-06-24 10:44:33 +08:00
2026-07-25 00:16:10 +00:00
2026-08-16 15:16:18 +08:00
2026-08-26 00:21:00 +08:00
2026-07-25 12:56:26 +08:00
2026-07-27 00:25:32 +08:00
2026-08-27 01:44:19 +08:00
2026-08-27 01:44:19 +08:00
2026-08-23 16:03:30 +08:00
2026-07-26 08:29:38 +00:00
2026-07-24 14:07:12 +00:00
2026-09-02 08:24:56 +08:00
2026-09-01 13:32:22 +00:00
2026-07-24 16:44:39 +08:00
2026-07-23 23:54:56 +08:00
2026-08-14 22:16:00 +08:00
2026-07-27 13:33:18 +00:00
2026-08-31 16:57:05 +00:00
2026-09-02 01:40:34 +08:00
2026-08-31 13:35:05 +08:00
2026-07-25 08:12:53 +08:00
2026-07-27 13:33:18 +00:00
2026-07-26 08:29:38 +00:00
2026-07-25 00:16:10 +00:00
2026-07-27 15:28:17 +08:00
2026-07-30 00:25:30 +08:00
2026-07-25 12:56:26 +08:00
2026-07-22 15:53:51 +08:00
2026-07-13 16:14:46 +08:00
2026-07-25 17:34:20 +00:00
2026-07-25 14:16:40 +00:00
2026-07-27 07:23:54 +08:00
2026-07-26 16:28:12 +00:00
2026-07-14 09:50:57 +08:00
2026-07-24 10:59:46 +00:00
2026-07-07 11:58:27 +08:00
2026-07-25 22:33:25 +08:00
2026-07-24 18:58:14 +08:00
2026-06-27 22:52:09 +08:00
2026-07-24 14:07:12 +00:00
2026-07-11 19:50:30 +08:00
2026-07-15 11:51:45 +08:00
2026-08-24 21:21:00 +08:00
2026-07-27 13:33:18 +00:00
2026-07-21 18:50:37 +08:00
2026-07-30 09:59:59 +08:00
2026-07-28 12:23:52 +08:00
2026-07-25 22:33:25 +08:00
2026-07-09 21:21:23 +08:00
2026-07-30 08:45:15 +08:00
2026-07-25 22:33:25 +08:00
2026-08-24 12:26:01 +08:00
2026-07-24 14:07:12 +00:00
2026-07-25 00:16:10 +00:00
2026-07-30 08:20:02 +08:00
2026-08-24 14:16:00 +08:00
2026-08-26 17:22:08 +08:00
2026-07-25 22:33:25 +08:00
2026-07-30 08:45:19 +08:00
2026-08-23 14:57:05 +08:00
2026-08-27 01:44:19 +08:00
2026-07-27 00:25:32 +08:00
2026-07-28 12:24:00 +08:00
2026-07-25 00:16:10 +00:00
2026-07-21 18:50:37 +08:00
2026-07-29 02:18:43 +00:00
2026-07-28 12:23:46 +08:00
2026-07-25 00:16:10 +00:00
2026-07-03 18:56:16 +08:00
2026-07-23 10:04:18 +08:00
2026-07-26 00:13:44 +08:00
2026-07-28 12:25:56 +08:00
2026-07-27 13:33:18 +00:00
2026-07-25 14:18:22 +08:00
2026-07-25 12:56:26 +08:00
2026-07-25 11:32:35 +08:00
2026-07-24 13:35:05 +00:00
2026-07-24 08:47:07 +00:00
2026-07-28 10:42:11 +08:00
2026-07-14 18:15:21 +08:00
2026-08-25 16:26:16 +08:00
2026-08-30 18:46:06 +08:00
2026-07-13 16:14:46 +08:00
2026-07-15 13:20:58 +08:00
2026-07-24 16:00:04 +00:00
2026-07-26 16:28:12 +00:00
2026-07-24 16:44:40 +08:00
2026-07-13 16:14:46 +08:00
2026-08-30 18:46:06 +08:00
2026-07-14 10:21:49 +08:00
2026-07-24 08:47:07 +00:00
2026-07-25 00:16:10 +00:00
2026-08-24 01:16:00 +08:00
2026-08-31 13:26:58 +00:00
2026-07-13 16:14:46 +08:00
2026-07-27 20:20:53 +08:00
2026-07-25 11:32:38 +08:00
2026-07-13 16:14:46 +08:00
2026-07-22 16:28:39 +08:00
2026-07-25 22:33:26 +08:00
2026-07-30 07:40:32 +08:00
2026-07-24 10:59:46 +00:00
2026-07-14 09:49:11 +08:00
2026-07-18 15:07:58 +08:00
2026-07-28 12:25:54 +08:00
2026-07-27 07:23:54 +08:00
2026-07-27 07:23:54 +08:00
2026-07-25 22:33:26 +08:00
2026-07-30 08:44:53 +08:00
2026-07-26 07:42:26 +00:00
2026-07-19 14:32:25 +08:00
2026-08-02 15:34:22 +08:00
2026-07-03 18:56:16 +08:00
2026-08-30 18:46:06 +08:00
2026-07-30 16:47:50 +08:00
2026-07-24 13:35:05 +00:00
2026-07-28 12:23:48 +08:00
2026-07-08 01:11:54 +08:00
2026-07-24 08:47:07 +00:00
2026-07-23 06:39:11 +08:00
2026-07-26 07:42:26 +00:00
2026-07-26 00:25:22 +08:00
2026-07-13 16:14:46 +08:00
2026-07-21 18:50:37 +08:00
2026-07-28 12:24:10 +08:00
2026-07-30 14:46:12 +08:00
2026-07-27 08:44:53 +08:00
2026-07-25 00:16:10 +00:00
2026-07-22 22:42:15 +08:00
2026-07-25 13:59:08 +00:00
2026-08-29 17:54:15 +08:00
2026-08-07 18:00:12 +08:00
2026-07-21 17:51:48 +08:00
2026-07-24 08:47:07 +00:00
2026-07-24 16:44:35 +08:00
2026-08-24 14:16:00 +08:00
2026-08-24 12:26:01 +08:00
2026-08-29 12:00:52 +08:00
2026-07-24 21:29:40 +08:00
2026-08-23 05:39:27 +00:00
2026-07-27 11:04:17 +08:00