diff --git a/apps/api/app/api/routes/generation_cover.py b/apps/api/app/api/routes/generation_cover.py index 4b904cfc8..a0ff342aa 100644 --- a/apps/api/app/api/routes/generation_cover.py +++ b/apps/api/app/api/routes/generation_cover.py @@ -31,8 +31,6 @@ logger = logging.getLogger(__name__) router = APIRouter(tags=["Generation"]) - - # ── Schemas ────────────────────────────────────────────────────────────── @@ -65,7 +63,6 @@ class GenerateCoverResponse(BaseModel): # ── Route ──────────────────────────────────────────────────────────────── - def _persist_cover_frame(frame_url: str, plan_id: str) -> str: """下载 MediaKit 返回的临时帧图并转存到 OSS covers/ 路径。""" import tempfile @@ -238,7 +235,7 @@ def generate_cover( ) # 使用裸 URL(rendered/* 已配置公开读);找不到渲染视频时不立即报错, - # 因为步骤 E 可以直接从源素材抽帧(前端纯 Canvas/WebCodecs 预览无后端渲染产物) + # 因为步骤 E 可以直接从源素材抽帧(历史数据或 Worker 抽帧失败时的兜底) primary_video_url = None if rendered_storage_key: plan_svc.update_plan_config(plan_id, {"rendered_storage_key": rendered_storage_key}) @@ -252,6 +249,7 @@ def generate_cover( primary_video_url = storage_svc.get_url(rendered_storage_key) if primary_video_url: import re as _re + primary_video_url = _re.sub(r"(?