fix(generate): #1750 批量预览五连修——删除假数据 fallback/配音时长/竖屏播放器/封面一键生成 #1751
Reference in New Issue
Block a user
Delete Branch "feat/1750-preview-five-fixes"
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?
工单
Closes #1750
五个问题
1. 配音列表不显示时长
Step5VoiceSelect卡片底行:素材配音显示「14.7秒 / 345 KB」,AI 音色显示「按文本合成」,时长 0/缺失兜底「时长未知」getDuration()此前已存在但未使用,本次接线2. 批量预览假数据根治(核心)
铁证根因:
variant-plans接口后端从未实现(实测 404),前端静默降级到本地模拟(9 素材 × 5s = 45s),导致 3 个卡片都显示 45 秒。variant-plans返回的真实 clips;预览总时长 = serverClips 片段时长之和(成片时长=配音时长等比分配,后端 #1749 实现)usePreviewAssets.ensureAssets按差集补拉素材详情(竞态序号守卫),不再静默回退playToken(0 基变体序号)替代 variantSeed 驱动批量播放互斥useBatchVariantPlans重写:error/retry 状态;retry 由 state nonce 驱动 effect 统一发请求(修复 retry 直调 load 与 effect 双发导致 requestSeq 竞争把成功结果丢弃)3. 独立配音模式预览
useVariantVoicePreview:独立模式每卡片挂各自变体配音 URL(voiceLibraryIds[i],素材 id→file_url;AI 音色→按各自标题串行 TTS,Map 缓存 + AbortController + seq 防竞态);共用模式全变体同一条isBatch守卫,N=1 零回归4. 竖屏播放器黑边
width:auto; max-width:100%; max-height:70vh; aspect-ratio:9/16,外包 flex 居中黑底容器5. 封面「一键全部自动生成」
useBatchCovers.generateAll:一次点击收集所有未生成封面串行触发,失败单个不阻塞;分级 toast(全成功/部分失败 okCount/failCount/全失败/全已有封面 info)onCoversChange支持函数式 updater;busyIndexes/uploadingIndexes 改数组精确定位卡片 loadingwhite-space:nowrap; flex-shrink:0,文案不再换行配套清理
computeLimitFromSegments改为纯「片段数 × 3」钳 [1,200];api 类型 duration_min/max/estimated_duration 标 @deprecated 改可选(兼容旧数据读取);editing-planner 编辑器内部 clip 时长属数据模型不在本次范围= []默认值每次渲染产生新数组 → effect 依赖变化 → setUrls 新数组 → 无限渲染循环,worker heap 爆掉。改用模块级稳定常量 EMPTY_VOICE_MATERIALS + 所有 setUrls 内容比较 bailout测试
⚠️ 后端依赖 #1749
POST /api/v1/generation/variant-plans接口上线前,staging 批量预览将显示「预览加载失败,请重试」——这是工单明确要求的行为(不许假数据)。后端接口部署后即自动恢复真实片段预览。🚀 预览环境已部署
CI全绿,自动审批通过。
CI全绿,自动审批通过。
🗑️ 预览环境已清理
PR #1751 已关闭或合并,对应的预览环境已被清理。