feat: bootstrap commercial AI drama platform

This commit is contained in:
xz
2026-08-24 10:24:34 +08:00
commit ffb27d845b
100 changed files with 35314 additions and 0 deletions
+106
View File
@@ -0,0 +1,106 @@
# 商业化多组织、多工作区设计
## 目标
`ai-drama-platform` 的商业形态不是“一个剧集的生产页面”,而是一个可以私有部署、承载多个内容公司的 AI 短剧/漫剧生产中台。所有生产数据都必须从组织和工作区上下文开始,任务、资产、审片和交付都不能脱离租户边界。
本地 MVP 使用 Node 24 内置 `node:sqlite`,已经接入邮箱 + 密码登录、scrypt 密码哈希和 Bearer session。仅在显式设置 `AI_DRAMA_ALLOW_DEV_CONTEXT=1` 的本地调试场景下,才允许请求头模拟上下文;默认运行模式是 session-only。后续替换为 SSO/OIDC 时,只需要替换身份解析层,不改变业务表和 scope 查询。
## 产品层级
```text
用户 User
└── 组织 Organization(公司 / 内容厂牌 / 客户租户)
├── 组织成员 Organization Member
├── 套餐、账单、配额、策略
└── 工作区 Workspace(制作部 / 项目组 / 客户空间)
├── 工作区成员 Workspace Member
├── 项目 Project(系列 / 模板 / 客户项目)
│ ├── 季 / 集 / 剧本 / 资产锁 / 分镜
│ ├── 生成任务 / 尝试记录 / 审片 / 合规
│ └── 交付版本 / 发布渠道
└── 模型连接器、Runner、资产存储策略
```
组织解决客户和计费隔离,工作区解决团队协作隔离,项目解决内容访问和交付隔离。一个用户可以加入多个组织,在同一组织中进入多个工作区;项目默认继承工作区成员,但敏感项目可以额外配置 project member。
## 角色模型
| 作用域 | 角色 | 典型能力 |
| --- | --- | --- |
| 组织 | `org_owner` | 组织设置、成员、账单、模型策略、全项目可见 |
| 组织 | `org_admin` | 成员、工作区、模型和审计管理 |
| 工作区 | `producer` | 建项目、排队、批次、成本、交付审批 |
| 工作区 | `writer` | 剧本、分集、对白、镜头草稿 |
| 工作区 | `art_director` | 角色/场景/道具锁、参考图、prompt、连续性 |
| 工作区 | `voice_editor` | 声线锁、TTS、字幕、ASR 对齐 |
| 工作区 | `reviewer` | QA、审片意见、通过/驳回 |
| 项目 | `project_editor` | 指定项目内容编辑 |
| 项目 | `project_viewer` | 只读查看、下载被授权的交付物 |
权限不是写死在前端。API 根据 `organization_members`、`workspace_members`、`project_members` 合并角色权限,并在每个项目、任务、模型、交付接口执行检查。前端显示权限矩阵只是帮助用户理解,不能作为安全边界。
## 数据表
### 身份和租户
- `users`:用户身份、显示名、邮箱、状态。
- `organizations`:租户、slug、部署模式、所有者。
- `organization_members`:用户加入组织的角色、邀请状态。
- `workspaces`:组织下的生产空间。
- `workspace_members`:工作区角色。
- `projects`:工作区下的系列、模板或客户项目。
- `project_members`:项目级额外授权。
- `invitations`:待接受邀请,不把邀请误当作已加入成员。
### 生产和中台
- `series`、`seasons`、`episodes`:剧集结构。
- `assets`、`asset_versions`:角色、场景、道具、参考图、首尾帧、音频和视频资产版本。
- `shots`:分镜、首帧/末帧、镜头状态和 continuity lock 引用。
- `generation_jobs`、`job_attempts`:任务、重试、取消、执行器和输出。
- `reviews`、`review_comments`:审片 lane、QA gate、意见和决策。
- `model_connectors`:自有模型平台、HTTP JSON、OpenAI-compatible、ComfyUI optional adapter。
- `deliveries`:剪辑清单、字幕、封面、master 和发布渠道。
### 商业治理
- `billing_accounts`:套餐、席位、存储、片段额度和云连接策略。
- `quota_allocations`、`usage_events`:配额和按任务的用量计量。
- `compliance_records`:原创/IP、肖像权、声音权、参考素材来源、单画面检查。
- `audit_logs`:谁在什么组织/工作区/项目中做了什么操作,以及结果和元数据。
## 请求上下文
本地调试 bypass 使用以下请求头,缺省时使用种子账号和种子工作区;真实浏览器请求必须携带登录后的 Bearer session:
```text
x-user-id: u-owner
x-organization-id: org-studio-lab
x-workspace-id: ws-local-aidrama
x-project-id: thunder-mouth
```
真实部署必须由登录会话或网关注入用户身份,禁止让客户端直接提交任意组织 ID 后绕过 membership 检查。API 的最小检查顺序是:
1. 用户存在且状态为 active。
2. 用户是组织成员,且组织状态可用。
3. 工作区属于当前组织,用户拥有工作区 membership。
4. 项目属于当前工作区,用户拥有项目 membership 或工作区角色允许继承访问。
5. 当前角色拥有该动作所需权限。
6. 记录 audit log,涉及生成、下载、模型调用和导出时记录 usage event。
## AI 短剧生产的业务硬门
这些约束属于组织策略或项目策略,不能只放在 prompt 文本里:
- `single_frame_only`:每个图片生成任务只能输出一张连续完整画面,拒绝 split-screen、漫画多格、storyboard、collage、contact sheet。
- `continuity_lock_required`:角色、服装、道具、场景、天气、镜头角度、声线必须有 lock 和 ledger。
- `actual_last_frame_chain`:后续视频优先引用上一段真实末帧,不能只引用描述性文本。
- `voice_lock_required`:对白使用固定声线;MiniMax H3 随机原生声音不作为最终角色声线。
- `mouth_safe_shot_policy`:口型不稳定时优先侧脸、背影、低头、远景、反应镜头或环境插入镜头。
- `local_runner_only`:默认只允许本地/自有模型;云端节点必须显式审批并留下审计记录。
## MVP 与后续
当前可运行 MVP 先交付真实的租户、成员、权限、项目 scope、邀请、审计、用量和模型注册接口,生产资产表和任务表已经预留。下一阶段可以把认证、Redis/BullMQ 队列、对象存储、ffmpeg 合成和真实 Runner 接入,不需要重做组织模型。