2026-01-13 20:45:48 +08:00
2026-01-13 20:45:48 +08:00
2026-01-13 20:45:48 +08:00
2026-01-12 17:44:12 +08:00
2026-01-12 13:17:11 +08:00
2026-01-13 20:45:48 +08:00
2026-01-12 13:17:11 +08:00
2026-01-13 20:45:48 +08:00
2026-01-13 20:45:48 +08:00
2026-01-12 22:21:46 +08:00
2026-01-05 20:39:09 +08:00
2026-01-12 22:21:46 +08:00
2026-01-12 22:57:14 +08:00
2026-01-12 14:11:36 +08:00
2026-01-12 13:17:11 +08:00
2026-01-12 13:17:11 +08:00
2026-01-12 13:17:11 +08:00
2026-01-13 10:09:44 +08:00

🎬 Huobao Drama - AI短剧生成平台

基于 Go + Vue3 的全栈AI短剧自动化生产平台

Go Version Vue Version License

功能特性快速开始部署指南


📖 项目简介

Huobao Drama 是一个基于AI的短剧自动化生产平台实现从剧本生成、角色设计、分镜制作到视频合成的全流程自动化。

🎯 核心价值

  • 🤖 AI驱动:使用大语言模型自动生成剧本、角色设定和分镜脚本
  • 🎨 智能创作AI绘图生成角色形象和场景背景
  • 📹 视频生成:基于文生视频模型自动生成分镜视频
  • 批量处理:支持批量生成和异步任务处理
  • 🔄 工作流:完整的短剧制作工作流,从创意到成片一站式完成

🛠️ 技术架构

采用DDD领域驱动设计,清晰分层:

├── API层 (Gin HTTP)
├── 应用服务层 (Business Logic)
├── 领域层 (Domain Models)
└── 基础设施层 (Database, External Services)

功能特性

📝 剧本创作

  • AI自动生成剧本大纲
  • 智能角色设定和关系图谱
  • 分集剧情自动拆分
  • 剧本编辑和版本管理

🎭 角色管理

  • AI生成角色形象
  • 角色库复用
  • 批量角色生成
  • 角色图片上传和管理

🎬 分镜制作

  • 自动生成分镜脚本
  • 场景描述和镜头设计
  • 分镜图片生成(文生图)
  • 帧类型选择(首帧/关键帧/尾帧/分镜板)

🎥 视频生成

  • 图生视频自动生成
  • 视频合成和剪辑
  • 转场效果
  • 批量视频处理

📦 资源管理

  • 素材库统一管理
  • 本地存储支持
  • 资源导入导出
  • 任务进度追踪

🏗️ 项目结构

huobao-drama/
├── api/                           # API 层 - HTTP 接口
│   ├── handlers/                  # 请求处理器 (16个)
│   │   ├── ai_config.go          # AI服务配置
│   │   ├── drama.go              # 剧本管理
│   │   ├── scene.go              # 场景管理
│   │   ├── storyboard.go         # 分镜管理
│   │   ├── character_library.go  # 角色库管理
│   │   ├── image_generation.go   # 图片生成
│   │   ├── video_generation.go   # 视频生成
│   │   ├── video_merge.go        # 视频合成
│   │   ├── script_generation.go  # 剧本生成
│   │   ├── frame_prompt.go       # 分镜提示词
│   │   ├── asset.go              # 资源管理
│   │   ├── task.go               # 任务管理
│   │   └── upload.go             # 文件上传
│   ├── middlewares/               # 中间件
│   │   ├── cors.go               # CORS 跨域
│   │   ├── logger.go             # 日志记录
│   │   └── ratelimit.go          # 限流控制
│   └── routes/                    # 路由注册
│       └── routes.go
│
├── application/                   # 应用服务层 - 业务逻辑
│   └── services/                  # 业务服务 (15个)
│       ├── ai_service.go         # AI服务管理
│       ├── drama_service.go      # 剧本业务
│       ├── storyboard_service.go # 分镜业务
│       ├── character_library_service.go  # 角色库
│       ├── image_generation_service.go   # 图片生成
│       ├── video_generation_service.go   # 视频生成
│       ├── video_merge_service.go        # 视频合成
│       ├── script_generation_service.go  # 剧本生成
│       ├── frame_prompt_service.go       # 分镜提示词
│       ├── storyboard_composition_service.go # 分镜合成
│       ├── resource_transfer_service.go  # 资源转移
│       ├── asset_service.go      # 资源管理
│       ├── task_service.go       # 任务调度
│       └── upload_service.go     # 上传处理
│
├── domain/                        # 领域层 - 数据模型
│   └── models/                    # 领域模型 (10个)
│       ├── drama.go              # 剧本模型 (Drama, Episode, Character, Scene)
│       ├── frame_prompt.go       # 分镜提示词
│       ├── image_generation.go   # 图片生成任务
│       ├── video_generation.go   # 视频生成任务
│       ├── video_merge.go        # 视频合成任务
│       ├── character_library.go  # 角色库
│       ├── asset.go              # 资源模型
│       ├── task.go               # 异步任务
│       ├── timeline.go           # 时间线
│       └── ai_config.go          # AI配置
│
├── infrastructure/                # 基础设施层
│   ├── database/                 # 数据库
│   │   ├── database.go           # 连接管理
│   │   └── repositories/         # 数据仓储
│   ├── external/                 # 外部服务
│   │   ├── ffmpeg/               # FFmpeg 视频处理
│   │   ├── midjourney/           # Midjourney 图片生成
│   │   └── openai/               # OpenAI 服务
│   ├── scheduler/                # 调度器
│   │   └── resource_transfer_scheduler.go  # 资源转移调度
│   └── storage/                  # 存储
│       └── local_storage.go      # 本地文件存储
│
├── pkg/                          # 公共包 - 工具库
│   ├── ai/                       # AI 客户端
│   │   └── openai_client.go     # OpenAI 封装
│   ├── config/                   # 配置管理
│   │   └── config.go
│   ├── image/                    # 图片处理
│   │   └── image_client.go      # 图片生成客户端
│   ├── logger/                   # 日志工具
│   │   └── logger.go
│   ├── response/                 # HTTP 响应
│   │   └── response.go
│   ├── utils/                    # 工具函数
│   │   └── json_parser.go
│   └── video/                    # 视频处理
│       ├── video_client.go       # 视频生成客户端
│       ├── minimax_client.go     # MiniMax 视频生成
│       ├── openai_sora_client.go # OpenAI Sora
│       └── volces_ark_client.go  # 火山引擎视频生成
│
├── web/                          # 前端项目 (Vue 3 + TypeScript)
│   ├── src/
│   │   ├── api/                  # API 调用 (9个接口模块)
│   │   ├── assets/               # 静态资源
│   │   ├── components/           # Vue 组件
│   │   ├── router/               # 路由配置
│   │   ├── stores/               # Pinia 状态管理
│   │   ├── types/                # TypeScript 类型定义 (8个)
│   │   ├── utils/                # 工具函数
│   │   ├── views/                # 页面视图 (28个页面)
│   │   ├── App.vue               # 根组件
│   │   └── main.ts               # 入口文件
│   ├── public/                   # 公共资源
│   ├── index.html                # HTML 模板
│   ├── package.json              # 依赖配置
│   ├── vite.config.ts            # Vite 配置
│   ├── tailwind.config.js        # TailwindCSS 配置
│   └── tsconfig.json             # TypeScript 配置
│
├── configs/                      # 配置文件
│   └── config.example.yaml       # 配置模板
├── data/                         # 运行时数据 (gitignore)
│   ├── drama_generator.db        # SQLite 数据库
│   └── storage/                  # 文件存储
├── migrations/                   # 数据库迁移
│   └── init.sql
├── main.go                       # 程序入口
├── go.mod                        # Go 模块定义
├── go.sum                        # 依赖版本锁定
└── README.md                     # 项目文档

🚀 快速开始

📋 环境要求

软件 版本要求 说明
Go 1.23+ 后端运行环境
Node.js 18+ 前端构建环境
npm 9+ 包管理工具
FFmpeg 4.0+ 视频处理(必需
SQLite 3.x 数据库(已内置)

安装 FFmpeg

macOS:

brew install ffmpeg

Ubuntu/Debian:

sudo apt update
sudo apt install ffmpeg

Windows:FFmpeg官网 下载并配置环境变量

验证安装:

ffmpeg -version

⚙️ 配置文件

复制并编辑配置文件:

cp configs/config.example.yaml configs/config.yaml
vim configs/config.yaml

配置文件格式(configs/config.yaml

app:
  name: "Huobao Drama API"
  version: "1.0.0"
  debug: true  # 开发环境设为true生产环境设为false

server:
  port: 5678
  host: "0.0.0.0"
  cors_origins:
    - "http://localhost:3012"
  read_timeout: 600
  write_timeout: 600

database:
  type: "sqlite"
  path: "./data/drama_generator.db"
  max_idle: 10
  max_open: 100

storage:
  type: "local"
  local_path: "./data/storage"
  base_url: "http://localhost:5678/static"

ai:
  default_text_provider: "openai"
  default_image_provider: "openai"
  default_video_provider: "doubao"

重要配置项:

  • app.debug: 调试模式开关开发环境建议设为true
  • server.port: 服务运行端口
  • server.cors_origins: 允许跨域访问的前端地址
  • database.path: SQLite数据库文件路径
  • storage.local_path: 本地文件存储路径
  • storage.base_url: 静态资源访问URL
  • ai.default_*_provider: AI服务提供商配置在Web界面中配置具体的API Key

📥 安装依赖

# 克隆项目
git clone https://github.com/chatfire-AI/huobao-drama.git
cd huobao-drama

# 安装Go依赖
go mod download

# 安装前端依赖
cd web
npm install
cd ..

🎯 启动项目

方式一:开发模式(推荐)

前后端分离,支持热重载

# 终端1启动后端服务
go run main.go

# 终端2启动前端开发服务器
cd web
npm run dev
  • 前端地址: http://localhost:3012
  • 后端API: http://localhost:5678/api/v1
  • 前端自动代理API请求到后端

方式二:单服务模式

后端同时提供API和前端静态文件

# 1. 构建前端
cd web
npm run build
cd ..

# 2. 启动服务
go run main.go

访问: http://localhost:5678

🗄️ 数据库初始化

数据库表会在首次启动时自动创建使用GORM AutoMigrate无需手动迁移。


📦 部署指南

🐳 Docker 部署(推荐)

使用 Docker 部署是最简单快捷的方式,已内置默认配置,开箱即用。

快速体验(推荐新手)

# 从 Docker Hub 拉取并运行
docker run -d \
  --name huobao-drama \
  -p 5678:5678 \
  --restart unless-stopped \
  huobao/huobao-drama:latest

访问: http://localhost:5678 即可开始使用!

方式一:使用 Docker Compose

# 启动服务(使用内置配置)
docker-compose up -d

# 查看日志
docker-compose logs -f

# 停止服务
docker-compose down

自定义配置(可选):

# 1. 取消 docker-compose.yml 中配置文件挂载的注释
# 2. 复制并修改配置文件
cp configs/config.example.yaml configs/config.yaml
vim configs/config.yaml

# 3. 重启服务
docker-compose up -d

方式二:使用 Docker 命令

基础启动(使用内置配置):

docker run -d \
  --name huobao-drama \
  -p 5678:5678 \
  -v $(pwd)/data:/app/data \
  --restart unless-stopped \
  huobao/huobao-drama:latest

自定义配置启动

# 挂载自定义配置文件
docker run -d \
  --name huobao-drama \
  -p 5678:5678 \
  -v $(pwd)/data:/app/data \
  -v $(pwd)/configs/config.yaml:/app/configs/config.yaml:ro \
  --restart unless-stopped \
  huobao/huobao-drama:latest

查看日志

docker logs -f huobao-drama

方式三:本地构建镜像

# 1. 构建镜像
docker build -t huobao-drama:latest .

# 2. 运行容器
docker run -d \
  --name huobao-drama \
  -p 5678:5678 \
  -v $(pwd)/data:/app/data \
  --restart unless-stopped \
  huobao-drama:latest

镜像仓库

Docker Hub(国际):

docker pull huobao/huobao-drama:latest

Docker 部署优势:

  • 开箱即用,内置默认配置
  • 环境一致性,避免依赖问题
  • 一键启动,无需安装 Go、Node.js、FFmpeg
  • 易于迁移和扩展
  • 自动健康检查和重启
  • 自动处理文件权限,无需手动配置

📝 数据持久化说明:

Docker 部署使用命名卷 huobao-data 存储数据库和上传文件:

  • 数据会自动持久化,重启容器不会丢失
  • 容器内 app 用户自动拥有完整读写权限
  • 无需担心传统部署中的权限问题

如需备份数据:

# 查看卷位置
docker volume inspect huobao-drama_huobao-data

# 备份数据
docker run --rm -v huobao-drama_huobao-data:/data -v $(pwd):/backup alpine tar czf /backup/huobao-data-backup.tar.gz -C /data .

# 恢复数据
docker run --rm -v huobao-drama_huobao-data:/data -v $(pwd):/backup alpine tar xzf /backup/huobao-data-backup.tar.gz -C /data

🏭 传统部署方式

1. 编译构建

# 1. 构建前端
cd web
npm run build
cd ..

# 2. 编译后端
go build -o huobao-drama .

生成文件:

  • huobao-drama - 后端可执行文件
  • web/dist/ - 前端静态文件(已嵌入后端)

2. 准备部署文件

需要上传到服务器的文件:

huobao-drama            # 后端可执行文件
configs/config.yaml     # 配置文件
data/                   # 数据目录(可选,首次运行自动创建)

3. 服务器配置

# 上传文件到服务器
scp huobao-drama user@server:/opt/huobao-drama/
scp configs/config.yaml user@server:/opt/huobao-drama/configs/

# SSH登录服务器
ssh user@server

# 修改配置文件
cd /opt/huobao-drama
vim configs/config.yaml
# 设置mode为production
# 配置域名和存储路径

# 创建数据目录并设置权限(重要!)
# 注意:将 YOUR_USER 替换为实际运行服务的用户名(如 www-data、ubuntu、deploy 等)
sudo mkdir -p /opt/huobao-drama/data/storage
sudo chown -R YOUR_USER:YOUR_USER /opt/huobao-drama/data
sudo chmod -R 755 /opt/huobao-drama/data

# 赋予执行权限
chmod +x huobao-drama

# 启动服务
./huobao-drama

4. 使用 systemd 管理服务

创建服务文件 /etc/systemd/system/huobao-drama.service:

[Unit]
Description=Huobao Drama Service
After=network.target

[Service]
Type=simple
User=YOUR_USER
WorkingDirectory=/opt/huobao-drama
ExecStart=/opt/huobao-drama/huobao-drama
Restart=on-failure
RestartSec=10

# 环境变量(可选)
# Environment="GIN_MODE=release"

[Install]
WantedBy=multi-user.target

启动服务:

sudo systemctl daemon-reload
sudo systemctl enable huobao-drama
sudo systemctl start huobao-drama
sudo systemctl status huobao-drama

⚠️ 常见问题SQLite 写权限错误

如果遇到 attempt to write a readonly database 错误:

# 1. 确认当前运行服务的用户
sudo systemctl status huobao-drama | grep "Main PID"
ps aux | grep huobao-drama

# 2. 修复权限(将 YOUR_USER 替换为实际用户名)
sudo chown -R YOUR_USER:YOUR_USER /opt/huobao-drama/data
sudo chmod -R 755 /opt/huobao-drama/data

# 3. 验证权限
ls -la /opt/huobao-drama/data
# 应该显示所有者为运行服务的用户

# 4. 重启服务
sudo systemctl restart huobao-drama

原因说明

  • SQLite 需要对数据库文件 所在目录都有写权限
  • 需要在目录中创建临时文件(如 -wal-journal
  • 关键:确保 systemd 配置中的 User 与数据目录所有者一致

常用用户名

  • Ubuntu/Debian: www-dataubuntu
  • CentOS/RHEL: nginxapache
  • 自定义部署: deployapp、当前登录用户

5. Nginx 反向代理

server {
    listen 80;
    server_name your-domain.com;

    location / {
        proxy_pass http://localhost:5678;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    # 静态文件直接访问
    location /static/ {
        alias /opt/huobao-drama/data/storage/;
    }
}

🔧 开发指南

添加新功能

1. 添加API接口

# 创建Handler
vim api/handlers/your_handler.go

# 注册路由
vim api/routes/routes.go

示例:

// api/handlers/your_handler.go
func (h *YourHandler) YourMethod(c *gin.Context) {
    // 处理逻辑
    response.Success(c, data)
}

// api/routes/routes.go
your := api.Group("/your")
{
    your.GET("", yourHandler.List)
    your.POST("", yourHandler.Create)
}

2. 添加业务服务

// application/services/your_service.go
type YourService struct {
    db  *gorm.DB
    log *logger.Logger
}

func NewYourService(db *gorm.DB, log *logger.Logger) *YourService {
    return &YourService{db: db, log: log}
}

func (s *YourService) YourMethod() error {
    // 业务逻辑
    return nil
}

3. 添加前端页面

# 创建页面组件
vim web/src/views/YourPage.vue

# 注册路由
vim web/src/router/index.ts

# 添加API调用
vim web/src/api/your-api.ts

调试技巧

后端调试:

# 启用详细日志
export LOG_LEVEL=debug
go run main.go

# 使用dlv调试器
dlv debug main.go

前端调试:

cd web
npm run dev
# 打开浏览器 DevTools

数据库查询:

sqlite3 data/drama_generator.db
.tables
.schema dramas
SELECT * FROM dramas;

🛠️ 常用命令

# 开发模式
go run main.go                      # 启动后端服务
cd web && npm run dev               # 启动前端开发服务器

# 编译构建
cd web && npm run build && cd ..    # 构建前端
go build -o huobao-drama .          # 编译后端

# 依赖管理
go mod download                     # 下载Go依赖
go mod tidy                         # 清理Go依赖
cd web && npm install && cd ..      # 安装前端依赖

# 代码检查
go fmt ./...                        # 格式化代码
go vet ./...                        # 代码检查
cd web && npm run lint && cd ..     # 前端代码检查

# 清理
go clean                            # 清理Go构建缓存
rm -rf web/dist                     # 清理前端构建产物
rm -f huobao-drama                  # 删除可执行文件

# 测试
go test ./...                       # 运行Go测试
cd web && npm run test && cd ..     # 运行前端测试

🎨 技术栈

后端技术

  • 语言: Go 1.23+
  • Web框架: Gin 1.9+
  • ORM: GORM
  • 数据库: SQLite
  • 日志: Zap
  • 视频处理: FFmpeg
  • AI服务: 豆包 Doubao API

前端技术

  • 框架: Vue 3.4+
  • 语言: TypeScript 5+
  • 构建工具: Vite 5
  • UI组件: Element Plus
  • CSS框架: TailwindCSS
  • 状态管理: Pinia
  • 路由: Vue Router 4

开发工具

  • 包管理: Go Modules, npm
  • 代码规范: ESLint, Prettier
  • 版本控制: Git

📝 常见问题

Q: FFmpeg未安装或找不到

A: 确保FFmpeg已安装并在PATH环境变量中。运行 ffmpeg -version 验证。

Q: 前端无法连接后端API

A: 检查后端是否启动,端口是否正确。开发模式下前端代理配置在 web/vite.config.ts

Q: 数据库表未创建?

A: GORM会在首次启动时自动创建表检查日志确认迁移是否成功。


📄 许可证

本项目采用 MIT License 开源协议。


🤝 贡献指南

欢迎提交 Issue 和 Pull Request

  1. Fork 本项目
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交改动 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 开启 Pull Request

API配置站点

2分钟完成配置API聚合站点

📧 联系方式

商务联系Vdangbao1117

项目交流群

项目交流群

  • 提交 Issue
  • 发送邮件至项目维护者

如果这个项目对你有帮助请给一个Star

Star History

Star History Chart Made with ❤️ by Huobao Team

Description
No description provided
Readme 27 MiB
Languages
Vue 52.1%
Go 36.5%
TypeScript 8.9%
CSS 2%
Dockerfile 0.3%
Other 0.1%