Initial TrueGrowth source import

This commit is contained in:
2026-07-07 09:36:36 +08:00
commit 3b6781d695
2283 changed files with 691996 additions and 0 deletions

View File

@@ -0,0 +1,27 @@
## Context
现有批量生成按镜头顺序执行,主要是为了将上一段尾帧传给下一段首帧。新的产品判断是尾帧传递收益不明显,用户更需要整体生成速度。
## Goals
- 两套工作流保持一致:爆款 MV 与爆款视频都使用同一类并行批量生成语义。
- 每个镜头独立生成首帧,再基于该首帧生成视频。
- 保留现有角色参考图、全局参考图、知识库上下文、模型参数、尺寸参数和自动插入画布行为。
- 停止按钮应尽量阻止后续提交,并让已提交任务自然完成或由现有任务队列处理。
## Non-Goals
- 不新增新的记录实体或持久化大文件。
- 不引入上一段尾帧到下一段首帧的兼容模式。
- 不改变单镜头“生成首帧/生成视频”的交互语义。
## Approach
`handleGenerateAllVideos` 改为为每个需要生成的镜头启动一个独立 async pipeline
1. 若镜头缺少可用首帧,则调用现有首帧生成任务,参考图包含全局参考图与该镜头角色参考图。
2. 首帧 URL 写回当前镜头。
3. 使用该首帧作为本镜头视频任务的 `referenceImages`,提交视频生成。
4. 视频 URL 写回当前镜头,并按现有设置选择是否插入画布。
所有镜头 pipeline 使用 `Promise.allSettled` 并行等待。失败和重试在单个镜头内部处理,不阻塞其他镜头。
## Risks
- 并行提交可能触发供应商限流。实现优先复用现有任务队列和轻量 URL 引用,不读取/缓存大二进制;若后续实测限流严重,再加并发上限配置。
- 停止无法取消已经提交给供应商的任务;本次保持现有队列语义,只停止未进入下一阶段的 pipeline。

View File

@@ -0,0 +1,17 @@
# Change: Parallelize workflow batch video generation
## Why
爆款 MV 与爆款视频第三步当前按镜头串行生成,并依赖上一段尾帧驱动下一段首帧。实际效果看尾帧传递对后续片段影响不大,串行等待会显著拉长整条工作流耗时。
## What Changes
- 将“全部→生成视频”从按镜头串行改为按镜头并行的独立流水线。
- 每个镜头流水线内部仍保持顺序:先结合上下文、角色参考图生成本镜头首帧,再用该首帧生成本镜头视频。
- 批量生成不再自动提取上一段尾帧作为下一段首帧,也不再因前一段失败阻塞后一段。
- 批量进度、停止与失败重试语义改为按镜头独立统计。
## Impact
- Affected specs: `video-batch-generation`
- Affected code:
- `packages/drawnix/src/components/mv-creator/pages/GeneratePage.tsx`
- `packages/drawnix/src/components/video-analyzer/pages/GeneratePage.tsx`
- focused tests/helpers where available

View File

@@ -0,0 +1,61 @@
## MODIFIED Requirements
### Requirement: Batch video generation runs shot pipelines in parallel
爆款 MV 与爆款视频生成工具在用户执行“全部→生成视频”时,系统 SHALL 为每个待生成镜头启动独立的生成流水线,并允许多个镜头同时推进,而不是按镜头顺序等待前一镜头完成。
#### Scenario: Parallel shot pipelines
- **WHEN** 用户在生成页点击“全部→生成视频”
- **THEN** 系统为多个待生成镜头启动独立流水线
- **AND** 某一镜头的视频生成不需要等待前一镜头的视频生成完成
#### Scenario: Skip completed shot independently
- **WHEN** 某一镜头已经存在已生成视频
- **THEN** 系统跳过该镜头的新视频任务创建
- **AND** 其他未完成镜头仍可并行生成
### Requirement: Each batch shot generates video from its own first frame
系统 SHALL 在每个批量镜头流水线内部先生成或复用该镜头首帧,再用该首帧作为本镜头视频生成输入。
#### Scenario: Generate first frame before shot video
- **GIVEN** 某一镜头没有已生成首帧
- **WHEN** 批量生成处理该镜头
- **THEN** 系统先结合镜头上下文、角色参考图和全局参考图生成该镜头首帧
- **AND** 首帧生成成功后才提交该镜头的视频生成任务
#### Scenario: Reuse existing first frame for shot video
- **GIVEN** 某一镜头已经存在首帧
- **WHEN** 批量生成处理该镜头
- **THEN** 系统直接使用该首帧作为该镜头视频生成输入
### Requirement: Batch generation does not chain previous tail frames
系统 SHALL NOT 在批量生成中自动提取上一段视频尾帧并写入下一段首帧输入。
#### Scenario: Later shot is independent from previous tail frame
- **GIVEN** 第 N 段视频生成完成且存在第 N+1 段
- **WHEN** 批量生成继续处理第 N+1 段
- **THEN** 系统不从第 N 段视频提取尾帧作为第 N+1 段首帧
- **AND** 第 N+1 段使用自己的首帧生成流水线
### Requirement: Batch parallel generation failure and stop are shot-scoped
系统 SHALL 将批量生成失败、重试和停止语义限定在独立镜头流水线内,单个镜头失败不应阻塞其他镜头完成。
#### Scenario: One shot fails while others continue
- **WHEN** 批量生成中的某个镜头流水线失败
- **THEN** 系统可按该镜头的重试策略重试该镜头
- **AND** 其他镜头流水线继续运行或完成
#### Scenario: User stops parallel batch generation
- **WHEN** 用户在批量并行生成过程中执行停止
- **THEN** 系统停止尚未进入下一阶段的流水线继续提交新任务
- **AND** 不再因为镜头顺序创建后续依赖任务

View File

@@ -0,0 +1,11 @@
## 1. Implementation
- [x] 1.1 Update MV creator batch generation to launch independent per-shot pipelines in parallel.
- [x] 1.2 Update popular video batch generation to launch independent per-shot pipelines in parallel.
- [x] 1.3 Ensure each pipeline generates or reuses a first frame before submitting that shot's video task.
- [x] 1.4 Remove batch-time dependency on previous shot tail frames.
- [x] 1.5 Update batch progress/status copy from serial index semantics to parallel completion semantics.
## 2. Verification
- [x] 2.1 Run targeted TypeScript/lint checks for the changed generation pages.
- [x] 2.2 Run or add focused tests for shared generation helpers if an extractable helper is introduced.
- [x] 2.3 Manually inspect no large image/video binaries are buffered in the new orchestration.