Skip to content

产品与总体架构设计

  • 状态:初稿
  • 更新时间:2026-08-28
  • 产品名称:叙镜 NarraCine

1. 产品定义

面向内容团队、IP 公司和创作者的多租户 AIGC 视频生产平台。平台以可复用 IP 资产为中心,通过结构化剧本、分镜、模型编排、素材生成、声音生产和非线性剪辑,完成从内容输入到成片交付的完整闭环。

平台的核心价值不是“接入多个生成模型”,而是:

  • 把一次性生成变成可持续、可复用、可审计的工业化生产;
  • 让人物、场景、服装、道具和声音在跨镜头、跨集内容中保持一致;
  • 让不同模型根据能力、质量、成本和时效自动或手动选择;
  • 让每一步 AI 结果都可以人工编辑、审核、重试和回滚;
  • 让 Agent 在严格权限和预算约束下参与生产。

2. DramaClaw 已识别问题与改进方向

问题改进方案
视频、图片、音频模型缺少统一管理建立模型目录、能力矩阵、统一任务生命周期与 Provider Adapter
不同视频模型的参考方式差异没有被正确建模建立 GenerationMode、MediaReference 与兼容规则
生成视频时参考物约束弱,提示词与资产脱节使用 ShotSpec、AssetBinding、Prompt Compiler 和生成前检查
上传内容分析后,生成剧本无法充分手工编辑使用结构化剧本编辑器、版本、差异、锁定区和 AI Patch
场景与生产流程展示混乱分离业务生产视图和 Conductor 技术执行视图
缺少完整 BGM 生产与管理建立音乐资产库、AI 生成、版权、情绪曲线和多轨混音
剪辑环节偏黑盒AI 生成可编辑 TimelineSpec,再由 Remotion/FFmpeg 渲染
团队与租户能力不足支持飞书商店应用、多企业 OAuth、租户隔离与权限体系
Agent 难以安全操作业务建立独立 MCP Server,复用 NestJS Application Service

3. 用户与核心场景

3.1 用户角色

  • 企业管理员:安装飞书应用、配置企业、模型密钥、OSS 和预算;
  • 制片人:创建项目、规划集数、控制进度、质量与成本;
  • 编剧:编辑故事圣经、人物、分集大纲和剧本;
  • 导演/分镜师:设计镜头、参考素材、构图、运镜和节奏;
  • 资产设计师:维护角色、场景、道具、服装、风格和音色;
  • 剪辑师:选择候选镜头、调整时间线、声音、字幕和成片;
  • Agent:在用户授权范围内查询、分析、生成、修改和渲染。

3.2 主生产链路

text
内容上传
  → 原文解析
  → 故事圣经
  → 人物/关系/场景/道具
  → 分集大纲
  → 可编辑剧本
  → 场次与节拍
  → 镜头脚本
  → 资产准备与审核
  → 图片/视频/声音/BGM 生成
  → 镜头审核
  → AI 剪辑计划
  → 可编辑时间线
  → 渲染与质检
  → 成片和素材包交付

4. 技术架构

text
┌─────────────────────────────────────────────────────────┐
│ Next.js Web                                             │
│ Tailwind CSS · shadcn/ui · Motion · Tiptap · React Flow │
└──────────────────────────┬──────────────────────────────┘
                           │ REST / SSE / WebSocket
┌──────────────────────────▼──────────────────────────────┐
│ NestJS API                                               │
│ Tenant · Project · Script · Asset · Shot · Model         │
│ Generation · Workflow · Music · Timeline · Render        │
│ Review · Billing · Audit · MCP Application Services      │
└───────────────┬───────────────────────┬──────────────────┘
                │                       │
       ┌────────▼────────┐     ┌────────▼────────┐
       │ PostgreSQL      │     │ Redis           │
       │ 业务数据/版本   │     │ 缓存/限流/锁    │
       └─────────────────┘     └─────────────────┘

       ┌────────▼────────┐
       │ Conductor       │
       │ 长任务/重试/分支│
       └────────┬────────┘
                │ Poll / Callback
       ┌────────▼──────────────────────────────────────────┐
       │ TypeScript Workers                                │
       │ Model · Media · QA · Render · Notification        │
       └───────┬───────────────────────┬───────────────────┘
               │                       │
       ┌───────▼────────┐      ┌───────▼────────┐
       │ Provider 层    │      │ OSS / FFmpeg   │
       │ 火山/百炼/...  │      │ 素材与媒体处理 │
       └────────────────┘      └────────────────┘

┌─────────────────────────────────────────────────────────┐
│ MCP Server                                               │
│ Agent → 鉴权/授权/预算 → NestJS Application Services     │
└─────────────────────────────────────────────────────────┘

5. 技术选型

层级选型说明
前端Next.js前后端分离,Web 独立部署
样式Tailwind CSS + shadcn/ui统一设计系统和组件基线
动效Motion页面转场、状态变化和制作反馈
剧本编辑Tiptap/ProseMirror结构化文档、扩展节点、评论与版本
流程与关系图React Flow生产流程、人物关系、镜头依赖
APINestJS模块化领域服务和统一 TypeScript 技术栈
ORMPrismaPostgreSQL 数据模型与迁移
编排Conductor长任务、并行、重试、等待、人工审批
缓存Redis限流、幂等锁、临时状态与事件分发
媒体存储OSS原始素材、中间结果、代理文件和成片
媒体工具FFmpeg/FFprobe探测、转码、抽帧、混音、封装与质检
合成Remotion + FFmpegTypeScript 时间线与可靠服务端渲染
AgentMCP对外提供结构化、授权后的平台能力
可观测性OpenTelemetry + Prometheus + Grafana任务链路、模型调用、成本与异常追踪

6. 领域模型

text
Tenant
 ├── FeishuInstallation
 ├── Workspace
 │    ├── Membership
 │    └── Project
 │         ├── StoryBible
 │         ├── CharacterMaster
 │         │    └── CharacterVariant
 │         ├── SceneMaster
 │         │    └── SceneVariant
 │         ├── PropMaster
 │         │    └── PropVariant / PropState
 │         ├── StylePreset
 │         ├── VoiceAsset
 │         ├── MusicAsset
 │         └── Season
 │              └── Episode
 │                   ├── ScriptVersion
 │                   ├── EpisodeAssetBinding
 │                   ├── SceneBlock
 │                   │    ├── Beat
 │                   │    ├── AssetBindingOverride
 │                   │    └── Shot
 │                   │         ├── ShotSpecVersion
 │                   │         ├── AssetBindingOverride
 │                   │         ├── Generation
 │                   │         └── Review
 │                   ├── Timeline
 │                   │    └── TimelineVersion
 │                   └── Delivery
 ├── ProviderCredential
 ├── StorageConfiguration
 ├── BudgetPolicy
 └── AuditLog

核心规则:

  • 剧本、镜头、提示词和时间线全部版本化;
  • 电视剧与短剧严格采用 Project → Season → Episode → SceneBlock → Shot 制作层级;每个项目必须提供剧集管理,并以 Episode 作为剧本、资产准备、镜头、声音、剪辑和交付状态的汇总边界;
  • 资产分为草稿、候选、已审核、归档状态;
  • 只有已审核的标准角色/场景资产才能默认进入批量生产;
  • Character Master 保存项目全局的角色身份、基础相貌、核心设定和标准音色;CharacterVariant 只描述单集造型与状态。Scene Master、Prop Master 分别保存全局空间与道具定义,SceneVariant、PropVariant/PropState 描述单集状态;
  • StylePreset 与 VoiceAsset 默认是项目全局资产,但允许 Episode 显式覆盖;
  • Generation 保存完整输入快照,不能只保存供应商任务号;
  • 所有数据记录必须包含 tenantId,服务端查询强制施加租户条件。

7. 剧本与镜头设计

7.1 结构化剧本

剧本后端保存结构化 JSON,同时提供 Markdown/纯文本导入导出。基本节点:

text
Project → Season → Episode → SceneBlock → Beat → Action/Dialogue → Shot

编辑能力:

  • 自动保存、版本历史、差异比较和回滚;
  • 段落锁定,锁定内容不允许 Agent 自动修改;
  • AI 改写只生成 Patch 或新版本,禁止静默覆盖;
  • 人物、场景、道具使用实体引用,而不是纯文本名称;
  • 从场次生成镜头后保持双向引用;
  • 支持评论、审核、通过和驳回。

7.2 ShotSpec

typescript
interface ShotSpec {
  shotId: string;
  narrative: {
    purpose: string;
    action: string;
    dialogue?: string;
    emotion?: string;
  };
  subjects: Array<{
    characterId: string;
    appearanceVariantId: string;
    position?: string;
    action?: string;
    expression?: string;
  }>;
  scene: {
    sceneId: string;
    variantId?: string;
    timeOfDay?: string;
    weather?: string;
  };
  camera: {
    shotSize: string;
    angle: string;
    movement: string;
    duration: number;
  };
  continuity: {
    previousShotId?: string;
    screenDirection?: string;
    requiredState?: Record<string, unknown>;
  };
  references: MediaReference[];
}

8. 资产与一致性

8.1 资产类型

  • 角色:标准形象、角度、表情、服装、年龄状态;
  • 场景:全景、不同机位、昼夜、天气和损坏状态;
  • 道具:标准图、状态变化和归属角色;
  • 风格:参考图、颜色、光照、材质和负面规则;
  • 声音:角色音色、情绪样本、语言和授权证明;
  • 音乐:生成/上传/版权库、情绪、速度、调性和分轨;
  • 镜头:首帧、尾帧、候选视频、代理视频和最终镜头。

资产的适用范围分为两层:

  • 项目全局母版:Character Master 定义身份、基础相貌、核心设定与标准音色;Scene Master 定义地点与稳定空间结构;Prop Master 定义道具身份和标准状态;StylePreset、VoiceAsset 默认也属于全局范围;
  • 单集变体:CharacterVariant 定义服装、发型、年龄、伤势、妆容、携带道具和角色状态;SceneVariant 定义昼夜、天气、布景和损坏程度;PropVariant/PropState 定义新旧、损坏、归属角色和剧情状态。单集只保存相对母版的差异,不复制一份失去来源关系的资产。

EpisodeAssetBinding 将某个全局资产的具体母版或变体版本绑定到 Episode。它既是本集资产包的清单,也是生产解析时的稳定输入边界。SceneBlock 与 Shot 可以通过 AssetBindingOverride 进一步覆盖本集绑定。

8.2 一致性控制

text
已审核资产
  → ShotSpec 显式绑定
  → 模型能力校验
  → Provider 专属提示词编译
  → Generation 输入快照
  → 输出自动质检
  → 人工审核与晋升

不允许仅靠自然语言写“保持人物一致”。角色、场景和道具必须通过 AssetBinding 进入生成请求。

8.3 继承、版本锁定与变更影响

资产解析优先级固定为:

text
Shot 覆盖 > SceneBlock 覆盖 > Episode 本集变体 > Project 全局默认

解析器从最高优先级开始查找有效绑定;未命中时逐级回退。所有绑定必须记录 assetIdvariantId(如有)、不可变的 versionId、适用范围与绑定原因,禁止只保存“当前最新版”指针。

  • 历史 EpisodeAssetBinding、SceneBlock 覆盖和 Shot 覆盖一经用于生成即锁定具体版本;
  • 全局母版或本集变体更新只影响未来新建的绑定,不得让既有镜头、时间线或交付静默漂移;
  • 如需采用新版本,用户必须显式执行“升级绑定”,系统展示受影响的集、场次、镜头、生成记录和时间线,并创建可审计的新绑定版本;
  • Generation 保存最终解析后的资产版本快照,保证重跑、审计和交付复现;
  • 项目全局资产适用于跨集复用,本集变体仅适用于所属 Episode,SceneBlock/Shot 覆盖只适用于声明的局部范围;跨范围复用必须创建新的显式绑定。

9. Conductor 工作流

业务视图和执行视图严格分开。用户看到制作状态,Conductor 负责技术执行。

9.1 镜头生成工作流

text
validate-shot
  → resolve-assets
  → compile-prompt
  → create-generation-record
  → submit-provider-task
  → wait-provider-result
  → persist-output-to-oss
  → probe-media
  → run-quality-check
  → update-shot-status

9.2 集级工作流

text
prepare-episode
  → dynamic-fork-shot-workflows
  → wait-approved-shots
  → generate-dialogue-and-voiceover
  → select-or-generate-bgm
  → create-edit-plan
  → render-preview
  → quality-check
  → human-approval
  → render-final

9.3 执行约束

  • Workflow Payload 只传 ID,不传二进制、大段文档和 Base64;
  • Worker 按 tenantId + taskType + businessId + requestHash 实现幂等;
  • 外部异步任务拆成提交与回调/查询,不长时间占用 Worker;
  • 每个镜头独立子工作流,支持单镜头取消、重试和切换模型;
  • 所有供应商错误转换为统一错误分类,保留原始错误和 requestId。

10. BGM、声音与音效

声音采用多轨模型:

text
Dialogue Track
Voice-over Track
Ambient Track
Sound Effect Track
Music Track
Transition Effect Track

MusicAsset 记录:

  • 来源:上传、AI 生成、平台库、第三方授权;
  • 时长、速度、调性、情绪、风格、乐器、能量曲线;
  • 主文件、伴奏、分轨、循环点;
  • 权利人、许可证、商业使用范围、授权凭证;
  • 生成模型、提示词、参数和费用。

BGM 工作流:

text
分析全剧情绪曲线
  → 划分音乐段落
  → 检索库内候选
  → 不满足时生成新音乐
  → 节奏与场景对齐
  → 人声出现时自动闪避
  → 淡入淡出与转场
  → 响度标准化

11. AI 剪辑

AI 不直接覆盖成片,而是生成 EditPlan/TimelinePatch。

TimelineSpec 至少包含:

  • 项目分辨率、帧率、比例、时长;
  • 视频、对白、旁白、BGM、音效、字幕、叠加层轨道;
  • 素材引用、入点、出点、速度、转场、音量、关键帧;
  • 版本、父版本、创建者和变更说明。

AI 剪辑职责:

  • 候选镜头评分和选择;
  • 根据剧本排序并设置入点、出点;
  • 对白、口型、字幕与画面对齐;
  • 根据情绪和节拍调整镜头长度;
  • BGM 卡点、闪避、淡入淡出和响度控制;
  • 自动生成转场、字幕样式、封面和片尾;
  • 输出 Patch,允许逐条接受、拒绝或撤销。

渲染分为代理预览和最终渲染。前端编辑代理素材,最终由 Render Worker 使用 Remotion/FFmpeg 处理源素材。

12. 飞书多企业登录

多企业场景按飞书商店应用/多租户 SaaS 设计,而不是单企业自建应用。

text
企业安装应用
  → 获取 tenant_key 和安装事件
  → 创建/更新 Tenant 与 FeishuInstallation
  → 用户 OAuth 登录
  → open_id/union_id 映射 User
  → 创建 Membership
  → 签发平台 Session

安全要求:

  • 飞书凭证、模型密钥、OSS 密钥加密保存;
  • tenant_access_token 分租户缓存并在过期前刷新;
  • 用户身份不能通过请求参数伪造 tenantId;
  • 数据库、OSS 路径、缓存 Key、任务和审计全部包含租户边界;
  • 支持平台托管凭证和企业自带凭证两种计费模式。

13. MCP 设计

MCP Server 不直接访问数据库,统一调用 NestJS Application Service。

首批工具:

text
list_projects               get_project
analyze_story               get_script
update_script               list_characters
create_character            approve_character_asset
list_scenes                 create_shots
get_shot                    generate_shot
retry_generation            get_generation_status
create_music                search_music_library
create_edit_plan            update_timeline
render_episode              get_render_status

每个调用绑定:

text
tenantId · userId · workspaceId · agentId · traceId

权限策略:

  • 查询操作按项目权限直接执行;
  • 修改操作自动创建新版本和审计记录;
  • 高成本生成受预算、并发和额度限制;
  • 批量生成、发布、删除等高风险操作要求审批;
  • MCP 返回业务对象和任务 ID,不直接返回临时供应商密钥。

14. 非功能要求

安全

  • 多租户强隔离;
  • 敏感凭证信封加密;
  • OSS 使用短期签名 URL;
  • 上传文件类型探测、病毒扫描和大小限制;
  • Agent、用户、后台任务统一审计;
  • 音色克隆保存授权证明和使用范围。

稳定性

  • Provider 限流、熔断、退避和并发配额;
  • 任务幂等、可取消、可恢复;
  • OSS 生命周期管理和中间产物清理;
  • Conductor、数据库和 Redis 具备备份恢复方案。

可观测性

每次模型调用记录:

  • 租户、项目、镜头、模型和版本;
  • 输入输出 Token/时长/分辨率;
  • 供应商 requestId;
  • 排队、执行、下载、质检耗时;
  • 费用、重试次数、成功率和质量评分;
  • 全链路 traceId。

15. 第一版验收标准

  • 一个飞书企业可以安装应用并完成成员登录;
  • 支持配置火山引擎、百炼和 OSS;
  • 能导入故事并生成可编辑、可版本化的剧本;
  • 能建立角色、场景、道具和风格资产;
  • 能生成和编辑镜头脚本;
  • 模型表单根据能力矩阵动态展示;
  • 至少跑通首帧、首尾帧和参考图视频生成;
  • 任意镜头可独立切换模型、重试和审核;
  • 支持配音、BGM 库和至少一家音乐生成服务;
  • AI 能生成可编辑时间线并渲染预览、最终成片;
  • MCP Agent 能查询项目、修改剧本、生成镜头和触发渲染;
  • 全链路能查看状态、成本、日志、版本和审计记录。

NarraCine AI Production Platform