Files
AiVideo/docs/studio_rearchitecture.md
2026-04-14 12:05:56 +08:00

2.4 KiB
Raw Permalink Blame History

AiVideo Studio 重构方案V2

目标

  • 实现与参考编辑器页面一致的工作台布局:顶部导航、中央预览舞台、底部时间线、右侧参数与日志面板。
  • 保留并强化现有能力:自动分镜、单镜头润色、渲染、阶段日志、任务跟踪。
  • 将前端代码从“流程散落”改造为“分层架构”,减少重复逻辑与状态不一致风险。

新架构

1. UI Shell 层

  • TopNav品牌、快捷操作、Play/Render 入口。
  • ToolBar上下文状态task/mock与工具位。
  • PreviewStage:展示当前 Scene 预览或 final video。
  • TimelineStrip:镜头缩略图时间线与进度条。
  • SceneEditor:单镜头编辑与润色入口。

2. 状态层StudioState

  • 统一使用 useReducer 管理工作台状态。
  • 核心状态:
    • scenes
    • selectedSceneIndex
    • stageState
    • stageLogs
    • renderProgress
    • taskId
    • finalVideoUrl
    • toast
  • 所有修改均通过 dispatch(action) 进入 reducer避免多处 useState 导致的竞态和重复。

3. API/流处理层StudioAPI

  • startScriptStream()EventSource 流式接收 Script 阶段事件。
  • postStream():统一处理 Refine/Render 的 fetch + SSE 流。
  • consumeFetchSSE():抽象 SSE 分块解析,消除重复解析代码。

4. 事件编排层

  • onStageEvent(sourceStage, event, data) 统一路由:
    • task
    • stage_update
    • line
    • error
    • done
  • applyStageUpdate() 负责阶段状态、进度、scene upsert 的单点更新。

数据流

  1. 用户修改 Prompt / Provider 参数。
  2. 自动防抖触发 startScript(),进入 Script SSE。
  3. stage_update.scene_json 持续更新 scenes,时间线和右侧编辑器同步刷新。
  4. 用户可对当前 Scene 进行编辑与 refine
  5. 用户触发 render,进度与日志实时反馈,完成后挂载 final video URL。

兼容性说明

  • 继续使用 babel-standalone@6,所以 JSX 不使用 <>...</>,统一为 React.Fragment
  • 保持现有后端接口契约不变:
    • GET /api/script
    • POST /api/refine
    • POST /api/render

后续建议

  • 将当前单文件页面拆分为真正多文件前端工程Vite + React引入 TypeScript 与单元测试。
  • 增加 Timeline 的拖拽排序与片段时长编辑。
  • 增加右侧“资产库”与“模板库”,进一步贴近参考产品完整体验。