Compare commits

..

6 Commits

Author SHA1 Message Date
xiaoxia 58d78c3184 Merge pull request 'feat(ditto): 支持后台配置豆包API Key + 修复单句兜底bug' (#2268) from fix/ditto-apikey-config into develop
CI/CD Pipeline / Check if frontend-only change (push) Has been skipped
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (push) Successful in 1s
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 (push) Successful in 4s
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 5s
CI/CD Pipeline / PR Build API Image (push) Has been skipped
CI/CD Pipeline / PR Build Web Image (push) Has been skipped
CI/CD Pipeline / Frontend Lint (push) Has been skipped
CI/CD Pipeline / PR Build Worker Image (push) Has been skipped
CI/CD Pipeline / Validate - Style (pull_request) Has been skipped
CI/CD Pipeline / Validate - Security (pull_request) Has been skipped
CI/CD Pipeline / Validate - Python (mypy + alembic) (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 / Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (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
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 2m51s
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m29s
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 / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
PR Automation / Auto Merge on CI Green + Approved (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (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 / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 2m3s
CI/CD Pipeline / Build Staging API Image (push) Successful in 4m9s
CI/CD Pipeline / Build Staging Web Image (push) Successful in 4m17s
CI/CD Pipeline / Frontend Unit Tests (push) Successful in 6m12s
AI Code Review / AI Code Review (pull_request) Successful in 6m38s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 7m12s
CI/CD Pipeline / CI Gate (pull_request) Successful in 1s
CI/CD Pipeline / Build Staging Worker Image (push) Successful in 9m13s
CI/CD Pipeline / Retag skipped Staging API Image (push) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web Image (push) Has been skipped
CI/CD Pipeline / Retag skipped Staging Worker Image (push) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (push) Successful in 8m7s
CI/CD Pipeline / Staging E2E Tests (push) Successful in 1m28s
CI/CD Pipeline / ACR Image Cleanup (push) Successful in 1m41s
CI/CD Pipeline / Staging API Integration Tests (push) Successful in 3m16s
CI/CD Pipeline / Integration Tests (push) Successful in 30m3s
CI/CD Pipeline / Validate - Style (push) Successful in 31m48s
CI/CD Pipeline / Unit Tests (push) Successful in 39m12s
CI/CD Pipeline / Validate - Python (mypy + alembic) (push) Successful in 40m14s
CI/CD Pipeline / Validate - Security (push) Successful in 1h43m4s
CI/CD Pipeline / Build Production API Image (push) Has been skipped
CI/CD Pipeline / Build Production Web Image (push) Has been skipped
CI/CD Pipeline / CI Gate (push) Has been skipped
CI/CD Pipeline / Build Production Worker Image (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Canary Release to Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
2026-10-11 20:30:54 +08:00
xiaoxia 0c1dbfc5a7 Merge pull request 'fix(viral-video): worker侧OSS签名URL重签2h,修复Wan/Seedance下载过期URL失败' (#2270) from fix/viral-video-step-error-isolation into develop
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (push) Successful in 2s
CI/CD Pipeline / Check if frontend-only change (push) Has been skipped
CI/CD Pipeline / Check push changed paths (push) Successful in 4s
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 4s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 5s
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
PR Automation / Auto Approve on CI Green (pull_request) Successful in 2m50s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 4m14s
CI/CD Pipeline / Frontend Lint (push) Has been skipped
AI Code Review / AI Code Review (pull_request) Successful in 6m47s
CI/CD Pipeline / PR Build API Image (push) Has been skipped
CI/CD Pipeline / PR Build Web Image (push) Has been skipped
CI/CD Pipeline / PR Build Worker Image (push) Has been skipped
CI/CD Pipeline / Build Staging API Image (push) Successful in 38s
CI/CD Pipeline / Build Staging Web Image (push) Successful in 23s
CI/CD Pipeline / Frontend Unit Tests (push) Successful in 3m1s
CI/CD Pipeline / Validate - Style (pull_request) Has been skipped
CI/CD Pipeline / Validate - Security (pull_request) Has been skipped
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Has been skipped
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (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 API Image (pull_request) Successful in 12s
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 4m48s
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 / Build Staging Worker Image (push) Successful in 6m3s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Has been skipped
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 / 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 / CI Gate (pull_request) Successful in 1s
CI/CD Pipeline / Retag skipped Staging API Image (push) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web Image (push) Has been skipped
CI/CD Pipeline / Retag skipped Staging Worker Image (push) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (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 / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (push) Successful in 5m19s
CI/CD Pipeline / Staging E2E Tests (push) Successful in 1m7s
CI/CD Pipeline / ACR Image Cleanup (push) Successful in 1m30s
CI/CD Pipeline / Staging API Integration Tests (push) Successful in 3m15s
CI/CD Pipeline / Validate - Style (push) Successful in 25m4s
CI/CD Pipeline / Integration Tests (push) Successful in 22m37s
CI/CD Pipeline / Validate - Python (mypy + alembic) (push) Successful in 27m4s
CI/CD Pipeline / Validate - Security (push) Has been cancelled
CI/CD Pipeline / Unit Tests (push) Has been cancelled
CI/CD Pipeline / Build Production API Image (push) Has been cancelled
CI/CD Pipeline / Build Production Web Image (push) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (push) Has been cancelled
CI/CD Pipeline / Deploy Production (push) Has been cancelled
CI/CD Pipeline / Production Browser E2E (push) Has been cancelled
CI/CD Pipeline / Canary Release to Production (push) Has been cancelled
CI/CD Pipeline / CI Gate (push) Has been cancelled
2026-10-11 19:57:10 +08:00
CI Bot 312210c3d5 fix(viral-video): OSS签名URL过期导致Wan/Seedance下载失败——worker侧重签2h
CI/CD Pipeline / Check push changed paths (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 / 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 / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web 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
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 25s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 46s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 2m57s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 2m40s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 2m40s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 3m38s
AI Code Review / AI Code Review (pull_request) Successful in 6m58s
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 38s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 24m45s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 24m26s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 25m6s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Failing after 30m14s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 1h17m37s
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 / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / CI Gate (pull_request) Failing after 1s
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
根因:用户上传图片时签的OSS URL默认expires=3600s(1h),在文案页停留超过1小时后点生成视频,
URL已过期,Wan/Seedance首帧下载报 Failed to download。

修复:
1. 新增_refresh_oss_signed_url() helper:识别我们OSS域名的URL(bucket.oss-cn-*.aliyuncs.com),
   通过get_download_url重签2h;外链原样返回;storage_key签公网URL
2. _normalize_image_url重写:对http(s) URL不再原样透传,统一走helper重签
3. _step_video_analysis:参考视频URL重签
4. _run_render_pipeline阶段3入口:images和ref_videos全部重签(双保险,_normalize已做一次)

不影响:信任链预热daemon用的storage_key不受影响;外链图片/Ark t2i产物原样透传
2026-10-11 19:55:48 +08:00
xiaoxia 70a26b053a ci: trigger staging deploy (viral-video error isolation 36c30e5)
CI/CD Pipeline / Check if frontend-only change (push) Has been skipped
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (push) Successful in 2s
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 3s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 3s
CI/CD Pipeline / Check push changed paths (push) Successful in 3s
CI/CD Pipeline / PR Build Worker Image (push) Has been skipped
CI/CD Pipeline / PR Build API Image (push) Has been skipped
CI/CD Pipeline / PR Build Web Image (push) 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 / Frontend Lint (push) Has been skipped
CI/CD Pipeline / Build Staging Web Image (push) Successful in 1m5s
CI/CD Pipeline / Validate - Style (pull_request) Has been skipped
CI/CD Pipeline / Validate - Security (pull_request) Has been skipped
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Has been skipped
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (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
PR Automation / Auto Approve on CI Green (pull_request) Successful in 1m18s
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 51s
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 / Build Staging API Image (push) Successful in 2m14s
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
PR Automation / Auto Merge on CI Green + Approved (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 / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (push) Successful in 3m38s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 6m19s
CI/CD Pipeline / CI Gate (pull_request) Successful in 1s
AI Code Review / AI Code Review (pull_request) Successful in 8m2s
CI/CD Pipeline / Build Staging Worker Image (push) Successful in 9m14s
CI/CD Pipeline / Retag skipped Staging API Image (push) Has been skipped
CI/CD Pipeline / Retag skipped Staging Worker Image (push) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web Image (push) Has been skipped
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 9m45s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (push) Successful in 3m25s
CI/CD Pipeline / ACR Image Cleanup (push) Successful in 1m44s
CI/CD Pipeline / Staging API Integration Tests (push) Successful in 4m2s
CI/CD Pipeline / Validate - Style (push) Has been cancelled
CI/CD Pipeline / Validate - Security (push) Has been cancelled
CI/CD Pipeline / Validate - Python (mypy + alembic) (push) Has been cancelled
CI/CD Pipeline / Build Production API Image (push) Has been cancelled
CI/CD Pipeline / Build Production Web Image (push) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (push) Has been cancelled
CI/CD Pipeline / Deploy Production (push) Has been cancelled
CI/CD Pipeline / Production Browser E2E (push) Has been cancelled
CI/CD Pipeline / Canary Release to Production (push) Has been cancelled
CI/CD Pipeline / CI Gate (push) Has been cancelled
CI/CD Pipeline / Unit Tests (push) Has been cancelled
CI/CD Pipeline / Integration Tests (push) Has been cancelled
CI/CD Pipeline / Staging E2E Tests (push) Has been cancelled
2026-10-11 19:39:29 +08:00
xiaoxia bec75a075b Merge pull request 'fix(viral-video): 新一轮任务清空上一轮错误残留+错误阶段关键词兜底归因' (#2269) from fix/viral-video-step-error-isolation into develop
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 2s
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (push) Successful in 2s
CI/CD Pipeline / Check if frontend-only change (push) Has been skipped
CI/CD Pipeline / Check push changed paths (push) Successful in 9s
CI/CD Pipeline / Validate - Style (pull_request) Has been skipped
CI/CD Pipeline / Validate - Security (pull_request) Has been skipped
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Has been skipped
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (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 API Image (pull_request) Successful in 15s
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 2m12s
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
PR Automation / Auto Approve on CI Green (pull_request) Successful in 2m50s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 1m22s
AI Code Review / AI Code Review (pull_request) Successful in 9m19s
CI/CD Pipeline / Frontend Lint (push) Has been skipped
CI/CD Pipeline / PR Build API Image (push) Has been skipped
CI/CD Pipeline / PR Build Web Image (push) Has been skipped
CI/CD Pipeline / PR Build Worker Image (push) Has been skipped
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 / Retag skipped Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Has been skipped
PR Automation / Auto Merge on CI Green + Approved (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / CI Gate (pull_request) Successful in 3s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (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 / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (push) Successful in 3m43s
CI/CD Pipeline / Build Staging Web Image (push) Successful in 2m54s
CI/CD Pipeline / Build Staging API Image (push) Successful in 5m1s
CI/CD Pipeline / Build Staging Worker Image (push) Successful in 4m13s
CI/CD Pipeline / Retag skipped Staging API Image (push) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web Image (push) Has been skipped
CI/CD Pipeline / Retag skipped Staging Worker Image (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Has been cancelled
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (push) Has been cancelled
CI/CD Pipeline / Staging API Integration Tests (push) Has been cancelled
CI/CD Pipeline / Build Production API Image (push) Has been cancelled
CI/CD Pipeline / Build Production Web Image (push) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (push) Has been cancelled
CI/CD Pipeline / Deploy Production (push) Has been cancelled
CI/CD Pipeline / Production Browser E2E (push) Has been cancelled
CI/CD Pipeline / ACR Image Cleanup (push) Has been cancelled
CI/CD Pipeline / Canary Release to Production (push) Has been cancelled
CI/CD Pipeline / CI Gate (push) Has been cancelled
CI/CD Pipeline / Validate - Style (push) Has been cancelled
CI/CD Pipeline / Validate - Security (push) Has been cancelled
CI/CD Pipeline / Validate - Python (mypy + alembic) (push) Has been cancelled
CI/CD Pipeline / Unit Tests (push) Has been cancelled
CI/CD Pipeline / Integration Tests (push) Has been cancelled
2026-10-11 19:16:57 +08:00
CI Bot 36c30e5b6f fix(viral-video): 修复新一轮任务开始时上一轮错误残留显示+错误阶段关键词兜底归因
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 1s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 1s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 2m53s
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 41s
CI/CD Pipeline / PR Build API Image (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 1m6s
CI/CD Pipeline / PR Build Worker 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
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 4m49s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 15s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m36s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 1m25s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 44s
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
AI Code Review / AI Code Review (pull_request) Successful in 7m59s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 16m3s
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 / Validate - Python (mypy + alembic) (pull_request) Successful in 20m12s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 1h8m6s
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 / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / CI Gate (pull_request) Failing after 2s
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
- handleAnalyzeImages开始新分析时清空analysisError/copyError/videoError/imageAnalysis/storyboard
- handleGenerateCopy/handleGenerateVideo进入对应阶段时清空其他阶段错误
- handleRetry重试时清空旧imageAnalysis/storyboard产物
- onPollUpdate failed分支+activeError派生加关键词兜底(Wan/Seedance/VLM/OCR等),防止current_stage丢失时错误归到文案
- 解决BUG:用户只上传图片没点生成文案时,STEP3区域显示上一次的「视频生成失败:Wan 3.0…」
2026-10-11 19:04:26 +08:00
3 changed files with 86 additions and 26 deletions
+1 -2
View File
@@ -1,2 +1 @@
CI trigger file - safe to delete
retrigger at 2026-09-15 20:31:24 UTC
trigger staging deploy for bec75a07 (viral-video error isolation) at 2026-10-11 19:39:29
@@ -712,16 +712,23 @@ const ViralVideoPage: React.FC = () => {
}
nextStep = "failed"
// 根据 current_stage 正确归因错误(图片/文案/视频错误独立显示)
if (isVideoStage(stage)) {
// 兜底:若 stage 丢失但错误消息含视频生成相关关键词,归为视频错误
const looksLikeVideoErr =
/wan 3\.0|seedance|视频生成|视频下载|视频渲染|tts|配音|render/i.test(err || "")
const looksLikeImageErr =
/vlm|图片分析|vision|商品识别|ocr|image analysis|图片识别/i.test(err || "")
if (isVideoStage(stage) || (!isImageAnalysisStage(stage) && !isCopyStage(stage) && looksLikeVideoErr)) {
videoError = err || videoError || "视频生成失败"
copyError = undefined
} else if (isImageAnalysisStage(stage)) {
analysisError = undefined
} else if (isImageAnalysisStage(stage) || looksLikeImageErr) {
analysisError = err || analysisError || "图片分析失败"
copyError = undefined
videoError = undefined
} else {
copyError = err || copyError || "文案生成失败"
videoError = undefined
analysisError = undefined
}
break
}
@@ -1129,7 +1136,17 @@ const ViralVideoPage: React.FC = () => {
message.warning("参考视频上传中,请稍候")
return
}
setTask({ uiStep: "step1_analyzing", jobId: null, job: null })
// 开始新一轮图片分析:清空所有错误状态+旧产物,避免上一轮失败的错误残留显示
setTask({
uiStep: "step1_analyzing",
jobId: null,
job: null,
analysisError: undefined,
copyError: undefined,
videoError: undefined,
imageAnalysis: undefined,
storyboard: undefined,
})
try {
const job = await analyzeViralImages({
images: readyImgs.map((i) => i.ossUrl as string),
@@ -1157,7 +1174,7 @@ const ViralVideoPage: React.FC = () => {
message.warning("请先完成图片分析")
return
}
setTask({ uiStep: "step2_generating", copyError: undefined })
setTask({ uiStep: "step2_generating", copyError: undefined, videoError: undefined, analysisError: undefined })
try {
const job = await generateViralCopy(task.jobId, {
industry: task.industry || undefined,
@@ -1201,7 +1218,7 @@ const ViralVideoPage: React.FC = () => {
* - 若 job 已在 copy_generated/image_analyzed 且文案已确认:重新调 confirm-copy
* - 其他情况:回退到旧的 /generate 全量提交(兼容旧任务/降级) */
const handleGenerateVideo = async () => {
setTask({ uiStep: "step3_generating", videoError: undefined })
setTask({ uiStep: "step3_generating", videoError: undefined, copyError: undefined, analysisError: undefined })
try {
let job
if (task.jobId && task.storyboard && task.storyboard.voiceover_script.trim()) {
@@ -1271,6 +1288,9 @@ const ViralVideoPage: React.FC = () => {
videoError: undefined,
copyError: undefined,
analysisError: undefined,
// retry 从阶段1重新跑,清空旧产物避免残留
imageAnalysis: undefined,
storyboard: undefined,
})
message.success("已重试")
} catch (err: unknown) {
@@ -1283,6 +1303,8 @@ const ViralVideoPage: React.FC = () => {
videoError: undefined,
copyError: undefined,
analysisError: undefined,
imageAnalysis: undefined,
storyboard: undefined,
})
}
}
@@ -1319,8 +1341,12 @@ const ViralVideoPage: React.FC = () => {
"",
)
const st = getJobStage(task.job)
if (isVideoStage(st)) return { stage: "video" as const, msg: cleaned }
if (isImageAnalysisStage(st)) return { stage: "image" as const, msg: cleaned }
// 兜底:基于错误消息关键词判定(防止 stage 字段为空时错误归到文案)
const looksLikeVideoErr =
/wan 3\.0|seedance|视频生成|视频下载|视频渲染|tts|配音|render/i.test(cleaned)
const looksLikeImageErr = /vlm|图片分析|vision|商品识别|ocr|image analysis|图片识别/i.test(cleaned)
if (isVideoStage(st) || looksLikeVideoErr) return { stage: "video" as const, msg: cleaned }
if (isImageAnalysisStage(st) || looksLikeImageErr) return { stage: "image" as const, msg: cleaned }
return { stage: "copy" as const, msg: cleaned }
}
return null
+52 -17
View File
@@ -355,10 +355,44 @@ def _vision_fallback(idx: int, reason: str, extra: dict | None = None) -> dict:
return d
def _refresh_oss_signed_url(raw: str) -> str:
"""把我们自己 OSS 的 URL 重新签新鲜签名(默认2小时),避免前端上传时签的1h URL
在阶段3被Wan/Seedance下载时过期(用户在文案页停留超过1小时导致Failed to download)。
- 我们 OSS 域名的URL:提取storage_key,走get_download_url重签
- 外链(公网资源、Ark/Seedream t2i产物等):原样返回
- storage_key(无scheme):走get_download_url签公网URL
"""
if not raw or not isinstance(raw, str):
return raw
s = raw.strip()
if not s:
return s
try:
from packages.shared.storage import get_storage_service
svc = get_storage_service()
bucket = getattr(svc, "bucket_name", "") or ""
if s.startswith("http://") or s.startswith("https://"):
from urllib.parse import urlparse
parsed = urlparse(s)
host = (parsed.hostname or "").lower()
is_our_oss = bool(bucket) and host.endswith(".aliyuncs.com") and host.startswith(f"{bucket}.")
if is_our_oss:
return svc.get_download_url(s, expires_seconds=7200)
return s # 外链原样返回
return svc.get_download_url(s.lstrip("/"), expires_seconds=7200)
except Exception as _e:
logger.warning("[爆款视频] URL重签失败回退原值: %s err=%s", s[:80], _e)
return s
def _normalize_image_url(raw: str, idx: int) -> str:
"""将 job.images 中的 storage_key/相对路径/空值统一归一化为可公网访问 URL。
- http(s):// → 直接用
- 其他 → storage_key,通过 SharedStorageService.get_url() 转公网 URL
- OSS URL(含前端上传的签名URL):统一通过 _refresh_oss_signed_url 重签2h,
避免用户在文案页停留超过1小时导致阶段3 Wan/Seedance 下载时签名过期
- 外链(Ark/Seedream t2i产物、公网资源):原样返回
- storage_key:签新鲜公网URL
- 空值/非字符串 → 抛 ValueError
"""
if not raw or not isinstance(raw, str):
@@ -366,17 +400,14 @@ def _normalize_image_url(raw: str, idx: int) -> str:
url = raw.strip()
if not url:
raise ValueError(f"图片 #{idx} URL 为空白字符串")
if url.startswith("http://") or url.startswith("https://"):
return url
storage_key = url.lstrip("/")
try:
from packages.shared.storage import get_storage_service
url = get_storage_service().get_url(storage_key)
except Exception as _e:
raise ValueError(f"图片 #{idx} storage_key={storage_key!r} 转公网URL失败: {_e}") from _e
logger.info("[爆款视频] 图片 #%d storage_key → 公网URL: %s", idx, url[:120])
return url
signed = _refresh_oss_signed_url(url)
if not signed:
raise ValueError(f"图片 #{idx} URL={url[:100]!r} 归一化失败")
if signed != url and (url.startswith("http://") or url.startswith("https://")):
logger.info("[爆款视频] 图片 #%d OSS URL 重签2h: %s", idx, signed[:120])
elif not url.startswith("http"):
logger.info("[爆款视频] 图片 #%d storage_key → 签名URL(2h): %s", idx, signed[:120])
return signed
# ── v8 图片分析结构归一化(老数据兼容只在这里做一次)────────────────────
@@ -461,7 +492,9 @@ def _step_video_analysis(job: ViralVideoJob) -> dict | None:
try:
from viral_video.video_analyzer import analyze_video_style
style_guide = analyze_video_style(job.reference_video_url)
# 参考视频URL重签(同样防止上传后停留过久签名过期)
video_url = _refresh_oss_signed_url(job.reference_video_url)
style_guide = analyze_video_style(video_url)
return style_guide if isinstance(style_guide, dict) else None
except ImportError as e:
logger.info("[爆款视频] video_analyzer 模块未就绪(%s),使用占位风格分析", e)
@@ -1829,11 +1862,13 @@ def _step_render(job: ViralVideoJob, copy_result: dict, tts_audio_url: str | Non
# reference_audios: TTS 音频驱动口型
ref_audios = [tts_audio_url] if tts_audio_url else []
# reference_images: 产品图(除首帧外的其他图作为多参考;首帧通过 image_url 传)
images = list(job.images or [])
# 阶段3进入时再次重签URL(用户可能在文案页停留超1h,阶段1签的URL已过期)
images = [_refresh_oss_signed_url(u) for u in (job.images or []) if u]
first_image = images[0] if images else None
rest_images = images[1:30] if len(images) > 1 else []
# reference_videos: 参考视频(可选)
ref_videos = [job.reference_video_url] if getattr(job, "reference_video_url", "") else []
# reference_videos: 参考视频(可选,也重签)
_ref_vid = _refresh_oss_signed_url(getattr(job, "reference_video_url", "") or "")
ref_videos = [_ref_vid] if _ref_vid else []
tmpdir = Path(tempfile.mkdtemp(prefix=f"viral_{job.id}_"))
logger.info(