fix: source_edit_plan_id 正确传递 + clips时长与预览一致 #1473
Reference in New Issue
Block a user
Delete Branch "fix/source-edit-plan-id-and-clips-consistency"
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?
任务一:正式生成任务 source_edit_plan_id 兜底
useGenerateFormState中editPlanId只从 URLedit_plan_id读取,智能剪辑正常进入时 URL 没有该参数,导致传给 Worker 的source_edit_plan_id为空,Worker 回退到内存重建模式。修复:
sourceEditPlanId = editPlanId || selectedTemplate || nullselectedTemplate由 react-query 异步加载,加载完成后组件重渲染,sourceEditPlanId自动更新为模板 IDselectedTemplate,所以这是同一个 edit_planGeneratePageuseGenerateVideo 改用sourceEditPlanIdeditPlanId保留用于fromEditPlan标识和usePlanConfigLoader任务二:预览 createPreview 传 source_edit_plan_id
useStep6Cover的createPreview调用之前只传 template_id/asset_ids/duration/title_config,后端虽有 template_id+user_id 兜底查找,但显式传入source_edit_plan_id: selectedTemplate与正式生成保持一致。任务三:buildClipsFromAssets 时长截断对齐预览播放器
逐行对比发现差异:
FrontendPreviewPlayer.buildPlaybackSegments:原
buildClipsFromAssets直接用segDuration没有和assetDuration取 min。当素材实际时长比 clamp 后的 segDuration 短时(例如模板 segment 要求 3-10 秒,素材只有 2 秒),Worker 会尝试读取不存在的片段。修复:
duration = Math.min(segDuration, assetDuration),与预览完全一致。验证
【阻塞级判定】
📊 审查概览
🔴 阻塞级问题(必须修复)
无
💡 改进建议(不阻塞合并)
[apps/web/src/pages/generate/hooks/useStep6Cover.ts: 157] 预览与生成的 source_edit_plan_id 逻辑一致性
source_edit_plan_id被硬编码为selectedTemplate。而在useGenerateFormState/index.ts中,sourceEditPlanId的逻辑是editPlanId || selectedTemplate。如果用户正在编辑一个已有计划(URL 中存在editPlanId),最终生成会使用editPlanId,但预览可能使用的是selectedTemplate(原始模板)。这可能导致预览显示的内容与最终生成结果不一致。建议确认预览逻辑是否应与生成逻辑保持一致(即优先使用editPlanId)。[apps/web/src/pages/generate/utils/buildClipsFromAssets.ts: 60] 边界条件防护
Math.min(segDuration, assetDuration)来计算 duration。如果assetDuration为undefined或NaN(例如资源元数据加载异常或缺失),计算结果将是NaN,这可能导致 Worker 处理失败。建议增加对assetDuration有效性的校验,例如使用Math.min(segDuration, assetDuration || 0)或提前抛出错误。✅ 良好实践
Math.min确保 duration 不超过素材实际时长,有效避免了 Worker 读取越界片段的风险,并添加了清晰的注释说明修改原因,保证预览与渲染的一致性。sourceEditPlanId的回退逻辑(editPlanId || selectedTemplate)清晰合理,并添加了详细的注释解释了异步加载和数据依赖关系。✅ 格式检查通过 | ✅ 逻辑审查需修改 | ✅ 建议关注性能
🤖 由 AI 代码审查机器人自动生成 | 2026-08-23 15:41:01 | 模型:
🚀 预览环境已部署
CI全绿,自动审批通过。
CI全绿,自动审批通过。
🗑️ 预览环境已清理
PR #1473 已关闭或合并,对应的预览环境已被清理。