fix(ai-avatar): 智能封面抽帧超时修复 + 封面流程改造(选封面后点完成才入库) #1877

Merged
xiaoxia merged 2 commits from fix/ai-avatar-cover-flow-0913 into develop 2026-09-13 19:32:44 +08:00
Owner

改动

Bug修复:智能封面抽帧超时

  • ai_avatar_cover_service.py:MediaKit 抽帧轮询从 1s×15次=15s 调整为 2s×30次=60s,与 mediakit_client 默认值/lipsync 轮询保持一致。合成视频叠加B-roll+标题PNG后文件较大,15s经常超时导致"智能抽帧失败"。

流程改造:视频生成后先选封面,点完成才入库

后端:

  • execute_render 完成后不再自动调用 _persist_to_library 保存到成片库,停留在 completed 待选封面状态
  • _persist_to_library(job, cover_url=None) 支持传入封面URL覆盖参数
  • 新增 finalize_job(job_id, user_id, cover_url?) 方法:校验状态→幂等检查(通过 generation_task_id=render_job_id 判重)→回写封面→入库成片库
  • 新增路由 POST /api/v1/ai-avatar/render/{job_id}/finalize
  • 新增 schema FinalizeRenderResponse
  • smart-cover / custom-cover 接口逻辑不变,仍写入 job.output_cover_url,finalize 时自动带上

前端:

  • 新增 finalizeRenderJob API
  • PanelCoverAndGenerate 拆分为 setup(配置阶段)/ select-cover(弹窗选封面)两个variant
  • 新增封面选择弹窗 ModalCoverSelect
  • render 完成后不再自动跳转到 /app/products,改为主页面显示封面预览卡片 + 「选择封面」「完成」两个按钮
  • 点「选择封面」弹出弹窗(智能抽帧/自定义上传/预览/确定)
  • 选完封面后主页面显示缩略图
  • 点「完成」调 finalize 接口,成功后跳转到成品库
  • 新渲染开始自动重置封面状态

测试

  • 后端83个单测全部通过(含新增finalize 3个测试用例)
  • 无DB migration
  • lipsync/B-roll/标题/TTS预生成等其他流程未动
## 改动 ### Bug修复:智能封面抽帧超时 - `ai_avatar_cover_service.py`:MediaKit 抽帧轮询从 1s×15次=15s 调整为 2s×30次=60s,与 mediakit_client 默认值/lipsync 轮询保持一致。合成视频叠加B-roll+标题PNG后文件较大,15s经常超时导致"智能抽帧失败"。 ### 流程改造:视频生成后先选封面,点完成才入库 **后端:** - `execute_render` 完成后不再自动调用 `_persist_to_library` 保存到成片库,停留在 `completed` 待选封面状态 - `_persist_to_library(job, cover_url=None)` 支持传入封面URL覆盖参数 - 新增 `finalize_job(job_id, user_id, cover_url?)` 方法:校验状态→幂等检查(通过 `generation_task_id=render_job_id` 判重)→回写封面→入库成片库 - 新增路由 `POST /api/v1/ai-avatar/render/{job_id}/finalize` - 新增 schema `FinalizeRenderResponse` - smart-cover / custom-cover 接口逻辑不变,仍写入 `job.output_cover_url`,finalize 时自动带上 **前端:** - 新增 `finalizeRenderJob` API - `PanelCoverAndGenerate` 拆分为 setup(配置阶段)/ select-cover(弹窗选封面)两个variant - 新增封面选择弹窗 `ModalCoverSelect` - render 完成后不再自动跳转到 `/app/products`,改为主页面显示封面预览卡片 + 「选择封面」「完成」两个按钮 - 点「选择封面」弹出弹窗(智能抽帧/自定义上传/预览/确定) - 选完封面后主页面显示缩略图 - 点「完成」调 finalize 接口,成功后跳转到成品库 - 新渲染开始自动重置封面状态 ### 测试 - 后端83个单测全部通过(含新增finalize 3个测试用例) - 无DB migration - lipsync/B-roll/标题/TTS预生成等其他流程未动
xiaoxia added 1 commit 2026-09-13 19:11:50 +08:00
fix(ai-avatar): 抽帧超时延长至60s + 封面选完才入库流程
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) Failing after 1m25s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m29s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 2m11s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 2m41s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 2m49s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 3m9s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m9s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 4m0s
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 / Integration 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
AI Code Review / AI Code Review (pull_request) Has been cancelled
PR Automation / Auto Merge on CI Green + Approved (pull_request) Has been cancelled
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 68h11m50s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 68h11m27s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 68h11m27s
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Failing after 68h11m20s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 68h11m26s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Failing after 68h11m3s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 68h11m9s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 68h11m15s
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Failing after 68h11m21s
CI/CD Pipeline / Check push changed paths (pull_request) Failing after 68h11m34s
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Failing after 68h46m39s
60d19704bb
- ai_avatar_cover_service: COVER_POLL_INTERVAL=2s × COVER_MAX_POLL_ATTEMPTS=30 (最长 60s),适配合成视频(叠加B-roll/标题)较大的下载+抽帧耗时
- ai_avatar_render_service: execute_render 完成后停留在 completed 状态不再自动入库成片库;新增 _persist_to_library(cover_url 可选覆盖) 与 finalize_job(job_id, user_id, cover_url?) 方法,供用户点「完成」时显式入库,幂等(通过 generation_task_id=render_job_id 判重)
- 路由: 新增 POST /{job_id}/finalize 接口,含 404/400/幂等/异常分支
- Schema: 新增 FinalizeRenderResponse
- 前端:
  - aiAvatar.ts 新增 finalizeRenderJob API
  - PanelCoverAndGenerate 拆分 variant=setup(主页面配置+生成按钮,不含封面区) 与 select-cover(弹窗内封面选择);新增 onClose/onCoverSelected props,智能/上传成功后回调通知父组件
  - 新建 ModalCoverSelect 弹窗组件
  - AiAvatarPage: render 完成后不再自动跳转/generated,而是停留在主页面显示封面预览+「🎬选择封面」「✅完成」按钮;弹窗内选封面、点「完成」才调 finalize 入库并跳转到成片库
- 单元测试: 更新原有 execute_render 自动入库测试为不入库断言,新增 finalize_job 入库/幂等/状态校验 3 个测试

🚀 预览环境已部署

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

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

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

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

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #1877 | | 预览链接 | [https://pr-1877.preview.xiaoxiajianji.com](https://pr-1877.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
auto-approve-bot added 1 commit 2026-09-13 19:16:41 +08:00
style: auto-format with black + isort + ruff + prettier [skip ci-format-check]
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 3s
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 4s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 51s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 51s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 51s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 1m39s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m53s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 1m50s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 2m1s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 2m11s
CI/CD Pipeline / Validate - Style (pull_request) Failing after 2m14s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m13s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 5m2s
AI Code Review / AI Code Review (pull_request) Successful in 6m21s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 8m51s
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / CI Gate (pull_request) Failing after 4s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 5m47s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 7s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 36s
CI/CD Pipeline / Build Production Worker Image (pull_request) Failing after 67h58m7s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Failing after 68h5m29s
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Failing after 68h5m41s
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Failing after 68h5m17s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 68h5m43s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 68h5m44s
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 68h5m45s
CI/CD Pipeline / Build Production Web Image (pull_request) Failing after 67h57m43s
CI/CD Pipeline / Deploy Production (pull_request) Failing after 67h57m40s
CI/CD Pipeline / Build Production API Image (pull_request) Failing after 67h57m44s
CI/CD Pipeline / Canary Release to Production (pull_request) Failing after 67h57m40s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 68h5m5s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 68h5m7s
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Failing after 68h5m18s
CI/CD Pipeline / Check push changed paths (pull_request) Failing after 68h6m42s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 68h40m30s
135e422d45
xiaoxia merged commit 5c91bb21a7 into develop 2026-09-13 19:32:44 +08:00

🗑️ 预览环境已清理

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

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

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