feat(#1677): 多视频批量生成后端补全 — 批量预览变体数组 + 按变体独立标题/配音/封面 #1701
Reference in New Issue
Block a user
Delete Branch "feature/batch-variants-per-video-config"
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?
多视频批量生成:后端能力补全(Issue #1677)
现状核实结论(与工单描述的出入)
工单中「后端已具备基础」部分,实际核实结果:
preview_countclone_plan_for_variant()变体克隆本 PR 补全全部缺口。
变更内容
1. 批量预览
POST /api/v1/generation/previewpreview_count=N 时一次创建 N 个独立任务(不再需要前端 N 次并发调用):
2. 按变体独立配置(预览 + 正式生成两条链路)
新增数组字段,三个字段语义一致:空数组=回退旧单值字段;长度 1=所有变体共用;长度 N=按变体独立(其他长度 422):
titlesstring[]title_config全局共用)voice_library_idsstring[]cover_urlsstring[]voice_library_id/cover_url/title_config全部保留有效)title_config回写改为每个变体各自回写自己的克隆 plan(原逻辑仅首个任务回写一次)接口数据结构(前端对接用)
批量预览请求
POST /api/v1/generation/preview批量预览响应(结构变更:总是返回数组)
轮询方式不变:对每个
items[i].task_id分别调GET /api/v1/generation/preview/{task_id}(返回单个变体对象,结构同 items 元素)。批量正式生成
POST /api/v1/generation/tasks响应结构不变:
{ items: [GenerationTaskResponse...], total: N },N 条独立成片。确认生成
POST /tasks/{task_id}/confirm不需要改动:批量场景前端对每个勾选的预览 task_id 分别调用 confirm(各自带 custom_title/cover_url),天然支持按变体独立。
测试
tests/unit/test_1677_batch_variants.py(24 个测试):数组长度校验、N=1/N=3 批量预览、克隆链路调用次数与 plan 关联、标题/配音按变体注入、共用模式、旧字段回退、克隆失败兜底test_generation_preview.py适配批量响应结构注意
GET /preview/{task_id}单任务查询接口签名/返回不变,前端可直接复用- POST /preview: preview_count=N 一次创建 N 个独立预览任务(各自克隆独立 plan、 独立 clips/随机起点),返回 {items: [...N变体], total},每个变体含独立 task_id/status/video_url,前端按 task_id 分别轮询 - POST /tasks: count=N 时支持变体级配置注入:titles[]/voice_library_ids[]/ cover_urls[](长度1=共用,长度N=独立,空数组=回退旧单值字段,N=1完全兼容) - 标题样式(font/color/position 等)全局共用,标题文字按变体独立 - 批量场景 title_config 回写改为每个变体各自回写独立 plan(原仅首任务回写) - 预览克隆链路:N 个预览全部克隆独立 plan(预览不污染源 plan),克隆失败中断 - 新增 BatchPreviewGenerationTaskResponse + PreviewGenerationTaskResponse 增加 variant_index/title_text/voice_library_id 字段 - 24 个新单测覆盖 N=1/N=3 场景(变体数组校验/批量预览/克隆链路/独立配置注入)🚀 预览环境已部署
🗑️ 预览环境已清理
PR #1701 已关闭或合并,对应的预览环境已被清理。