fix(ai-avatar): 智能封面抽帧超时修复 + 封面流程改造(选封面后点完成才入库) #1877
Reference in New Issue
Block a user
Delete Branch "fix/ai-avatar-cover-flow-0913"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
改动
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}/finalizeFinalizeRenderResponsejob.output_cover_url,finalize 时自动带上前端:
finalizeRenderJobAPIPanelCoverAndGenerate拆分为 setup(配置阶段)/ select-cover(弹窗选封面)两个variantModalCoverSelect/app/products,改为主页面显示封面预览卡片 + 「选择封面」「完成」两个按钮测试
- 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 已关闭或合并,对应的预览环境已被清理。