dubaif5/sora2api
0
1---2title: Sora2API3emoji: 🎬4colorFrom: blue5colorTo: indigo6sdk: docker7pinned: false8---9 10# Sora2API11 12<div align="center">13 14[](LICENSE)15[](https://www.python.org/)16[](https://fastapi.tiangolo.com/)17[](https://www.docker.com/)18 19**一个功能完整的 OpenAI 兼容 API 服务,为 Sora 提供统一的接口**20 21</div>22 23---24 25## 📋 目录26 27- [功能特性](#功能特性)28- [快速开始](#快速开始)29- [使用指南](#使用指南)30 - [快速参考](#快速参考)31 - [管理后台](#管理后台)32 - [API 调用](#api-调用)33 - [视频角色功能](#视频角色功能)34- [常见问题](#常见问题)35- [许可证](#许可证)36 37---38 39## ✨ 功能特性40 41### 核心功能42- 🎨 **文生图** - 根据文本描述生成图片43- 🖼️ **图生图** - 基于上传的图片进行创意变换44- 🎬 **文生视频** - 根据文本描述生成视频45- 🎥 **图生视频** - 基于图片生成相关视频46- 📊 **多尺寸支持** - 横屏、竖屏等多种规格47- 🎭 **视频角色功能** - 创建角色,生成角色视频48- 🎬 **Remix 功能** - 基于已有视频继续创作49 50### 高级特性51- 🔐 **Token 管理** - 支持多 Token 管理和轮询负载均衡52- 🌐 **代理支持** - 支持 HTTP 和 SOCKS5 代理53- 📝 **详细日志** - 完整的请求/响应日志记录54- 🔄 **异步处理** - 高效的异步任务处理55- 💾 **数据持久化** - SQLite 数据库存储56- 🎯 **OpenAI 兼容** - 完全兼容 OpenAI API 格式57- 🛡️ **安全认证** - API Key 验证和权限管理58- 📱 **Web 管理界面** - 直观的管理后台59 60---61 62## 🚀 快速开始63 64### 前置要求65 66- Docker 和 Docker Compose(推荐)67- 或 Python 3.8+68 69### 方式一:Docker 部署(推荐)70 71#### 标准模式(不使用代理)72 73```bash74# 克隆项目75git clone https://github.com/TheSmallHanCat/sora2api.git76cd sora2api77 78# 启动服务79docker-compose up -d80 81# 查看日志82docker-compose logs -f83```84 85#### WARP 模式(使用代理)86 87```bash88# 使用 WARP 代理启动89docker-compose -f docker-compose.warp.yml up -d90 91# 查看日志92docker-compose -f docker-compose.warp.yml logs -f93```94 95### 方式二:本地部署96 97```bash98# 克隆项目99git clone https://github.com/TheSmallHanCat/sora2api.git100cd sora2api101 102# 创建虚拟环境103python -m venv venv104 105# 激活虚拟环境106# Windows107venv\Scripts\activate108# Linux/Mac109source venv/bin/activate110 111# 安装依赖112pip install -r requirements.txt113 114# 启动服务115python main.py116```117 118### 首次启动119 120服务启动后,访问管理后台进行初始化配置:121 122- **地址**: http://localhost:8000123- **用户名**: `admin`124- **密码**: `admin`125 126⚠️ **重要**: 首次登录后请立即修改密码!127 128---129 130### 快速参考131 132| 功能 | 模型 | 说明 |133|------|------|------|134| 文生图 | `sora-image*` | 使用 `content` 为字符串 |135| 图生图 | `sora-image*` | 使用 `content` 数组 + `image_url` |136| 文生视频 | `sora-video*` | 使用 `content` 为字符串 |137| 图生视频 | `sora-video*` | 使用 `content` 数组 + `image_url` |138| 创建角色 | `sora-video*` | 使用 `content` 数组 + `video_url` |139| 角色生成视频 | `sora-video*` | 使用 `content` 数组 + `video_url` + 文本 |140| Remix | `sora-video*` | 在 `content` 中包含 Remix ID |141 142---143 144### API 调用145 146#### 基本信息(OpenAI标准格式,需要使用流式)147 148- **端点**: `http://localhost:8000/v1/chat/completions`149- **认证**: 在请求头中添加 `Authorization: Bearer YOUR_API_KEY`150- **默认 API Key**: `han1234`(建议修改)151 152#### 支持的模型153 154**图片模型**155 156| 模型 | 说明 | 尺寸 |157|------|------|------|158| `sora-image` | 文生图(默认) | 360×360 |159| `sora-image-landscape` | 文生图(横屏) | 540×360 |160| `sora-image-portrait` | 文生图(竖屏) | 360×540 |161 162**视频模型**163 164| 模型 | 时长 | 方向 | 说明 |165|------|------|------|------|166| `sora-video-10s` | 10秒 | 横屏 | 文生视频/图生视频 |167| `sora-video-15s` | 15秒 | 横屏 | 文生视频/图生视频 |168| `sora-video-landscape-10s` | 10秒 | 横屏 | 文生视频/图生视频 |169| `sora-video-landscape-15s` | 15秒 | 横屏 | 文生视频/图生视频 |170| `sora-video-portrait-10s` | 10秒 | 竖屏 | 文生视频/图生视频 |171| `sora-video-portrait-15s` | 15秒 | 竖屏 | 文生视频/图生视频 |172 173#### 请求示例174 175**文生图**176 177```bash178curl -X POST "http://localhost:8000/v1/chat/completions" \179 -H "Authorization: Bearer han1234" \180 -H "Content-Type: application/json" \181 -d '{182 "model": "sora-image",183 "messages": [184 {185 "role": "user",186 "content": "一只可爱的小猫咪"187 }188 ]189 }'190```191 192**图生图**193 194```bash195curl -X POST "http://localhost:8000/v1/chat/completions" \196 -H "Authorization: Bearer han1234" \197 -H "Content-Type: application/json" \198 -d '{199 "model": "sora-image",200 "messages": [201 {202 "role": "user",203 "content": [204 {205 "type": "text",206 "text": "将这张图片变成油画风格"207 },208 {209 "type": "image_url",210 "image_url": {211 "url": "data:image/png;base64,<base64_encoded_image_data>"212 }213 }214 ]215 }216 ],217 "stream": true218 }'219```220 221**文生视频**222 223```bash224curl -X POST "http://localhost:8000/v1/chat/completions" \225 -H "Authorization: Bearer han1234" \226 -H "Content-Type: application/json" \227 -d '{228 "model": "sora-video-landscape-10s",229 "messages": [230 {231 "role": "user",232 "content": "一只小猫在草地上奔跑"233 }234 ],235 "stream": true236 }'237```238 239**图生视频**240 241```bash242curl -X POST "http://localhost:8000/v1/chat/completions" \243 -H "Authorization: Bearer han1234" \244 -H "Content-Type: application/json" \245 -d '{246 "model": "sora-video-landscape-10s",247 "messages": [248 {249 "role": "user",250 "content": [251 {252 "type": "text",253 "text": "这只猫在跳舞"254 },255 {256 "type": "image_url",257 "image_url": {258 "url": "data:image/png;base64,<base64_encoded_image_data>"259 }260 }261 ]262 }263 ],264 "stream": true265 }'266```267 268**视频Remix(基于已有视频继续创作)**269 270```bash271curl -X POST "http://localhost:8000/v1/chat/completions" \272 -H "Authorization: Bearer han1234" \273 -H "Content-Type: application/json" \274 -d '{275 "model": "sora-video-landscape-10s",276 "messages": [277 {278 "role": "user",279 "content": "https://sora.chatgpt.com/p/s_68e3a06dcd888191b150971da152c1f5改成水墨画风格"280 }281 ]282 }'283```284 285### 视频角色功能286 287Sora2API 支持**视频角色生成**功能。288 289#### 功能说明290 291- **角色创建**: 如果只有视频,无prompt,则生成角色自动提取角色信息,输出角色名292- **角色生成**: 有视频、prompt,则上传视频创建角色,使用角色和prompt进行生成,输出视频293 294#### API调用(OpenAI标准格式,需要使用流式)295 296**场景 1: 仅创建角色(不生成视频)**297 298上传视频提取角色信息,获取角色名称和头像。299 300```bash301curl -X POST "http://localhost:8000/v1/chat/completions" \302 -H "Authorization: Bearer han1234" \303 -H "Content-Type: application/json" \304 -d '{305 "model": "sora-video-landscape-10s",306 "messages": [307 {308 "role": "user",309 "content": [310 {311 "type": "video_url",312 "video_url": {313 "url": "data:video/mp4;base64,<base64_encoded_video_data>"314 }315 }316 ]317 }318 ],319 "stream": true320 }'321```322 323**场景 2: 创建角色并生成视频**324 325上传视频创建角色,然后使用该角色生成新视频。326 327```bash328curl -X POST "http://localhost:8000/v1/chat/completions" \329 -H "Authorization: Bearer han1234" \330 -H "Content-Type: application/json" \331 -d '{332 "model": "sora-video-landscape-10s",333 "messages": [334 {335 "role": "user",336 "content": [337 {338 "type": "video_url",339 "video_url": {340 "url": "data:video/mp4;base64,<base64_encoded_video_data>"341 }342 },343 {344 "type": "text",345 "text": "角色做一个跳舞的动作"346 }347 ]348 }349 ],350 "stream": true351 }'352```353 354#### Python 代码示例355 356```python357import requests358import base64359 360# 读取视频文件并编码为 Base64361with open("video.mp4", "rb") as f:362 video_data = base64.b64encode(f.read()).decode("utf-8")363 364# 仅创建角色365response = requests.post(366 "http://localhost:8000/v1/chat/completions",367 headers={368 "Authorization": "Bearer han1234",369 "Content-Type": "application/json"370 },371 json={372 "model": "sora-video-landscape-10s",373 "messages": [374 {375 "role": "user",376 "content": [377 {378 "type": "video_url",379 "video_url": {380 "url": f"data:video/mp4;base64,{video_data}"381 }382 }383 ]384 }385 ],386 "stream": True387 },388 stream=True389)390 391# 处理流式响应392for line in response.iter_lines():393 if line:394 print(line.decode("utf-8"))395```396 397---398 399## 📄 许可证400 401本项目采用 MIT 许可证。详见 [LICENSE](LICENSE) 文件。402 403---404 405## 🙏 致谢406 407感谢所有贡献者和使用者的支持!408 409---410 411## 📞 联系方式412 413- 提交 Issue:[GitHub Issues](https://github.com/TheSmallHanCat/sora2api/issues)414- 讨论:[GitHub Discussions](https://github.com/TheSmallHanCat/sora2api/discussions)415 416---417 418**⭐ 如果这个项目对你有帮助,请给个 Star!**419 