f2434e725d
- Add plan/2026-05-18-comfyui-video-assistant-saas.md (gpt-5.5 generated) - Add src/server/ and src/shared/ type definitions - Update comfyui routes and api_key auth - Remove old metapi docs, deploy/k3s, and deprecated configs
341 lines
9.9 KiB
Markdown
341 lines
9.9 KiB
Markdown
# 内置 ComfyUI 视频助手 + SaaS 多租户方案
|
||
|
||
> 生成: gpt-5.5 via api.boos.lat | 2026-05-18
|
||
|
||
---
|
||
|
||
## 1. 数据表设计 (SQLite migrations)
|
||
|
||
### 1.1 `tenants` 租户
|
||
|
||
```sql
|
||
CREATE TABLE tenants (
|
||
id TEXT PRIMARY KEY,
|
||
name TEXT NOT NULL,
|
||
slug TEXT UNIQUE NOT NULL,
|
||
plan TEXT NOT NULL DEFAULT 'free',
|
||
status TEXT NOT NULL DEFAULT 'active',
|
||
owner_user_id TEXT NOT NULL,
|
||
settings TEXT NOT NULL DEFAULT '{}',
|
||
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
||
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
||
);
|
||
```
|
||
|
||
### 1.2 `tenant_members` 租户成员
|
||
|
||
```sql
|
||
CREATE TABLE tenant_members (
|
||
id TEXT PRIMARY KEY,
|
||
tenant_id TEXT NOT NULL REFERENCES tenants(id) ON DELETE CASCADE,
|
||
user_id TEXT NOT NULL,
|
||
role TEXT NOT NULL DEFAULT 'member',
|
||
status TEXT NOT NULL DEFAULT 'active',
|
||
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
||
UNIQUE(tenant_id, user_id)
|
||
);
|
||
```
|
||
|
||
### 1.3 `subscriptions` 订阅与额度
|
||
|
||
```sql
|
||
CREATE TABLE subscriptions (
|
||
id TEXT PRIMARY KEY,
|
||
tenant_id TEXT NOT NULL REFERENCES tenants(id) ON DELETE CASCADE,
|
||
plan TEXT NOT NULL,
|
||
status TEXT NOT NULL DEFAULT 'active',
|
||
monthly_generations_limit INTEGER NOT NULL DEFAULT 100,
|
||
monthly_video_seconds_limit INTEGER NOT NULL DEFAULT 300,
|
||
storage_bytes_limit INTEGER NOT NULL DEFAULT 5368709120,
|
||
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
||
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
||
);
|
||
```
|
||
|
||
### 1.4 `usage_counters` 用量统计
|
||
|
||
```sql
|
||
CREATE TABLE usage_counters (
|
||
id TEXT PRIMARY KEY,
|
||
tenant_id TEXT NOT NULL REFERENCES tenants(id) ON DELETE CASCADE,
|
||
period TEXT NOT NULL,
|
||
generations_used INTEGER NOT NULL DEFAULT 0,
|
||
video_seconds_used INTEGER NOT NULL DEFAULT 0,
|
||
storage_bytes_used INTEGER NOT NULL DEFAULT 0,
|
||
ai_tokens_used INTEGER NOT NULL DEFAULT 0,
|
||
updated_at TEXT NOT NULL DEFAULT (datetime('now')),
|
||
UNIQUE(tenant_id, period)
|
||
);
|
||
```
|
||
|
||
### 1.5 `comfy_workflows` 工作流模板
|
||
|
||
```sql
|
||
CREATE TABLE comfy_workflows (
|
||
id TEXT PRIMARY KEY,
|
||
tenant_id TEXT REFERENCES tenants(id) ON DELETE CASCADE,
|
||
name TEXT NOT NULL,
|
||
description TEXT,
|
||
type TEXT NOT NULL DEFAULT 'video',
|
||
visibility TEXT NOT NULL DEFAULT 'private',
|
||
workflow_json TEXT NOT NULL,
|
||
input_schema TEXT NOT NULL DEFAULT '{}',
|
||
version INTEGER NOT NULL DEFAULT 1,
|
||
is_default INTEGER NOT NULL DEFAULT 0,
|
||
created_by TEXT,
|
||
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
||
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
||
);
|
||
```
|
||
|
||
### 1.6 `video_jobs` 视频任务
|
||
|
||
```sql
|
||
CREATE TABLE video_jobs (
|
||
id TEXT PRIMARY KEY,
|
||
tenant_id TEXT NOT NULL REFERENCES tenants(id) ON DELETE CASCADE,
|
||
user_id TEXT,
|
||
workflow_id TEXT REFERENCES comfy_workflows(id),
|
||
status TEXT NOT NULL DEFAULT 'queued',
|
||
priority INTEGER NOT NULL DEFAULT 100,
|
||
prompt TEXT,
|
||
negative_prompt TEXT,
|
||
params TEXT NOT NULL DEFAULT '{}',
|
||
comfy_prompt_id TEXT,
|
||
progress REAL NOT NULL DEFAULT 0,
|
||
error_message TEXT,
|
||
result_asset_id TEXT,
|
||
estimated_video_seconds INTEGER DEFAULT 0,
|
||
actual_video_seconds INTEGER DEFAULT 0,
|
||
started_at TEXT,
|
||
completed_at TEXT,
|
||
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
||
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
||
);
|
||
```
|
||
|
||
### 1.7 `assets` 文件资产
|
||
|
||
```sql
|
||
CREATE TABLE assets (
|
||
id TEXT PRIMARY KEY,
|
||
tenant_id TEXT NOT NULL REFERENCES tenants(id) ON DELETE CASCADE,
|
||
user_id TEXT,
|
||
job_id TEXT REFERENCES video_jobs(id) ON DELETE SET NULL,
|
||
type TEXT NOT NULL,
|
||
mime_type TEXT,
|
||
file_name TEXT,
|
||
storage_path TEXT NOT NULL,
|
||
public_url TEXT,
|
||
size_bytes INTEGER NOT NULL DEFAULT 0,
|
||
metadata TEXT NOT NULL DEFAULT '{}',
|
||
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
||
);
|
||
```
|
||
|
||
---
|
||
|
||
## 2. API 路由设计
|
||
|
||
### 租户管理
|
||
```
|
||
POST /api/tenants → 创建租户
|
||
GET /api/tenants → 我的租户列表
|
||
GET /api/tenants/:id → 租户详情
|
||
PATCH /api/tenants/:id → 更新租户
|
||
```
|
||
|
||
### 成员管理
|
||
```
|
||
GET /api/tenants/:id/members → 成员列表
|
||
POST /api/tenants/:id/members/invite → 邀请成员
|
||
DELETE /api/tenants/:id/members/:uid → 移除成员
|
||
PATCH /api/tenants/:id/members/:uid/role → 修改角色
|
||
```
|
||
|
||
### 视频助手
|
||
```
|
||
POST /api/tenants/:id/video/analyze → 解析脚本(角色/场景/对话)
|
||
POST /api/tenants/:id/video/generate → 生成视频任务
|
||
GET /api/tenants/:id/video/jobs → 任务列表
|
||
GET /api/tenants/:id/video/jobs/:jid → 任务详情
|
||
POST /api/tenants/:id/video/jobs/:jid/cancel → 取消任务
|
||
GET /api/tenants/:id/video/jobs/:jid/events → SSE 进度
|
||
```
|
||
|
||
### ComfyUI 工作流
|
||
```
|
||
GET /api/tenants/:id/workflows → 工作流模板列表
|
||
POST /api/tenants/:id/workflows → 创建模板
|
||
GET /api/tenants/:id/workflows/:wid → 模板详情
|
||
DELETE /api/tenants/:id/workflows/:wid → 删除模板
|
||
```
|
||
|
||
### 资产生成(ai Helper)
|
||
```
|
||
POST /api/tenants/:id/ai/character → gpt-image-2 生成角色四视图
|
||
POST /api/tenants/:id/ai/scene → 生成场景图
|
||
POST /api/tenants/:id/ai/tts → TTS 语音
|
||
POST /api/tenants/:id/ai/prompt-optimize → 优化视频 prompt
|
||
```
|
||
|
||
### 用量与订阅
|
||
```
|
||
GET /api/tenants/:id/usage → 当前用量
|
||
GET /api/tenants/:id/subscription → 订阅信息
|
||
```
|
||
|
||
---
|
||
|
||
## 3. 前端页面/组件结构
|
||
|
||
```
|
||
src/web/pages/
|
||
├── VideoAssistant.tsx ← 视频助手主页面(prompt→生成→预览)
|
||
├── VideoJobs.tsx ← 历史任务列表
|
||
├── WorkflowLibrary.tsx ← 工作流模板库
|
||
├── TenantSettings.tsx ← 租户设置
|
||
└── TenantMembers.tsx ← 成员管理
|
||
|
||
src/web/components/
|
||
├── video/
|
||
│ ├── ScriptEditor.tsx ← 自然语言脚本编辑
|
||
│ ├── ScriptPreview.tsx ← 脚本解析预览(角色/场景/对话)
|
||
│ ├── CharacterCard.tsx ← 角色四视图卡片
|
||
│ ├── SceneCard.tsx ← 场景图卡片
|
||
│ ├── TTSPlayer.tsx ← TTS 语音播放
|
||
│ ├── WorkflowExport.tsx ← ComfyUI 工作流导出
|
||
│ └── VideoPlayer.tsx ← 视频播放/下载
|
||
├── tenant/
|
||
│ ├── TenantSwitcher.tsx ← 租户切换
|
||
│ ├── MemberList.tsx ← 成员列表
|
||
│ ├── InviteDialog.tsx ← 邀请对话框
|
||
│ └── UsageQuota.tsx ← 用量/配额显示
|
||
```
|
||
|
||
---
|
||
|
||
## 4. 核心业务流程
|
||
|
||
### 注册 → 创作 → 导出
|
||
|
||
```
|
||
1. 注册/登录
|
||
2. 自动创建个人租户(或个人空间)
|
||
3. 进入视频助手页面
|
||
4. 输入自然语言脚本
|
||
5. 系统解析 → 提取角色/场景/对话
|
||
6. 自动调用 AI 生成:
|
||
- 【CHARACTER】→ gpt-image-2 四视图
|
||
- 【SCENE】 → 场景图
|
||
- 【TTS】 → 语音
|
||
- 【WORKFLOW】 → ComfyUI 工作流 JSON
|
||
7. 预览所有生成内容
|
||
8. 导出/下载/提交 ComfyUI 执行
|
||
9. 视频生成 → 预览 → 下载
|
||
|
||
如需协作: → 创建组织 → 邀请成员 → 设置角色
|
||
```
|
||
|
||
### 租户管理流程
|
||
|
||
```
|
||
创建组织
|
||
→ 成为 owner
|
||
→ 可创建 API Key
|
||
→ 可邀请成员(邮箱/链接)
|
||
→ 角色: owner / admin / member
|
||
→ 每个成员有独立用量跟踪
|
||
|
||
套餐限制:
|
||
free: 50 次/月, 5GB 存储, 基础功能
|
||
pro: 500 次/月, 50GB, 全功能+更高配额
|
||
custom: 定制
|
||
```
|
||
|
||
---
|
||
|
||
## 5. 文件变更清单
|
||
|
||
### 新增文件
|
||
|
||
**后端 Rust:**
|
||
```
|
||
src/routes/tenants/mod.rs → 租户 CRUD
|
||
src/routes/tenants/{handlers,types}.rs
|
||
src/routes/video_jobs/ → 视频任务管理
|
||
src/routes/video_jobs/{handlers,sse}.rs
|
||
src/routes/ai_assist.rs → AI 辅助生成(角色/场景/TTS/prompt)
|
||
src/routes/subscriptions.rs → 订阅/用量
|
||
src/services/tenant_service.rs → 租户业务逻辑
|
||
src/services/video_service.rs → 视频任务调度
|
||
src/services/usage_service.rs → 用量统计
|
||
src/services/comfy_client.rs → ComfyUI API 客户端
|
||
src/workers/video_worker.rs → 后台视频任务 Worker
|
||
src/middleware/tenant_context.rs → 租户上下文中间件
|
||
migrations/0010_tenants.sql
|
||
migrations/0011_tenant_members.sql
|
||
migrations/0012_subscriptions.sql
|
||
migrations/0013_usage_counters.sql
|
||
migrations/0014_comfy_workflows.sql
|
||
migrations/0015_video_jobs.sql
|
||
migrations/0016_assets.sql
|
||
```
|
||
|
||
**前端:**
|
||
```
|
||
src/web/pages/VideoAssistant.tsx
|
||
src/web/pages/VideoJobs.tsx
|
||
src/web/pages/WorkflowLibrary.tsx
|
||
src/web/pages/TenantSettings.tsx
|
||
src/web/pages/TenantMembers.tsx
|
||
src/web/components/video/*.tsx
|
||
src/web/components/tenant/*.tsx
|
||
src/web/hooks/useVideoJobs.ts
|
||
src/web/hooks/useTenant.ts
|
||
src/web/hooks/useAssets.ts
|
||
src/web/hooks/useUsage.ts
|
||
```
|
||
|
||
### 修改文件
|
||
|
||
```
|
||
src/routes/mod.rs → 注册新路由
|
||
src/web/App.tsx → 添加导航项和路由
|
||
src/routes/video_agent.rs → 增强现有 Agent SSE
|
||
src/services/mod.rs → 注册新服务
|
||
src/config.rs → 添加 ComfyUI/套餐配置
|
||
src/main.rs → 注册 Worker
|
||
src/db/mod.rs → 新增表类型
|
||
```
|
||
|
||
---
|
||
|
||
## 6. 实施步骤(按优先级)
|
||
|
||
### P0 - 基础链路
|
||
1. migrations: tenants + video_jobs + assets 三张核心表
|
||
2. 租户上下文中间件
|
||
3. 视频助手 Agent SSE 增强 → 脚本解析 + AI 生成调用
|
||
4. 前端 VideoAssistant 页面(脚本输入→解析→预览→导出)
|
||
5. ComfyUI client → 提交 prompt + 获取结果
|
||
|
||
### P1 - 多租户
|
||
6. 租户 CRUD + 成员管理 + 邀请
|
||
7. 资源 tenant_id 隔离
|
||
8. 用量统计 + 套餐限制
|
||
9. API Key 管理
|
||
10. 顶栏租户切换 + 用量显示
|
||
|
||
### P2 - 生产增强
|
||
11. SSE 实时进度
|
||
12. Worker 后台任务队列
|
||
13. 视频任务历史 + 重试
|
||
14. ComfyUI 工作流模板库
|
||
15. AI prompt 优化(调用 gpt-5.5)
|
||
|
||
### P3 - 商业化
|
||
16. 订阅管理(Stripe/内部)
|
||
17. 多 ComfyUI 节点调度
|
||
18. 对象存储集成
|