产品与总体架构设计
- 状态:初稿
- 更新时间: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 主生产链路
内容上传
→ 原文解析
→ 故事圣经
→ 人物/关系/场景/道具
→ 分集大纲
→ 可编辑剧本
→ 场次与节拍
→ 镜头脚本
→ 资产准备与审核
→ 图片/视频/声音/BGM 生成
→ 镜头审核
→ AI 剪辑计划
→ 可编辑时间线
→ 渲染与质检
→ 成片和素材包交付4. 技术架构
┌─────────────────────────────────────────────────────────┐
│ 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 | 生产流程、人物关系、镜头依赖 |
| API | NestJS | 模块化领域服务和统一 TypeScript 技术栈 |
| ORM | Prisma | PostgreSQL 数据模型与迁移 |
| 编排 | Conductor | 长任务、并行、重试、等待、人工审批 |
| 缓存 | Redis | 限流、幂等锁、临时状态与事件分发 |
| 媒体存储 | OSS | 原始素材、中间结果、代理文件和成片 |
| 媒体工具 | FFmpeg/FFprobe | 探测、转码、抽帧、混音、封装与质检 |
| 合成 | Remotion + FFmpeg | TypeScript 时间线与可靠服务端渲染 |
| Agent | MCP | 对外提供结构化、授权后的平台能力 |
| 可观测性 | OpenTelemetry + Prometheus + Grafana | 任务链路、模型调用、成本与异常追踪 |
6. 领域模型
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/纯文本导入导出。基本节点:
Project → Season → Episode → SceneBlock → Beat → Action/Dialogue → Shot编辑能力:
- 自动保存、版本历史、差异比较和回滚;
- 段落锁定,锁定内容不允许 Agent 自动修改;
- AI 改写只生成 Patch 或新版本,禁止静默覆盖;
- 人物、场景、道具使用实体引用,而不是纯文本名称;
- 从场次生成镜头后保持双向引用;
- 支持评论、审核、通过和驳回。
7.2 ShotSpec
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 一致性控制
已审核资产
→ ShotSpec 显式绑定
→ 模型能力校验
→ Provider 专属提示词编译
→ Generation 输入快照
→ 输出自动质检
→ 人工审核与晋升不允许仅靠自然语言写“保持人物一致”。角色、场景和道具必须通过 AssetBinding 进入生成请求。
8.3 继承、版本锁定与变更影响
资产解析优先级固定为:
Shot 覆盖 > SceneBlock 覆盖 > Episode 本集变体 > Project 全局默认解析器从最高优先级开始查找有效绑定;未命中时逐级回退。所有绑定必须记录 assetId、variantId(如有)、不可变的 versionId、适用范围与绑定原因,禁止只保存“当前最新版”指针。
- 历史 EpisodeAssetBinding、SceneBlock 覆盖和 Shot 覆盖一经用于生成即锁定具体版本;
- 全局母版或本集变体更新只影响未来新建的绑定,不得让既有镜头、时间线或交付静默漂移;
- 如需采用新版本,用户必须显式执行“升级绑定”,系统展示受影响的集、场次、镜头、生成记录和时间线,并创建可审计的新绑定版本;
- Generation 保存最终解析后的资产版本快照,保证重跑、审计和交付复现;
- 项目全局资产适用于跨集复用,本集变体仅适用于所属 Episode,SceneBlock/Shot 覆盖只适用于声明的局部范围;跨范围复用必须创建新的显式绑定。
9. Conductor 工作流
业务视图和执行视图严格分开。用户看到制作状态,Conductor 负责技术执行。
9.1 镜头生成工作流
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-status9.2 集级工作流
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-final9.3 执行约束
- Workflow Payload 只传 ID,不传二进制、大段文档和 Base64;
- Worker 按 tenantId + taskType + businessId + requestHash 实现幂等;
- 外部异步任务拆成提交与回调/查询,不长时间占用 Worker;
- 每个镜头独立子工作流,支持单镜头取消、重试和切换模型;
- 所有供应商错误转换为统一错误分类,保留原始错误和 requestId。
10. BGM、声音与音效
声音采用多轨模型:
Dialogue Track
Voice-over Track
Ambient Track
Sound Effect Track
Music Track
Transition Effect TrackMusicAsset 记录:
- 来源:上传、AI 生成、平台库、第三方授权;
- 时长、速度、调性、情绪、风格、乐器、能量曲线;
- 主文件、伴奏、分轨、循环点;
- 权利人、许可证、商业使用范围、授权凭证;
- 生成模型、提示词、参数和费用。
BGM 工作流:
分析全剧情绪曲线
→ 划分音乐段落
→ 检索库内候选
→ 不满足时生成新音乐
→ 节奏与场景对齐
→ 人声出现时自动闪避
→ 淡入淡出与转场
→ 响度标准化11. AI 剪辑
AI 不直接覆盖成片,而是生成 EditPlan/TimelinePatch。
TimelineSpec 至少包含:
- 项目分辨率、帧率、比例、时长;
- 视频、对白、旁白、BGM、音效、字幕、叠加层轨道;
- 素材引用、入点、出点、速度、转场、音量、关键帧;
- 版本、父版本、创建者和变更说明。
AI 剪辑职责:
- 候选镜头评分和选择;
- 根据剧本排序并设置入点、出点;
- 对白、口型、字幕与画面对齐;
- 根据情绪和节拍调整镜头长度;
- BGM 卡点、闪避、淡入淡出和响度控制;
- 自动生成转场、字幕样式、封面和片尾;
- 输出 Patch,允许逐条接受、拒绝或撤销。
渲染分为代理预览和最终渲染。前端编辑代理素材,最终由 Render Worker 使用 Remotion/FFmpeg 处理源素材。
12. 飞书多企业登录
多企业场景按飞书商店应用/多租户 SaaS 设计,而不是单企业自建应用。
企业安装应用
→ 获取 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。
首批工具:
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每个调用绑定:
tenantId · userId · workspaceId · agentId · traceId权限策略:
- 查询操作按项目权限直接执行;
- 修改操作自动创建新版本和审计记录;
- 高成本生成受预算、并发和额度限制;
- 批量生成、发布、删除等高风险操作要求审批;
- MCP 返回业务对象和任务 ID,不直接返回临时供应商密钥。
14. 非功能要求
安全
- 多租户强隔离;
- 敏感凭证信封加密;
- OSS 使用短期签名 URL;
- 上传文件类型探测、病毒扫描和大小限制;
- Agent、用户、后台任务统一审计;
- 音色克隆保存授权证明和使用范围。
稳定性
- Provider 限流、熔断、退避和并发配额;
- 任务幂等、可取消、可恢复;
- OSS 生命周期管理和中间产物清理;
- Conductor、数据库和 Redis 具备备份恢复方案。
可观测性
每次模型调用记录:
- 租户、项目、镜头、模型和版本;
- 输入输出 Token/时长/分辨率;
- 供应商 requestId;
- 排队、执行、下载、质检耗时;
- 费用、重试次数、成功率和质量评分;
- 全链路 traceId。
15. 第一版验收标准
- 一个飞书企业可以安装应用并完成成员登录;
- 支持配置火山引擎、百炼和 OSS;
- 能导入故事并生成可编辑、可版本化的剧本;
- 能建立角色、场景、道具和风格资产;
- 能生成和编辑镜头脚本;
- 模型表单根据能力矩阵动态展示;
- 至少跑通首帧、首尾帧和参考图视频生成;
- 任意镜头可独立切换模型、重试和审核;
- 支持配音、BGM 库和至少一家音乐生成服务;
- AI 能生成可编辑时间线并渲染预览、最终成片;
- MCP Agent 能查询项目、修改剧本、生成镜头和触发渲染;
- 全链路能查看状态、成本、日志、版本和审计记录。