feat(ai-avatar): finalize 支持 cover_url/video_title + 兜底自动抽帧 #2288

Merged
xiaoxia merged 3 commits from feat/ai-avatar-finalize-cover into develop 2026-10-13 22:43:01 +08:00
Owner

背景

配合前端修复「AI数字人选封面后点完成视频没入库/封面为空」的 Bug。

改动

  1. schema: 新增 FinalizeRenderRequest,含两个可选字段:
    • cover_url: 用户选定的封面公网 URL(本地封面需前端先 OSS 直传拿公网 URL;blob:/data: URL 后端检测后忽略)
    • video_title: 成片库展示标题,覆盖默认 AI数字人_{job_id[:8]}
  2. POST /{job_id}/finalize: 接受 JSON body(老客户端空 body 完全兼容)
    • 封面三级优先级:body.cover_url > job.output_cover_url(smart-cover 已写入)> 兜底 generate_smart_cover 自动抽帧
    • 非 HTTP(S) URL 检测:blob:/data: 等无效 URL 记录 warning 并忽略,避免破图入库
    • 路由层前置校验 output_video_url 非空,错误码对齐 service
    • 兜底抽帧成功后回写 job.cover_config+job.output_cover_url
  3. service.finalize_job/_persist_to_library: 新增 video_title 形参覆盖默认成片名

前端联调

  • finalize 调用:POST /ai-avatar/render/{job_id}/finalize,body 可选 {cover_url, video_title}
  • 本地上传封面:先用 POST /upload/direct/prepare+complete 直传 OSS 拿公网 URL,再 finalize 传 cover_url
  • smart-cover 路径不变:调完 smart-cover 后端已写 cover_config,finalize 不用再传
  • 未选封面也能 finalize:后端兜底自动抽帧
  • 烧录标题 title_config 仍在 submitRender 时传,finalize 改不了已渲染视频

验证

  • pytest 17088 passed,syntax ok
  • 3 文件 +65/-8,无迁移无新依赖
## 背景 配合前端修复「AI数字人选封面后点完成视频没入库/封面为空」的 Bug。 ## 改动 1. **schema**: 新增 `FinalizeRenderRequest`,含两个可选字段: - `cover_url`: 用户选定的封面公网 URL(本地封面需前端先 OSS 直传拿公网 URL;blob:/data: URL 后端检测后忽略) - `video_title`: 成片库展示标题,覆盖默认 `AI数字人_{job_id[:8]}` 2. **POST /{job_id}/finalize**: 接受 JSON body(老客户端空 body 完全兼容) - 封面三级优先级:`body.cover_url` > `job.output_cover_url`(smart-cover 已写入)> 兜底 `generate_smart_cover` 自动抽帧 - 非 HTTP(S) URL 检测:blob:/data: 等无效 URL 记录 warning 并忽略,避免破图入库 - 路由层前置校验 `output_video_url` 非空,错误码对齐 service - 兜底抽帧成功后回写 `job.cover_config`+`job.output_cover_url` 3. **service.finalize_job/_persist_to_library**: 新增 `video_title` 形参覆盖默认成片名 ## 前端联调 - finalize 调用:`POST /ai-avatar/render/{job_id}/finalize`,body 可选 `{cover_url, video_title}` - 本地上传封面:先用 `POST /upload/direct/prepare`+`complete` 直传 OSS 拿公网 URL,再 finalize 传 cover_url - smart-cover 路径不变:调完 smart-cover 后端已写 cover_config,finalize 不用再传 - 未选封面也能 finalize:后端兜底自动抽帧 - 烧录标题 title_config 仍在 submitRender 时传,finalize 改不了已渲染视频 ## 验证 - pytest 17088 passed,syntax ok - 3 文件 +65/-8,无迁移无新依赖
xiaoxia added 1 commit 2026-10-13 20:40:55 +08:00
feat(ai-avatar): finalize 接口支持 cover_url/video_title 可选字段 + 兜底自动抽帧
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 0s
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 / 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 / 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 1m2s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 2m9s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 3m1s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m11s
AI Code Review / AI Code Review (pull_request) Successful in 7m7s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 11m23s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 13m9s
CI/CD Pipeline / Validate - Style (pull_request) Has been cancelled
CI/CD Pipeline / Validate - Security (pull_request) Has been cancelled
CI/CD Pipeline / Unit Tests (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
PR Automation / Auto Merge on CI Green + Approved (pull_request) Has been cancelled
5603c92a02
- 新增 FinalizeRenderRequest schema: cover_url / video_title 均可选
- finalize 端点接受 JSON body (Body default=空对象,老客户端空body兼容)
- 封面三级优先级: body.cover_url > job.output_cover_url(smart-cover) > 兜底 generate_smart_cover 自动抽帧
- 非HTTP(S) URL (blob:/data:) 检测后忽略,避免破图入库
- service.finalize_job / _persist_to_library 新增 video_title 参数覆盖默认 AI数字人_{id}
- 路由层提前校验 output_video_url 非空,错误码对齐 service 层

🚀 预览环境已部署

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

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

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

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

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #2288 | | 预览链接 | [https://pr-2288.preview.xiaoxiajianji.com](https://pr-2288.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
auto-approve-bot added 1 commit 2026-10-13 20:54:28 +08:00
style: auto-format with black + isort + ruff + prettier [skip ci-format-check]
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Build Staging API Image (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 / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 2s
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 / PR Build API Image (pull_request) Successful in 54s
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
PR Automation / Auto Approve on CI Green (pull_request) Successful in 2m59s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 3m0s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 5m0s
AI Code Review / AI Code Review (pull_request) Successful in 7m0s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 10m40s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 18m6s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 18m39s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 20m17s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 26m45s
CI/CD Pipeline / Validate - Security (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
28e3408a19
xiaoxia added 1 commit 2026-10-13 21:31:09 +08:00
test(ai-avatar): 补 finalize 路由 10 个单测覆盖 body/cover_url/video_title/兜底/幂等等路径
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 2s
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
PR Automation / Auto Approve on CI Green (pull_request) Successful in 2m55s
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 API Image (pull_request) Successful in 22s
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
AI Code Review / AI Code Review (pull_request) Successful in 7m37s
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
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 8m53s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 6m57s
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
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 10m44s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 26m29s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 29m52s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 37m22s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 54m0s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 1h2m29s
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 1s
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
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 39s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 4m21s
8245302aca
- 修复 blob/data: URL 被忽略后未继续 fallback 到 job.output_cover_url 的逻辑(改为按优先级循环校验每一级)
- 覆盖:404/400 状态码、空body兼容、body.cover_url优先、blob URL 忽略并fallback、兜底抽帧写回DB、幂等existing、video_title覆盖、service错误映射
- 33 个路由测试全过;全量 17098 passed
xiaoxia merged commit 5f0533e937 into develop 2026-10-13 22:43:01 +08:00

🗑️ 预览环境已清理

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

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

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