# AI 视频生成工作流 **Repository Path**: hadlooop/videoflow-ai ## Basic Information - **Project Name**: AI 视频生成工作流 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-10-09 - **Last Updated**: 2026-10-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # VideoFlow AI 短视频生成平台 从**创意输入 → 准备镜头 → 人物设定 → 视频生成 → 音频与口型同步 → 字幕 → 合成导出**的一体化短视频生产平台。 实现依据 [`docs/VideoFlow_AI_设计方案.md`](docs/VideoFlow_AI_设计方案.md)。 ## 技术栈 | 层 | 技术 | |---|---| | 前端 | Vue 3 + TypeScript + Vite + Element Plus + Pinia | | API | Python 3.12+ / FastAPI / Pydantic / SQLAlchemy 2.0 (async) | | LLM 编排 | LangChain + OpenAI 兼容接口(DeepSeek 官方 / New API 中转,无可信密钥时使用确定性本地规划器) | | 媒体 Provider | New API 中转站(视频 / 图片)+ 演示 Provider | | 异步执行 | 数据库任务表 + 进程内 Worker(可独立运行) | | 数据层 | 开发 SQLite(aiosqlite),生产可切 PostgreSQL + Alembic | | 媒体处理 | FFmpeg / ffprobe(拼接、混音、字幕、质检) | | 文件存储 | 本地目录(key 布局兼容 OSS/S3) | ## 快速开始 ### 后端 ```bash cd backend uv sync --extra dev cp .env.example .env # 可选,见下方"演示模式" uv run uvicorn app.main:app --reload --port 20010 ``` - API 前缀:`http://localhost:20010/api/v1` - 交互文档:`http://localhost:20010/docs` - 健康检查:`http://localhost:20010/health` ### 前端 ```bash cd frontend npm install npm run dev # http://localhost:5173 ``` Vite 已配置 `/api` 与 `/media` 代理到 `http://localhost:20010`。 ### 登录与账号(JWT) 系统**不开放注册**:账号只能在服务器上用脚本创建,登录后才能调 `/api/v1` 下的业务接口。 ```bash # 仓库根目录:创建第一个账号(会提示输入两次密码) make create-user USERNAME=admin # 等价写法(在 backend/ 下) uv run python scripts/create_user.py -u admin # 新建,交互式输入密码 uv run python scripts/create_user.py -u admin -p 123456 # 直接指定密码 uv run python scripts/create_user.py -u admin --reset # 重置密码 uv run python scripts/create_user.py -u admin --disable # 停用(已签发的令牌立即失效) uv run python scripts/create_user.py -u admin --delete # 删除账号 uv run python scripts/create_user.py --list # 列出账号 ``` - **令牌策略**:access token **10 分钟**(`ACCESS_TOKEN_MINUTES`)、refresh token 7 天 (`REFRESH_TOKEN_DAYS`),都是 HS256 无状态 JWT。前端在到期前 60 秒用 refresh token **自动续期**,撞上 401 也会自动刷新并重放原请求,正常使用不会被打断;refresh token 也过期 / 账号被停用时才回登录页。 - **接口**:`POST /api/v1/auth/login`(返回令牌对 + 账号信息)、`POST /api/v1/auth/refresh`、 `GET /api/v1/auth/me`、`POST /api/v1/auth/logout`(JWT 无状态,退出即前端丢弃令牌)。 - **鉴权方式**:`Authorization: Bearer `;任务进度 SSE(`EventSource` 不能改请求头) 用 `?token=`。 - **签名密钥**:`.env` 里的 `JWT_SECRET`。留空时用内置开发密钥(启动会打警告), 生产环境务必配一个随机值,否则重启 / 换机器都等于共享密钥。 - 账号口令用 PBKDF2-HMAC-SHA256(每账号随机盐,24 万次迭代)存储,`app_user` 表里只有散列。 - 登录只作用于 `/api/v1` 与 `/media` 之外的静态文件;`/media/...` 上的成片、参考图仍是直链 (`