面向短视频自动生产场景的智能生成系统。系统以大语言模型为核心决策中枢,以多Agent机制完成复杂任务拆解与协同,以RAG机制实施内容准确性。
- 用户输入层: 接收视频主题、类型、风格、时长等需求
- 任务规划层: 智能规划任务执行步骤和Agent调度
- RAG知识增强: 基于向量检索的知识补充
- 多Agent执行: 规划、检索、脚本、分镜、多模态、合成Agent
- 结果输出: 脚本、分镜表、配音音频、字幕文件
- 数据库持久化: 使用 SQLAlchemy 持久化用户和任务
- 认证基础设施: 提供注册、登录、Bearer Token 鉴权
- 存储抽象层: 支持本地存储,可扩展到 S3 / OSS / R2
- 后台任务队列: 任务入库排队,worker 异步执行,支持重试与重启恢复
- LLM: MiniMax M2.7 模型
- TTS: MiniMax 语音合成 (speech-02-hd)
- 视频合成: 桩实现(待接入)
python3 -m pip install -r requirements.txtpython3 main.py访问 http://localhost:8000 查看Web界面
HOST=0.0.0.0 PORT=8000 uvicorn main:app- 任务不再依赖
data/tasks/*.json作为主存储,默认写入数据库 - 已提供
/api/auth/register、/api/auth/login、/api/auth/me - 默认使用本地 SQLite,可通过
DATABASE_URL切换到 PostgreSQL /api/generate已改为真正的排队执行,不再依赖单次 HTTP 请求生命周期- 服务启动后会自动拉起内嵌 worker;也可以单独运行
python3 worker.py
curl -X POST http://localhost:8000/api/generate \
-H "Content-Type: application/json" \
-d '{
"topic": "RAG是什么",
"video_type": "knowledge",
"style": "简洁易懂",
"duration": 30,
"audience": "大学生"
}'video_generator/
├── config/ # 配置模块(包含MiniMax API配置)
├── core/ # 核心模块
│ ├── agents/ # 多Agent实现
│ │ ├── planner.py # 规划Agent
│ │ ├── retriever.py # 检索Agent
│ │ ├── script.py # 脚本Agent(调用LLM)
│ │ ├── storyboard.py # 分镜Agent
│ │ ├── multimodal.py # 多模态Agent(调用TTS)
│ │ └── synthesizer.py # 合成Agent
│ ├── llm/ # LLM客户端(MiniMax)
│ ├── tts/ # TTS客户端(MiniMax)
│ ├── rag/ # RAG知识增强
│ ├── pipeline/ # 流程编排
│ └── models/ # 数据模型
├── api/ # API路由
├── web/ # Web前端
└── main.py # 入口文件
| Agent | 功能 | 调用服务 |
|---|---|---|
| PlannerAgent | 理解需求,输出整体任务计划 | - |
| RetrieverAgent | 从向量库检索相关知识片段 | - |
| ScriptAgent | 生成短视频脚本文案 | MiniMax LLM |
| StoryboardAgent | 拆分镜头,生成画面描述 | - |
| MultimodalAgent | 生成配音、字幕 | MiniMax TTS |
| SynthesizerAgent | 合并音视频,输出最终成品 | 桩实现 |
| 端点 | 方法 | 说明 |
|---|---|---|
/ |
GET | Web界面 |
/api/generate |
POST | 提交视频生成任务 |
/api/tasks/{task_id} |
GET | 查询任务状态 |
/api/tasks/{task_id}/result |
GET | 获取任务结果 |
/api/tasks |
GET | 列出所有任务 |
/api/queue/status |
GET | 查看队列和 worker 状态 |
/api/health |
GET | 健康检查 |
MiniMax API配置位于 config/__init__.py:
MINIMAX_API_KEY = "your-api-key"
APIMART_API_KEY = "your-api-key"
HOST = "0.0.0.0"
PORT = 8000
DATABASE_URL = "sqlite:///./data/app.db"
AUTH_SECRET_KEY = "replace-me"
STORAGE_BACKEND = "local"推荐直接复制 .env.example 为 .env 后填写。
DATABASE_URL:推荐 PostgreSQL,例如postgresql+psycopg://user:pass@host:5432/video_generatorAUTH_SECRET_KEY:必须替换为随机长字符串STORAGE_BACKEND=s3:当你需要把视频、字幕放到对象存储时启用QUEUE_ENABLE_EMBEDDED_WORKER=false:当你准备独立部署 worker 进程时关闭内嵌 worker- 如需 PostgreSQL 驱动,请额外安装:
python3 -m pip install "psycopg[binary]>=3.1.18" - 如需 S3 / OSS / R2 存储,请额外安装:
python3 -m pip install "boto3>=1.34.0"
构建镜像:
docker build -t video-generator .启动容器:
docker run -d \
--name video-generator \
-p 8000:8000 \
--env-file .env \
-e PORT=8000 \
video-generator如果你想把 API 和 worker 分开部署,可以再启动一个独立 worker 容器或进程:
python3 worker.py健康检查:
curl http://localhost:8000/api/healthgit clone <your-repo-url>
cd video_generator
python3 -m venv .venv
source .venv/bin/activate
python3 -m pip install -r requirements.txt
cp .env.example .env
# 填入 MINIMAX_API_KEY 和 APIMART_API_KEY
HOST=0.0.0.0 PORT=8000 uvicorn main:app如果你使用 systemd、supervisor、Railway、Render 或其他 PaaS,也可以直接复用:
uvicorn main:app --host 0.0.0.0 --port $PORT单独运行 worker:
QUEUE_ENABLE_EMBEDDED_WORKER=false python3 worker.py- 已配置
MINIMAX_API_KEY - 已配置
APIMART_API_KEY - 已配置
AUTH_SECRET_KEY - 对外开放
PORT - 已确认
DATABASE_URL可用 - 已确认 worker 进程已启动(或启用了内嵌 worker)
- 若需要视频拼接,目标环境建议安装
ffmpeg - 生产环境建议使用域名反代(Nginx / Caddy)
这个项目已经可以直接走 Railway 的 Dockerfile 部署。
推荐做法:
- 把代码推到 GitHub
- 在 Railway 新建 Project 并选择
Deploy from GitHub repo - 绑定一个 PostgreSQL 服务
- 在 Web Service 中配置环境变量:
MINIMAX_API_KEYAPIMART_API_KEYAUTH_SECRET_KEYDATABASE_URL(可直接使用 Railway 注入值)STORAGE_BACKEND=local(演示环境可先这样,正式环境建议改为s3)
- 部署完成后访问
/api/health检查状态
说明:
- 项目已兼容 Railway 常见的
postgres://或postgresql://数据库连接串 - 当前默认启用内嵌 worker,因此一个 Web Service 就能跑通提交与执行链路
- 若后续任务量增大,建议拆成两个服务:一个 Web,一个 Worker
outputs/在 Railway 属于临时文件系统,正式环境建议接入 S3、R2 或 OSS 保存视频与字幕
当前版本输出:
- 脚本文案: 完整的短视频脚本文案
- 分镜表: 每个镜头的画面描述、时长、转场
- 配音音频: MiniMax TTS生成的语音文件(MP3)
- 字幕文件: SRT格式的字幕文件
视频合成待接入外部服务(如Runway、Pika等)。