diff --git a/.dockerignore b/.dockerignore
index 4ca439d..abf09f4 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -26,6 +26,7 @@ backend
# 依赖
node_modules/
+**/node_modules/
vendor/
# 数据文件
diff --git a/.env.example b/.env.example
new file mode 100644
index 0000000..67c530f
--- /dev/null
+++ b/.env.example
@@ -0,0 +1,67 @@
+# ========================================
+# Docker 镜像源配置示例
+# ========================================
+#
+# 【使用方法】
+# 1. 复制此文件:cp .env.example .env
+# 2. 编辑 .env 文件,删掉下面 4 个配置行前面的 # 号:
+# - DOCKER_REGISTRY
+# - NPM_REGISTRY
+# - GO_PROXY
+# - ALPINE_MIRROR
+# 3. 保存后运行:docker-compose build
+#
+# 【注意】
+# - 只删除配置行前面的 #,不要删除注释说明的 #
+# - 国外用户请勿配置,使用默认官方源即可
+#
+# ========================================
+
+# -----------------------------
+# Docker Hub 镜像源(末尾必须有斜杠 /)
+# -----------------------------
+#
+# 推荐镜像源:
+# docker.1ms.run/ - 速度快,推荐
+# dockerpull.org/ - 备用
+# dockerproxy.cn/ - 备用
+#
+# 删除下面行首的 # 来启用:
+# DOCKER_REGISTRY=docker.1ms.run/
+
+
+# -----------------------------
+# npm 镜像源(末尾斜杠可选)
+# -----------------------------
+#
+# 推荐镜像源:
+# https://registry.npmmirror.com/ - 淘宝镜像,推荐
+#
+# 删除下面行首的 # 来启用:
+# NPM_REGISTRY=https://registry.npmmirror.com/
+
+
+# -----------------------------
+# Go 模块代理(注意末尾不要斜杠)
+# -----------------------------
+#
+# 推荐镜像源:
+# https://goproxy.cn,direct - 七牛云,推荐
+# https://goproxy.io,direct - 备用
+# https://mirrors.aliyun.com/goproxy/,direct - 阿里云
+#
+# 删除下面行首的 # 来启用:
+# GO_PROXY=https://goproxy.cn,direct
+
+
+# -----------------------------
+# Alpine apk 镜像源(末尾不要斜杠)
+# -----------------------------
+#
+# 推荐镜像源:
+# mirrors.aliyun.com - 阿里云,推荐
+# mirrors.tuna.tsinghua.edu.cn - 清华大学
+# mirrors.ustc.edu.cn - 中科大
+#
+# 删除下面行首的 # 来启用:
+# ALPINE_MIRROR=mirrors.aliyun.com
diff --git a/Dockerfile b/Dockerfile
index aa9390b..860f67d 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,10 +1,20 @@
# 多阶段构建 Dockerfile for Huobao Drama
# ==================== 阶段1: 构建前端 ====================
-FROM node:20-alpine AS frontend-builder
+# 声明构建参数(支持镜像源配置)
+ARG DOCKER_REGISTRY=
+ARG NPM_REGISTRY=
-# 配置 npm 镜像源(国内加速)
-RUN npm config set registry https://registry.npmmirror.com
+FROM ${DOCKER_REGISTRY:-}node:20-alpine AS frontend-builder
+
+# 重新声明 ARG(FROM 之后 ARG 作用域失效,需要重新声明)
+ARG NPM_REGISTRY=
+
+# 配置 npm 镜像源(条件执行)
+ENV NPM_REGISTRY=${NPM_REGISTRY:-}
+RUN if [ -n "$NPM_REGISTRY" ]; then \
+ npm config set registry "$NPM_REGISTRY" || true; \
+ fi
WORKDIR /app/web
@@ -21,11 +31,26 @@ COPY web/ ./
RUN npm run build
# ==================== 阶段2: 构建后端 ====================
-FROM golang:1.23-alpine AS backend-builder
+# 每个阶段前重新声明构建参数
+ARG DOCKER_REGISTRY=
+ARG GO_PROXY=
+ARG ALPINE_MIRROR=
-# 配置 Go 代理(国内镜像加速)
-ENV GOPROXY=https://goproxy.cn,direct \
- GO111MODULE=on
+FROM ${DOCKER_REGISTRY:-}golang:1.23-alpine AS backend-builder
+
+# 重新声明 ARG(FROM 之后 ARG 作用域失效,需要重新声明)
+ARG GO_PROXY=
+ARG ALPINE_MIRROR=
+
+# 配置 Alpine 镜像源(条件执行)
+ENV ALPINE_MIRROR=${ALPINE_MIRROR:-}
+RUN if [ -n "$ALPINE_MIRROR" ]; then \
+ sed -i "s@dl-cdn.alpinelinux.org@$ALPINE_MIRROR@g" /etc/apk/repositories 2>/dev/null || true; \
+ fi
+
+# 配置 Go 代理(使用 ENV 持久化到运行时)
+ENV GOPROXY=${GO_PROXY:-https://proxy.golang.org,direct}
+ENV GO111MODULE=on
# 安装必要的构建工具(纯 Go 编译,无需 CGO)
RUN apk add --no-cache \
@@ -51,7 +76,20 @@ COPY --from=frontend-builder /app/web/dist ./web/dist
RUN CGO_ENABLED=0 go build -ldflags="-w -s" -o huobao-drama .
# ==================== 阶段3: 运行时镜像 ====================
-FROM alpine:latest
+# 每个阶段前重新声明构建参数
+ARG DOCKER_REGISTRY=
+ARG ALPINE_MIRROR=
+
+FROM ${DOCKER_REGISTRY:-}alpine:latest
+
+# 重新声明 ARG(FROM 之后 ARG 作用域失效,需要重新声明)
+ARG ALPINE_MIRROR=
+
+# 配置 Alpine 镜像源(条件执行)
+ENV ALPINE_MIRROR=${ALPINE_MIRROR:-}
+RUN if [ -n "$ALPINE_MIRROR" ]; then \
+ sed -i "s@dl-cdn.alpinelinux.org@$ALPINE_MIRROR@g" /etc/apk/repositories 2>/dev/null || true; \
+ fi
# 安装运行时依赖
RUN apk add --no-cache \
diff --git a/README-CN.md b/README-CN.md
new file mode 100644
index 0000000..755986f
--- /dev/null
+++ b/README-CN.md
@@ -0,0 +1,624 @@
+# 🎬 Huobao Drama - AI 短剧生成平台
+
+
+
+**基于 Go + Vue3 的全栈 AI 短剧自动化生产平台**
+
+[](https://golang.org)
+[](https://vuejs.org)
+[](https://creativecommons.org/licenses/by-nc-sa/4.0/)
+
+[功能特性](#功能特性) • [快速开始](#快速开始) • [部署指南](#部署指南)
+
+[简体中文](README-CN.md) | [English](README.md) | [日本語](README-JA.md)
+
+
+
+---
+
+## 📖 项目简介
+
+Huobao Drama 是一个基于 AI 的短剧自动化生产平台,实现从剧本生成、角色设计、分镜制作到视频合成的全流程自动化。
+
+### 🎯 核心价值
+
+- **🤖 AI 驱动**:使用大语言模型解析剧本,提取角色、场景和分镜信息
+- **🎨 智能创作**:AI 绘图生成角色形象和场景背景
+- **📹 视频生成**:基于文生视频和图生视频模型自动生成分镜视频
+- **🔄 工作流**:完整的短剧制作工作流,从创意到成片一站式完成
+
+### 🛠️ 技术架构
+
+采用**DDD 领域驱动设计**,清晰分层:
+
+```
+├── API层 (Gin HTTP)
+├── 应用服务层 (Business Logic)
+├── 领域层 (Domain Models)
+└── 基础设施层 (Database, External Services)
+```
+
+### 🎥 作品展示 / Demo Videos
+
+体验 AI 短剧生成效果:
+
+
+
+**示例作品 1**
+
+
+
+**示例作品 2**
+
+
+
+[点击观看视频 1](https://ffile.chatfire.site/cf/public/20260114094337396.mp4) | [点击观看视频 2](https://ffile.chatfire.site/cf/public/fcede75e8aeafe22031dbf78f86285b8.mp4)
+
+
+
+---
+
+## ✨ 功能特性
+
+### 🎭 角色管理
+
+- ✅ AI 生成角色形象
+- ✅ 批量角色生成
+- ✅ 角色图片上传和管理
+
+### 🎬 分镜制作
+
+- ✅ 自动生成分镜脚本
+- ✅ 场景描述和镜头设计
+- ✅ 分镜图片生成(文生图)
+- ✅ 帧类型选择(首帧/关键帧/尾帧/分镜板)
+
+### 🎥 视频生成
+
+- ✅ 图生视频自动生成
+- ✅ 视频合成和剪辑
+- ✅ 转场效果
+
+### 📦 资源管理
+
+- ✅ 素材库统一管理
+- ✅ 本地存储支持
+- ✅ 资源导入导出
+- ✅ 任务进度追踪
+
+---
+
+## 🚀 快速开始
+
+### 📋 环境要求
+
+| 软件 | 版本要求 | 说明 |
+| ----------- | -------- | -------------------- |
+| **Go** | 1.23+ | 后端运行环境 |
+| **Node.js** | 18+ | 前端构建环境 |
+| **npm** | 9+ | 包管理工具 |
+| **FFmpeg** | 4.0+ | 视频处理(**必需**) |
+| **SQLite** | 3.x | 数据库(已内置) |
+
+#### 安装 FFmpeg
+
+**macOS:**
+
+```bash
+brew install ffmpeg
+```
+
+**Ubuntu/Debian:**
+
+```bash
+sudo apt update
+sudo apt install ffmpeg
+```
+
+**Windows:**
+从 [FFmpeg 官网](https://ffmpeg.org/download.html) 下载并配置环境变量
+
+验证安装:
+
+```bash
+ffmpeg -version
+```
+
+### ⚙️ 配置文件
+
+复制并编辑配置文件:
+
+```bash
+cp configs/config.example.yaml configs/config.yaml
+vim configs/config.yaml
+```
+
+配置文件格式(`configs/config.yaml`):
+
+```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)
+
+### 📥 安装依赖
+
+```bash
+# 克隆项目
+git clone https://github.com/chatfire-AI/huobao-drama.git
+cd huobao-drama
+
+# 安装Go依赖
+go mod download
+
+# 安装前端依赖
+cd web
+npm install
+cd ..
+```
+
+### 🎯 启动项目
+
+#### 方式一:开发模式(推荐)
+
+**前后端分离,支持热重载**
+
+```bash
+# 终端1:启动后端服务
+go run main.go
+
+# 终端2:启动前端开发服务器
+cd web
+npm run dev
+```
+
+- 前端地址: `http://localhost:3012`
+- 后端 API: `http://localhost:5678/api/v1`
+- 前端自动代理 API 请求到后端
+
+#### 方式二:单服务模式
+
+**后端同时提供 API 和前端静态文件**
+
+```bash
+# 1. 构建前端
+cd web
+npm run build
+cd ..
+
+# 2. 启动服务
+go run main.go
+```
+
+访问: `http://localhost:5678`
+
+### 🗄️ 数据库初始化
+
+数据库表会在首次启动时自动创建(使用 GORM AutoMigrate),无需手动迁移。
+
+---
+
+## 📦 部署指南
+
+### 🐳 Docker 部署(推荐)
+
+#### 方式一:Docker Compose(推荐)
+
+#### 🚀 国内网络加速(可选)
+
+如果您在国内网络环境下,Docker 拉取镜像和安装依赖可能较慢。可以通过配置镜像源加速构建过程。
+
+**步骤 1:创建环境变量文件**
+
+```bash
+cp .env.example .env
+```
+
+**步骤 2:编辑 `.env` 文件,取消注释需要的镜像源**
+
+```bash
+# 启用 Docker Hub 镜像(推荐)
+DOCKER_REGISTRY=docker.1ms.run/
+
+# 启用 npm 镜像
+NPM_REGISTRY=https://registry.npmmirror.com/
+
+# 启用 Go 代理
+GO_PROXY=https://goproxy.cn,direct
+
+# 启用 Alpine 镜像
+ALPINE_MIRROR=mirrors.aliyun.com
+```
+
+**步骤 3:使用 docker compose 构建(必须)**
+
+```bash
+docker compose build
+```
+
+> **重要说明**:
+>
+> - ⚠️ 必须使用 `docker compose build` 才能自动加载 `.env` 文件中的镜像源配置
+> - ❌ 如果使用 `docker build` 命令,需要手动传递 `--build-arg` 参数
+> - ✅ 推荐始终使用 `docker compose build` 进行构建
+
+**效果对比**:
+
+| 操作 | 不配置镜像源 | 配置镜像源后 |
+| ------------- | ------------ | ------------ |
+| 拉取基础镜像 | 5-30 分钟 | 1-5 分钟 |
+| 安装 npm 依赖 | 可能失败 | 快速成功 |
+| 下载 Go 依赖 | 5-10 分钟 | 30 秒-1 分钟 |
+
+> **注意**:国外用户请勿配置镜像源,使用默认配置即可。
+
+```bash
+# 启动服务
+docker-compose up -d
+
+# 查看日志
+docker-compose logs -f
+
+# 停止服务
+docker-compose down
+```
+
+#### 方式二:Docker 命令
+
+> **注意**:Linux 用户需添加 `--add-host=host.docker.internal:host-gateway` 以访问宿主机服务
+
+```bash
+# 从 Docker Hub 运行
+docker run -d \
+ --name huobao-drama \
+ -p 5678:5678 \
+ -v $(pwd)/data:/app/data \
+ --restart unless-stopped \
+ huobao/huobao-drama:latest
+
+# 查看日志
+docker logs -f huobao-drama
+```
+
+**本地构建**(可选):
+
+```bash
+docker build -t huobao-drama:latest .
+docker run -d --name huobao-drama -p 5678:5678 -v $(pwd)/data:/app/data huobao-drama:latest
+```
+
+**Docker 部署优势:**
+
+- ✅ 开箱即用,内置默认配置
+- ✅ 环境一致性,避免依赖问题
+- ✅ 一键启动,无需安装 Go、Node.js、FFmpeg
+- ✅ 易于迁移和扩展
+- ✅ 自动健康检查和重启
+- ✅ 自动处理文件权限,无需手动配置
+
+#### 🔗 访问宿主机服务(Ollama/本地模型)
+
+容器已配置支持访问宿主机服务,直接使用 `http://host.docker.internal:端口号` 即可。
+
+**配置步骤:**
+
+1. **宿主机启动服务(监听所有接口)**
+
+ ```bash
+ export OLLAMA_HOST=0.0.0.0:11434 && ollama serve
+ ```
+
+2. **前端 AI 服务配置**
+ - Base URL: `http://host.docker.internal:11434/v1`
+ - Provider: `openai`
+ - Model: `qwen2.5:latest`
+
+---
+
+### 🏭 传统部署方式
+
+#### 1. 编译构建
+
+```bash
+# 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. 服务器配置
+
+```bash
+# 上传文件到服务器
+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`:
+
+```ini
+[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
+```
+
+启动服务:
+
+```bash
+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` 错误:
+
+```bash
+# 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-data`、`ubuntu`
+- CentOS/RHEL: `nginx`、`apache`
+- 自定义部署: `deploy`、`app`、当前登录用户
+
+#### 5. Nginx 反向代理
+
+```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/;
+ }
+}
+```
+
+---
+
+## 🎨 技术栈
+
+### 后端技术
+
+- **语言**: Go 1.23+
+- **Web 框架**: Gin 1.9+
+- **ORM**: GORM
+- **数据库**: SQLite
+- **日志**: Zap
+- **视频处理**: FFmpeg
+- **AI 服务**: OpenAI、Gemini、火山等
+
+### 前端技术
+
+- **框架**: Vue 3.4+
+- **语言**: TypeScript 5+
+- **构建工具**: Vite 5
+- **UI 组件**: Element Plus
+- **CSS 框架**: TailwindCSS
+- **状态管理**: Pinia
+- **路由**: Vue Router 4
+
+### 开发工具
+
+- **包管理**: Go Modules, npm
+- **代码规范**: ESLint, Prettier
+- **版本控制**: Git
+
+---
+
+## 📝 常见问题
+
+### Q: Docker 容器如何访问宿主机的 Ollama?
+
+A: 使用 `http://host.docker.internal:11434/v1` 作为 Base URL。注意两点:
+
+1. 宿主机 Ollama 需监听 `0.0.0.0`:`export OLLAMA_HOST=0.0.0.0:11434 && ollama serve`
+2. Linux 用户使用 `docker run` 需添加:`--add-host=host.docker.internal:host-gateway`
+
+详见:[DOCKER_HOST_ACCESS.md](docs/DOCKER_HOST_ACCESS.md)
+
+### Q: FFmpeg 未安装或找不到?
+
+A: 确保 FFmpeg 已安装并在 PATH 环境变量中。运行 `ffmpeg -version` 验证。
+
+### Q: 前端无法连接后端 API?
+
+A: 检查后端是否启动,端口是否正确。开发模式下前端代理配置在 `web/vite.config.ts`。
+
+### Q: 数据库表未创建?
+
+A: GORM 会在首次启动时自动创建表,检查日志确认迁移是否成功。
+
+---
+
+## � 更新日志 / Changelog
+
+### v1.0.2 (2026-01-16)
+
+#### 🚀 重大更新
+
+- SQLite 纯 Go 驱动(`modernc.org/sqlite`),支持 `CGO_ENABLED=0` 跨平台编译
+- 优化并发性能(WAL 模式),解决 "database is locked" 错误
+- Docker 跨平台支持 `host.docker.internal` 访问宿主机服务
+- 精简文档和部署指南
+
+### v1.0.1 (2026-01-14)
+
+#### 🐛 Bug Fixes / 🔧 Improvements
+
+- 修复视频生成 API 响应解析问题
+- 添加 OpenAI Sora 视频端点配置
+- 优化错误处理和日志输出
+
+---
+
+## 🤝 贡献指南
+
+欢迎提交 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 聚合站点](https://api.chatfire.site/models)
+
+---
+
+## 👨💻 关于我们
+
+**AI 火宝 - AI 工作室创业中**
+
+- 🏠 **位置**: 中国南京
+- 🚀 **状态**: 创业中
+- 📧 **Email**: [18550175439@163.com](mailto:18550175439@163.com)
+- 💬 **微信**: dangbao1117 (私人微信不解答任何技术问题)
+- 🐙 **GitHub**: [https://github.com/chatfire-AI/huobao-drama](https://github.com/chatfire-AI/huobao-drama)
+
+> _"让 AI 帮我们做更有创造力的事"_
+
+## 项目交流群
+
+
+
+- 提交 [Issue](../../issues)
+- 发送邮件至项目维护者
+
+---
+
+
+
+**⭐ 如果这个项目对你有帮助,请给一个 Star!**
+
+## Star History
+
+[](https://www.star-history.com/#chatfire-AI/huobao-drama&type=date&legend=top-left)
+Made with ❤️ by Huobao Team
+
+
diff --git a/README-EN.md b/README-EN.md
deleted file mode 100644
index 4c1733d..0000000
--- a/README-EN.md
+++ /dev/null
@@ -1,537 +0,0 @@
-# 🎬 Huobao Drama - AI Short Drama Production Platform
-
-
-
-**Full-stack AI Short Drama Automation Platform Based on Go + Vue3**
-
-[](https://golang.org)
-[](https://vuejs.org)
-[](https://creativecommons.org/licenses/by-nc-sa/4.0/)
-
-[Features](#features) • [Quick Start](#quick-start) • [Deployment](#deployment)
-
-[简体中文](README.md) | [English](README-EN.md)
-
-
-
----
-
-## 📖 About
-
-Huobao Drama is an AI-powered short drama production platform that automates the entire workflow from script generation, character design, storyboarding to video composition.
-
-### 🎯 Core Features
-
-- **🤖 AI-Driven**: Parse scripts using large language models to extract characters, scenes, and storyboards
-- **🎨 Intelligent Creation**: AI-generated character portraits and scene backgrounds
-- **📹 Video Generation**: Automatic storyboard video generation using text-to-video and image-to-video models
-- **🔄 Complete Workflow**: End-to-end production workflow from idea to final video
-
-### 🛠️ Technical Architecture
-
-Based on **DDD (Domain-Driven Design)** with clear layering:
-
-```
-├── API Layer (Gin HTTP)
-├── Application Service Layer (Business Logic)
-├── Domain Layer (Domain Models)
-└── Infrastructure Layer (Database, External Services)
-```
-
-### 🎥 Demo Videos
-
-Experience AI short drama generation:
-
-
-
-**Sample Work 1**
-
-
-
-**Sample Work 2**
-
-
-
-[Watch Video 1](https://ffile.chatfire.site/cf/public/20260114094337396.mp4) | [Watch Video 2](https://ffile.chatfire.site/cf/public/fcede75e8aeafe22031dbf78f86285b8.mp4)
-
-
-
----
-
-## ✨ Features
-
-### 🎭 Character Management
-- ✅ AI-generated character portraits
-- ✅ Batch character generation
-- ✅ Character image upload and management
-
-### 🎬 Storyboard Production
-- ✅ Automatic storyboard script generation
-- ✅ Scene descriptions and shot design
-- ✅ Storyboard image generation (text-to-image)
-- ✅ Frame type selection (first frame/key frame/last frame/panel)
-
-### 🎥 Video Generation
-- ✅ Automatic image-to-video generation
-- ✅ Video composition and editing
-- ✅ Transition effects
-
-### 📦 Asset Management
-- ✅ Unified asset library management
-- ✅ Local storage support
-- ✅ Asset import/export
-- ✅ Task progress tracking
-
----
-
-## 🚀 Quick Start
-
-### 📋 Prerequisites
-
-| Software | Version | Description |
-|----------|---------|-------------|
-| **Go** | 1.23+ | Backend runtime |
-| **Node.js** | 18+ | Frontend build environment |
-| **npm** | 9+ | Package manager |
-| **FFmpeg** | 4.0+ | Video processing (**Required**) |
-| **SQLite** | 3.x | Database (built-in) |
-
-#### Installing FFmpeg
-
-**macOS:**
-```bash
-brew install ffmpeg
-```
-
-**Ubuntu/Debian:**
-```bash
-sudo apt update
-sudo apt install ffmpeg
-```
-
-**Windows:**
-Download from [FFmpeg Official Site](https://ffmpeg.org/download.html) and configure environment variables
-
-Verify installation:
-```bash
-ffmpeg -version
-```
-
-### ⚙️ Configuration
-
-Copy and edit the configuration file:
-
-```bash
-cp configs/config.example.yaml configs/config.yaml
-vim configs/config.yaml
-```
-
-Configuration file format (`configs/config.yaml`):
-
-```yaml
-app:
- name: "Huobao Drama API"
- version: "1.0.0"
- debug: true # Set to true for development, false for production
-
-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"
-```
-
-**Key Configuration Items:**
-- `app.debug`: Debug mode switch (recommended true for development)
-- `server.port`: Service port
-- `server.cors_origins`: Allowed CORS origins for frontend
-- `database.path`: SQLite database file path
-- `storage.local_path`: Local file storage path
-- `storage.base_url`: Static resource access URL
-- `ai.default_*_provider`: AI service provider configuration (API keys configured in Web UI)
-
-### 📥 Installation
-
-```bash
-# Clone the project
-git clone https://github.com/chatfire-AI/huobao-drama.git
-cd huobao-drama
-
-# Install Go dependencies
-go mod download
-
-# Install frontend dependencies
-cd web
-npm install
-cd ..
-```
-
-### 🎯 Starting the Project
-
-#### Method 1: Development Mode (Recommended)
-
-**Frontend and backend separation with hot reload**
-
-```bash
-# Terminal 1: Start backend service
-go run main.go
-
-# Terminal 2: Start frontend dev server
-cd web
-npm run dev
-```
-
-- Frontend: `http://localhost:3012`
-- Backend API: `http://localhost:5678/api/v1`
-- Frontend automatically proxies API requests to backend
-
-#### Method 2: Single Service Mode
-
-**Backend serves both API and frontend static files**
-
-```bash
-# 1. Build frontend
-cd web
-npm run build
-cd ..
-
-# 2. Start service
-go run main.go
-```
-
-Access: `http://localhost:5678`
-
-### 🗄️ Database Initialization
-
-Database tables are automatically created on first startup (using GORM AutoMigrate), no manual migration needed.
-
----
-
-## 📦 Deployment
-
-### 🐳 Docker Deployment (Recommended)
-
-#### Method 1: Docker Compose (Recommended)
-
-```bash
-# Start services
-docker-compose up -d
-
-# View logs
-docker-compose logs -f
-
-# Stop services
-docker-compose down
-```
-
-#### Method 2: Docker Command
-
-> **Note**: Linux users need to add `--add-host=host.docker.internal:host-gateway` to access host services
-
-```bash
-# Run from Docker Hub
-docker run -d \
- --name huobao-drama \
- -p 5678:5678 \
- -v $(pwd)/data:/app/data \
- --restart unless-stopped \
- huobao/huobao-drama:latest
-
-# View logs
-docker logs -f huobao-drama
-```
-
-**Local Build** (optional):
-```bash
-docker build -t huobao-drama:latest .
-docker run -d --name huobao-drama -p 5678:5678 -v $(pwd)/data:/app/data huobao-drama:latest
-```
-
-**Docker Deployment Advantages:**
-- ✅ Ready to use with default configuration
-- ✅ Environment consistency, avoiding dependency issues
-- ✅ One-click start, no need to install Go, Node.js, FFmpeg
-- ✅ Easy to migrate and scale
-- ✅ Automatic health checks and restarts
-- ✅ Automatic file permission handling
-
-#### 🔗 Accessing Host Services (Ollama/Local Models)
-
-The container is configured to access host services using `http://host.docker.internal:PORT`.
-
-**Configuration Steps:**
-
-1. **Start service on host (listen on all interfaces)**
- ```bash
- export OLLAMA_HOST=0.0.0.0:11434 && ollama serve
- ```
-
-2. **Frontend AI Service Configuration**
- - Base URL: `http://host.docker.internal:11434/v1`
- - Provider: `openai`
- - Model: `qwen2.5:latest`
-
----
-
-### 🏭 Traditional Deployment
-
-#### 1. Build
-
-```bash
-# 1. Build frontend
-cd web
-npm run build
-cd ..
-
-# 2. Compile backend
-go build -o huobao-drama .
-```
-
-Generated files:
-- `huobao-drama` - Backend executable
-- `web/dist/` - Frontend static files (embedded in backend)
-
-#### 2. Prepare Deployment Files
-
-Files to upload to server:
-```
-huobao-drama # Backend executable
-configs/config.yaml # Configuration file
-data/ # Data directory (optional, auto-created on first run)
-```
-
-#### 3. Server Configuration
-
-```bash
-# Upload files to server
-scp huobao-drama user@server:/opt/huobao-drama/
-scp configs/config.yaml user@server:/opt/huobao-drama/configs/
-
-# SSH to server
-ssh user@server
-
-# Modify configuration file
-cd /opt/huobao-drama
-vim configs/config.yaml
-# Set mode to production
-# Configure domain and storage path
-
-# Create data directory and set permissions (Important!)
-# Note: Replace YOUR_USER with actual user running the service (e.g., 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
-
-# Grant execute permission
-chmod +x huobao-drama
-
-# Start service
-./huobao-drama
-```
-
-#### 4. Manage Service with systemd
-
-Create service file `/etc/systemd/system/huobao-drama.service`:
-
-```ini
-[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 variables (optional)
-# Environment="GIN_MODE=release"
-
-[Install]
-WantedBy=multi-user.target
-```
-
-Start service:
-```bash
-sudo systemctl daemon-reload
-sudo systemctl enable huobao-drama
-sudo systemctl start huobao-drama
-sudo systemctl status huobao-drama
-```
-
-**⚠️ Common Issue: SQLite Write Permission Error**
-
-If you encounter `attempt to write a readonly database` error:
-
-```bash
-# 1. Check current user running the service
-sudo systemctl status huobao-drama | grep "Main PID"
-ps aux | grep huobao-drama
-
-# 2. Fix permissions (replace YOUR_USER with actual username)
-sudo chown -R YOUR_USER:YOUR_USER /opt/huobao-drama/data
-sudo chmod -R 755 /opt/huobao-drama/data
-
-# 3. Verify permissions
-ls -la /opt/huobao-drama/data
-# Should show owner as the user running the service
-
-# 4. Restart service
-sudo systemctl restart huobao-drama
-```
-
-**Reason:**
-- SQLite requires write permission on both the database file **and** its directory
-- Needs to create temporary files in the directory (e.g., `-wal`, `-journal`)
-- **Key**: Ensure systemd `User` matches data directory owner
-
-**Common Usernames:**
-- Ubuntu/Debian: `www-data`, `ubuntu`
-- CentOS/RHEL: `nginx`, `apache`
-- Custom deployment: `deploy`, `app`, current logged-in user
-
-#### 5. Nginx Reverse Proxy
-
-```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;
- }
-
- # Direct access to static files
- location /static/ {
- alias /opt/huobao-drama/data/storage/;
- }
-}
-```
-
----
-
-## 🎨 Tech Stack
-
-### Backend
-- **Language**: Go 1.23+
-- **Web Framework**: Gin 1.9+
-- **ORM**: GORM
-- **Database**: SQLite
-- **Logging**: Zap
-- **Video Processing**: FFmpeg
-- **AI Services**: OpenAI, Gemini, Doubao, etc.
-
-### Frontend
-- **Framework**: Vue 3.4+
-- **Language**: TypeScript 5+
-- **Build Tool**: Vite 5
-- **UI Components**: Element Plus
-- **CSS Framework**: TailwindCSS
-- **State Management**: Pinia
-- **Router**: Vue Router 4
-
-### Development Tools
-- **Package Management**: Go Modules, npm
-- **Code Standards**: ESLint, Prettier
-- **Version Control**: Git
-
----
-
-## 📝 FAQ
-
-### Q: How can Docker containers access Ollama on the host?
-A: Use `http://host.docker.internal:11434/v1` as Base URL. Note two things:
-1. Host Ollama needs to listen on `0.0.0.0`: `export OLLAMA_HOST=0.0.0.0:11434 && ollama serve`
-2. Linux users using `docker run` need to add: `--add-host=host.docker.internal:host-gateway`
-
-See: [DOCKER_HOST_ACCESS.md](docs/DOCKER_HOST_ACCESS.md)
-
-### Q: FFmpeg not installed or not found?
-A: Ensure FFmpeg is installed and in the PATH environment variable. Verify with `ffmpeg -version`.
-
-### Q: Frontend cannot connect to backend API?
-A: Check if backend is running and port is correct. In development mode, frontend proxy config is in `web/vite.config.ts`.
-
-### Q: Database tables not created?
-A: GORM automatically creates tables on first startup, check logs to confirm migration success.
-
----
-
-## 📋 Changelog
-
-### v1.0.2 (2026-01-16)
-
-#### 🚀 Major Updates
-- Pure Go SQLite driver (`modernc.org/sqlite`), supports `CGO_ENABLED=0` cross-platform compilation
-- Optimized concurrency performance (WAL mode), resolved "database is locked" errors
-- Docker cross-platform support for `host.docker.internal` to access host services
-- Streamlined documentation and deployment guides
-
-### v1.0.1 (2026-01-14)
-
-#### 🐛 Bug Fixes / 🔧 Improvements
-- Fixed video generation API response parsing issues
-- Added OpenAI Sora video endpoint configuration
-- Optimized error handling and logging
-
----
-
-## 🤝 Contributing
-
-Issues and Pull Requests are welcome!
-
-1. Fork this project
-2. Create a feature branch (`git checkout -b feature/AmazingFeature`)
-3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)
-4. Push to the branch (`git push origin feature/AmazingFeature`)
-5. Open a Pull Request
-
----
-
-## API Configuration Site
-Configure in 2 minutes: [API Aggregation Site](https://api.chatfire.site/models)
-
-## 📧 Contact
-Business Contact (WeChat): dangbao1117
-
-## Community Group
-
-- Submit [Issue](../../issues)
-- Email project maintainers
-
----
-
-
-
-**⭐ If this project helps you, please give it a Star!**
-
-## Star History
-
-[](https://www.star-history.com/#chatfire-AI/huobao-drama&type=date&legend=top-left)
-
-Made with ❤️ by Huobao Team
-
-
diff --git a/README-JA.md b/README-JA.md
new file mode 100644
index 0000000..64d27b3
--- /dev/null
+++ b/README-JA.md
@@ -0,0 +1,625 @@
+# 🎬 Huobao Drama - AI ショートドラマ制作プラットフォーム
+
+
+
+**Go + Vue3 ベースのフルスタック AI ショートドラマ自動化プラットフォーム**
+
+[](https://golang.org)
+[](https://vuejs.org)
+[](https://creativecommons.org/licenses/by-nc-sa/4.0/)
+
+[機能](#機能) • [クイックスタート](#クイックスタート) • [デプロイ](#デプロイ)
+
+[简体中文](README-CN.md) | [English](README.md) | [日本語](README-JA.md)
+
+
+
+---
+
+## 📖 概要
+
+Huobao Drama は、脚本生成、キャラクターデザイン、絵コンテ作成から動画合成までの全ワークフローを自動化する AI 駆動のショートドラマ制作プラットフォームです。
+
+### 🎯 主要機能
+
+- **🤖 AI 駆動**: 大規模言語モデルを使用して脚本を解析し、キャラクター、シーン、絵コンテ情報を抽出
+- **🎨 インテリジェント創作**: AI によるキャラクターポートレートとシーン背景の生成
+- **📹 動画生成**: テキストから動画、画像から動画モデルによる絵コンテ動画の自動生成
+- **🔄 完全なワークフロー**: アイデアから完成動画までのエンドツーエンド制作ワークフロー
+
+### 🛠️ 技術アーキテクチャ
+
+**DDD(ドメイン駆動設計)** に基づく明確なレイヤー構造:
+
+```
+├── APIレイヤー (Gin HTTP)
+├── アプリケーションサービスレイヤー (ビジネスロジック)
+├── ドメインレイヤー (ドメインモデル)
+└── インフラストラクチャレイヤー (データベース、外部サービス)
+```
+
+### 🎥 デモ動画
+
+AI ショートドラマ生成を体験:
+
+
+
+**サンプル作品 1**
+
+
+
+**サンプル作品 2**
+
+
+
+[動画 1 を見る](https://ffile.chatfire.site/cf/public/20260114094337396.mp4) | [動画 2 を見る](https://ffile.chatfire.site/cf/public/fcede75e8aeafe22031dbf78f86285b8.mp4)
+
+
+
+---
+
+## ✨ 機能
+
+### 🎭 キャラクター管理
+
+- ✅ AI 生成キャラクターポートレート
+- ✅ バッチキャラクター生成
+- ✅ キャラクター画像のアップロードと管理
+
+### 🎬 絵コンテ制作
+
+- ✅ 自動絵コンテスクリプト生成
+- ✅ シーン説明とショットデザイン
+- ✅ 絵コンテ画像生成(テキストから画像)
+- ✅ フレームタイプ選択(先頭フレーム/キーフレーム/末尾フレーム/パネル)
+
+### 🎥 動画生成
+
+- ✅ 画像から動画の自動生成
+- ✅ 動画合成と編集
+- ✅ トランジション効果
+
+### 📦 アセット管理
+
+- ✅ 統合アセットライブラリ管理
+- ✅ ローカルストレージサポート
+- ✅ アセットのインポート/エクスポート
+- ✅ タスク進捗トラッキング
+
+---
+
+## 🚀 クイックスタート
+
+### 📋 前提条件
+
+| ソフトウェア | バージョン | 説明 |
+| ------------ | ---------- | ------------------------ |
+| **Go** | 1.23+ | バックエンドランタイム |
+| **Node.js** | 18+ | フロントエンドビルド環境 |
+| **npm** | 9+ | パッケージマネージャー |
+| **FFmpeg** | 4.0+ | 動画処理(**必須**) |
+| **SQLite** | 3.x | データベース(内蔵) |
+
+#### FFmpeg のインストール
+
+**macOS:**
+
+```bash
+brew install ffmpeg
+```
+
+**Ubuntu/Debian:**
+
+```bash
+sudo apt update
+sudo apt install ffmpeg
+```
+
+**Windows:**
+[FFmpeg 公式サイト](https://ffmpeg.org/download.html)からダウンロードし、環境変数を設定
+
+インストール確認:
+
+```bash
+ffmpeg -version
+```
+
+### ⚙️ 設定
+
+設定ファイルをコピーして編集:
+
+```bash
+cp configs/config.example.yaml configs/config.yaml
+vim configs/config.yaml
+```
+
+設定ファイル形式(`configs/config.yaml`):
+
+```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`: フロントエンドの許可 CORS オリジン
+- `database.path`: SQLite データベースファイルパス
+- `storage.local_path`: ローカルファイルストレージパス
+- `storage.base_url`: 静的リソースアクセス URL
+- `ai.default_*_provider`: AI サービスプロバイダー設定(API キーは Web UI で設定)
+
+### 📥 インストール
+
+```bash
+# プロジェクトをクローン
+git clone https://github.com/chatfire-AI/huobao-drama.git
+cd huobao-drama
+
+# Go依存関係をインストール
+go mod download
+
+# フロントエンド依存関係をインストール
+cd web
+npm install
+cd ..
+```
+
+### 🎯 プロジェクトの起動
+
+#### 方法 1: 開発モード(推奨)
+
+**フロントエンドとバックエンドを分離、ホットリロード対応**
+
+```bash
+# ターミナル1: バックエンドサービスを起動
+go run main.go
+
+# ターミナル2: フロントエンド開発サーバーを起動
+cd web
+npm run dev
+```
+
+- フロントエンド: `http://localhost:3012`
+- バックエンド API: `http://localhost:5678/api/v1`
+- フロントエンドは API リクエストを自動的にバックエンドにプロキシ
+
+#### 方法 2: シングルサービスモード
+
+**バックエンドが API とフロントエンド静的ファイルの両方を提供**
+
+```bash
+# 1. フロントエンドをビルド
+cd web
+npm run build
+cd ..
+
+# 2. サービスを起動
+go run main.go
+```
+
+アクセス: `http://localhost:5678`
+
+### 🗄️ データベース初期化
+
+データベーステーブルは初回起動時に自動作成されます(GORM AutoMigrate を使用)。手動マイグレーションは不要です。
+
+---
+
+## 📦 デプロイ
+
+### 🐳 Docker デプロイ(推奨)
+
+#### 方法 1: Docker Compose(推奨)
+
+#### 🚀 中国国内ネットワーク高速化(オプション)
+
+中国国内のネットワーク環境では、Docker イメージのプルや依存関係のインストールが遅い場合があります。ミラーソースを設定することでビルドプロセスを高速化できます。
+
+**ステップ 1: 環境変数ファイルを作成**
+
+```bash
+cp .env.example .env
+```
+
+**ステップ 2: `.env` ファイルを編集し、必要なミラーソースのコメントを解除**
+
+```bash
+# Docker Hub ミラーを有効化(推奨)
+DOCKER_REGISTRY=docker.1ms.run/
+
+# npm ミラーを有効化
+NPM_REGISTRY=https://registry.npmmirror.com/
+
+# Go プロキシを有効化
+GO_PROXY=https://goproxy.cn,direct
+
+# Alpine ミラーを有効化
+ALPINE_MIRROR=mirrors.aliyun.com
+```
+
+**ステップ 3: docker compose でビルド(必須)**
+
+```bash
+docker compose build
+```
+
+> **重要な注意事項**:
+>
+> - ⚠️ `.env` ファイルのミラーソース設定を自動的に読み込むには `docker compose build` を使用する必要があります
+> - ❌ `docker build` コマンドを使用する場合は、手動で `--build-arg` パラメータを渡す必要があります
+> - ✅ 常に `docker compose build` を使用してビルドすることを推奨
+
+**パフォーマンス比較**:
+
+| 操作 | ミラー未設定 | ミラー設定後 |
+| ------------------------ | -------------- | ------------ |
+| ベースイメージのプル | 5-30 分 | 1-5 分 |
+| npm 依存関係インストール | 失敗する可能性 | 高速成功 |
+| Go 依存関係ダウンロード | 5-10 分 | 30 秒-1 分 |
+
+> **注意**: 中国国外のユーザーはミラーソースを設定せず、デフォルト設定を使用してください。
+
+```bash
+# サービスを起動
+docker-compose up -d
+
+# ログを表示
+docker-compose logs -f
+
+# サービスを停止
+docker-compose down
+```
+
+#### 方法 2: Docker コマンド
+
+> **注意**: Linux ユーザーはホストサービスにアクセスするために `--add-host=host.docker.internal:host-gateway` を追加する必要があります
+
+```bash
+# Docker Hubから実行
+docker run -d \
+ --name huobao-drama \
+ -p 5678:5678 \
+ -v $(pwd)/data:/app/data \
+ --restart unless-stopped \
+ huobao/huobao-drama:latest
+
+# ログを表示
+docker logs -f huobao-drama
+```
+
+**ローカルビルド**(オプション):
+
+```bash
+docker build -t huobao-drama:latest .
+docker run -d --name huobao-drama -p 5678:5678 -v $(pwd)/data:/app/data huobao-drama:latest
+```
+
+**Docker デプロイの利点:**
+
+- ✅ デフォルト設定ですぐに使用可能
+- ✅ 環境の一貫性、依存関係の問題を回避
+- ✅ ワンクリック起動、Go、Node.js、FFmpeg のインストール不要
+- ✅ 移行とスケーリングが容易
+- ✅ 自動ヘルスチェックと再起動
+- ✅ ファイル権限の自動処理
+
+#### 🔗 ホストサービスへのアクセス(Ollama/ローカルモデル)
+
+コンテナは `http://host.docker.internal:ポート番号` を使用してホストサービスにアクセスするよう設定されています。
+
+**設定手順:**
+
+1. **ホストでサービスを起動(全インターフェースでリッスン)**
+
+ ```bash
+ export OLLAMA_HOST=0.0.0.0:11434 && ollama serve
+ ```
+
+2. **フロントエンド AI サービス設定**
+ - Base URL: `http://host.docker.internal:11434/v1`
+ - Provider: `openai`
+ - Model: `qwen2.5:latest`
+
+---
+
+### 🏭 従来のデプロイ方法
+
+#### 1. ビルド
+
+```bash
+# 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. サーバー設定
+
+```bash
+# ファイルをサーバーにアップロード
+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` を作成:
+
+```ini
+[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
+```
+
+サービスを起動:
+
+```bash
+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` エラーが発生した場合:
+
+```bash
+# 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-data`、`ubuntu`
+- CentOS/RHEL: `nginx`、`apache`
+- カスタムデプロイ: `deploy`、`app`、現在ログインしているユーザー
+
+#### 5. Nginx リバースプロキシ
+
+```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/;
+ }
+}
+```
+
+---
+
+## 🎨 技術スタック
+
+### バックエンド
+
+- **言語**: Go 1.23+
+- **Web フレームワーク**: Gin 1.9+
+- **ORM**: GORM
+- **データベース**: SQLite
+- **ログ**: Zap
+- **動画処理**: FFmpeg
+- **AI サービス**: OpenAI、Gemini、Doubao など
+
+### フロントエンド
+
+- **フレームワーク**: Vue 3.4+
+- **言語**: TypeScript 5+
+- **ビルドツール**: Vite 5
+- **UI コンポーネント**: Element Plus
+- **CSS フレームワーク**: TailwindCSS
+- **状態管理**: Pinia
+- **ルーター**: Vue Router 4
+
+### 開発ツール
+
+- **パッケージ管理**: Go Modules、npm
+- **コード規約**: ESLint、Prettier
+- **バージョン管理**: Git
+
+---
+
+## 📝 よくある質問
+
+### Q: Docker コンテナからホストの Ollama にアクセスするには?
+
+A: Base URL として `http://host.docker.internal:11434/v1` を使用します。注意点:
+
+1. ホストの Ollama は `0.0.0.0` でリッスンする必要があります: `export OLLAMA_HOST=0.0.0.0:11434 && ollama serve`
+2. `docker run` を使用する Linux ユーザーは追加が必要: `--add-host=host.docker.internal:host-gateway`
+
+詳細: [DOCKER_HOST_ACCESS.md](docs/DOCKER_HOST_ACCESS.md)
+
+### Q: FFmpeg がインストールされていない、または見つからない?
+
+A: FFmpeg がインストールされ、PATH 環境変数に含まれていることを確認してください。`ffmpeg -version` で確認。
+
+### Q: フロントエンドがバックエンド API に接続できない?
+
+A: バックエンドが実行中で、ポートが正しいか確認してください。開発モードでは、フロントエンドプロキシ設定は `web/vite.config.ts` にあります。
+
+### Q: データベーステーブルが作成されない?
+
+A: GORM は初回起動時にテーブルを自動作成します。ログでマイグレーション成功を確認してください。
+
+---
+
+## 📋 更新履歴
+
+### v1.0.2 (2026-01-16)
+
+#### 🚀 主要アップデート
+
+- 純粋な Go SQLite ドライバー(`modernc.org/sqlite`)、`CGO_ENABLED=0` クロスプラットフォームコンパイルをサポート
+- 並行性能を最適化(WAL モード)、"database is locked" エラーを解決
+- ホストサービスへのアクセス用 `host.docker.internal` の Docker クロスプラットフォームサポート
+- ドキュメントとデプロイガイドの簡素化
+
+### v1.0.1 (2026-01-14)
+
+#### 🐛 バグ修正 / 🔧 改善
+
+- 動画生成 API レスポンスのパース問題を修正
+- OpenAI Sora 動画エンドポイント設定を追加
+- エラー処理とログ出力を最適化
+
+---
+
+## 🤝 コントリビューション
+
+Issue と Pull Request を歓迎します!
+
+1. このプロジェクトをフォーク
+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 集約サイト](https://api.chatfire.site/models)
+
+---
+
+## 👨💻 私たちについて
+
+**AI 火宝 - AI スタジオ起業中**
+
+- 🏠 **所在地**: 中国南京
+- 🚀 **ステータス**: 起業中
+- 📧 **Email**: [18550175439@163.com](mailto:18550175439@163.com)
+- 💬 **WeChat**: dangbao1117 (個人 WeChat - 技術的な質問には対応しません)
+- 🐙 **GitHub**: [https://github.com/chatfire-AI/huobao-drama](https://github.com/chatfire-AI/huobao-drama)
+
+> _「AI に私たちのより創造的なことを手伝ってもらおう」_
+
+## コミュニティグループ
+
+
+
+- [Issue](../../issues)を提出
+- プロジェクトメンテナにメール
+
+---
+
+
+
+**⭐ このプロジェクトが役に立ったら、Star をお願いします!**
+
+## Star 履歴
+
+[](https://www.star-history.com/#chatfire-AI/huobao-drama&type=date&legend=top-left)
+
+Made with ❤️ by Huobao Team
+
+
diff --git a/README.md b/README.md
index b49889f..85b3c9b 100644
--- a/README.md
+++ b/README.md
@@ -1,140 +1,145 @@
-# 🎬 Huobao Drama - AI短剧生成平台
+# 🎬 Huobao Drama - AI Short Drama Production Platform
-**基于 Go + Vue3 的全栈AI短剧自动化生产平台**
+**Full-stack AI Short Drama Automation Platform Based on Go + Vue3**
[](https://golang.org)
[](https://vuejs.org)
[](https://creativecommons.org/licenses/by-nc-sa/4.0/)
-[功能特性](#功能特性) • [快速开始](#快速开始) • [部署指南](#部署指南)
+[Features](#features) • [Quick Start](#quick-start) • [Deployment](#deployment)
-[简体中文](README.md) | [English](README-EN.md)
+[简体中文](README-CN.md) | [English](README.md) | [日本語](README-JA.md)
---
-## 📖 项目简介 / About
-
-Huobao Drama 是一个基于AI的短剧自动化生产平台,实现从剧本生成、角色设计、分镜制作到视频合成的全流程自动化。
+## 📖 About
Huobao Drama is an AI-powered short drama production platform that automates the entire workflow from script generation, character design, storyboarding to video composition.
-### 🎯 核心价值 / Core Features
+### 🎯 Core Features
-- **🤖 AI驱动 / AI-Driven**:使用大语言模型解析剧本,提取角色、场景和分镜信息 | Parse scripts using large language models to extract characters, scenes, and storyboards
-- **🎨 智能创作 / Intelligent Creation**:AI绘图生成角色形象和场景背景 | AI-generated character portraits and scene backgrounds
-- **📹 视频生成 / Video Generation**:基于文生视频和图生视频模型自动生成分镜视频 | Automatic storyboard video generation using text-to-video and image-to-video models
-- **🔄 工作流 / Workflow**:完整的短剧制作工作流,从创意到成片一站式完成 | Complete production workflow from idea to final video
+- **🤖 AI-Driven**: Parse scripts using large language models to extract characters, scenes, and storyboards
+- **🎨 Intelligent Creation**: AI-generated character portraits and scene backgrounds
+- **📹 Video Generation**: Automatic storyboard video generation using text-to-video and image-to-video models
+- **🔄 Complete Workflow**: End-to-end production workflow from idea to final video
-### 🛠️ 技术架构
+### 🛠️ Technical Architecture
-采用**DDD领域驱动设计**,清晰分层:
+Based on **DDD (Domain-Driven Design)** with clear layering:
```
-├── API层 (Gin HTTP)
-├── 应用服务层 (Business Logic)
-├── 领域层 (Domain Models)
-└── 基础设施层 (Database, External Services)
+├── API Layer (Gin HTTP)
+├── Application Service Layer (Business Logic)
+├── Domain Layer (Domain Models)
+└── Infrastructure Layer (Database, External Services)
```
-### 🎥 作品展示 / Demo Videos
+### 🎥 Demo Videos
-体验 AI 短剧生成效果:
+Experience AI short drama generation:
-**示例作品 1**
+**Sample Work 1**
-**示例作品 2**
+**Sample Work 2**
-[点击观看视频 1](https://ffile.chatfire.site/cf/public/20260114094337396.mp4) | [点击观看视频 2](https://ffile.chatfire.site/cf/public/fcede75e8aeafe22031dbf78f86285b8.mp4)
+[Watch Video 1](https://ffile.chatfire.site/cf/public/20260114094337396.mp4) | [Watch Video 2](https://ffile.chatfire.site/cf/public/fcede75e8aeafe22031dbf78f86285b8.mp4)
---
-## ✨ 功能特性
+## ✨ Features
-### 🎭 角色管理
-- ✅ AI生成角色形象
-- ✅ 批量角色生成
-- ✅ 角色图片上传和管理
+### 🎭 Character Management
-### 🎬 分镜制作
-- ✅ 自动生成分镜脚本
-- ✅ 场景描述和镜头设计
-- ✅ 分镜图片生成(文生图)
-- ✅ 帧类型选择(首帧/关键帧/尾帧/分镜板)
+- ✅ AI-generated character portraits
+- ✅ Batch character generation
+- ✅ Character image upload and management
-### 🎥 视频生成
-- ✅ 图生视频自动生成
-- ✅ 视频合成和剪辑
-- ✅ 转场效果
+### 🎬 Storyboard Production
-### 📦 资源管理
-- ✅ 素材库统一管理
-- ✅ 本地存储支持
-- ✅ 资源导入导出
-- ✅ 任务进度追踪
+- ✅ Automatic storyboard script generation
+- ✅ Scene descriptions and shot design
+- ✅ Storyboard image generation (text-to-image)
+- ✅ Frame type selection (first frame/key frame/last frame/panel)
+
+### 🎥 Video Generation
+
+- ✅ Automatic image-to-video generation
+- ✅ Video composition and editing
+- ✅ Transition effects
+
+### 📦 Asset Management
+
+- ✅ Unified asset library management
+- ✅ Local storage support
+- ✅ Asset import/export
+- ✅ Task progress tracking
---
-## 🚀 快速开始
+## 🚀 Quick Start
-### 📋 环境要求
+### 📋 Prerequisites
-| 软件 | 版本要求 | 说明 |
-|------|---------|------|
-| **Go** | 1.23+ | 后端运行环境 |
-| **Node.js** | 18+ | 前端构建环境 |
-| **npm** | 9+ | 包管理工具 |
-| **FFmpeg** | 4.0+ | 视频处理(**必需**) |
-| **SQLite** | 3.x | 数据库(已内置) |
+| Software | Version | Description |
+| ----------- | ------- | ------------------------------- |
+| **Go** | 1.23+ | Backend runtime |
+| **Node.js** | 18+ | Frontend build environment |
+| **npm** | 9+ | Package manager |
+| **FFmpeg** | 4.0+ | Video processing (**Required**) |
+| **SQLite** | 3.x | Database (built-in) |
-#### 安装 FFmpeg
+#### Installing FFmpeg
**macOS:**
+
```bash
brew install ffmpeg
```
**Ubuntu/Debian:**
+
```bash
sudo apt update
sudo apt install ffmpeg
```
**Windows:**
-从 [FFmpeg官网](https://ffmpeg.org/download.html) 下载并配置环境变量
+Download from [FFmpeg Official Site](https://ffmpeg.org/download.html) and configure environment variables
+
+Verify installation:
-验证安装:
```bash
ffmpeg -version
```
-### ⚙️ 配置文件
+### ⚙️ Configuration
-复制并编辑配置文件:
+Copy and edit the configuration file:
```bash
cp configs/config.example.yaml configs/config.yaml
vim configs/config.yaml
```
-配置文件格式(`configs/config.yaml`):
+Configuration file format (`configs/config.yaml`):
```yaml
app:
name: "Huobao Drama API"
version: "1.0.0"
- debug: true # 开发环境设为true,生产环境设为false
+ debug: true # Set to true for development, false for production
server:
port: 5678
@@ -161,95 +166,144 @@ ai:
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)
+**Key Configuration Items:**
-### 📥 安装依赖
+- `app.debug`: Debug mode switch (recommended true for development)
+- `server.port`: Service port
+- `server.cors_origins`: Allowed CORS origins for frontend
+- `database.path`: SQLite database file path
+- `storage.local_path`: Local file storage path
+- `storage.base_url`: Static resource access URL
+- `ai.default_*_provider`: AI service provider configuration (API keys configured in Web UI)
+
+### 📥 Installation
```bash
-# 克隆项目
+# Clone the project
git clone https://github.com/chatfire-AI/huobao-drama.git
cd huobao-drama
-# 安装Go依赖
+# Install Go dependencies
go mod download
-# 安装前端依赖
+# Install frontend dependencies
cd web
npm install
cd ..
```
-### 🎯 启动项目
+### 🎯 Starting the Project
-#### 方式一:开发模式(推荐)
+#### Method 1: Development Mode (Recommended)
-**前后端分离,支持热重载**
+**Frontend and backend separation with hot reload**
```bash
-# 终端1:启动后端服务
+# Terminal 1: Start backend service
go run main.go
-# 终端2:启动前端开发服务器
+# Terminal 2: Start frontend dev server
cd web
npm run dev
```
-- 前端地址: `http://localhost:3012`
-- 后端API: `http://localhost:5678/api/v1`
-- 前端自动代理API请求到后端
+- Frontend: `http://localhost:3012`
+- Backend API: `http://localhost:5678/api/v1`
+- Frontend automatically proxies API requests to backend
-#### 方式二:单服务模式
+#### Method 2: Single Service Mode
-**后端同时提供API和前端静态文件**
+**Backend serves both API and frontend static files**
```bash
-# 1. 构建前端
+# 1. Build frontend
cd web
npm run build
cd ..
-# 2. 启动服务
+# 2. Start service
go run main.go
```
-访问: `http://localhost:5678`
+Access: `http://localhost:5678`
-### 🗄️ 数据库初始化
+### 🗄️ Database Initialization
-数据库表会在首次启动时自动创建(使用GORM AutoMigrate),无需手动迁移。
+Database tables are automatically created on first startup (using GORM AutoMigrate), no manual migration needed.
---
-## 📦 部署指南
+## 📦 Deployment
-### 🐳 Docker 部署(推荐)
+### 🐳 Docker Deployment (Recommended)
-#### 方式一:Docker Compose(推荐)
+#### Method 1: Docker Compose (Recommended)
+
+#### 🚀 China Network Acceleration (Optional)
+
+If you are in China, pulling Docker images and installing dependencies may be slow. You can speed up the build process by configuring mirror sources.
+
+**Step 1: Create environment variable file**
```bash
-# 启动服务
+cp .env.example .env
+```
+
+**Step 2: Edit `.env` file and uncomment the mirror sources you need**
+
+```bash
+# Enable Docker Hub mirror (recommended)
+DOCKER_REGISTRY=docker.1ms.run/
+
+# Enable npm mirror
+NPM_REGISTRY=https://registry.npmmirror.com/
+
+# Enable Go proxy
+GO_PROXY=https://goproxy.cn,direct
+
+# Enable Alpine mirror
+ALPINE_MIRROR=mirrors.aliyun.com
+```
+
+**Step 3: Build with docker compose (required)**
+
+```bash
+docker compose build
+```
+
+> **Important Note**:
+>
+> - ⚠️ You must use `docker compose build` to automatically load mirror source configurations from the `.env` file
+> - ❌ If using `docker build` command, you need to manually pass `--build-arg` parameters
+> - ✅ Always recommended to use `docker compose build` for building
+
+**Performance Comparison**:
+
+| Operation | Without Mirrors | With Mirrors |
+| ---------------- | --------------- | ------------ |
+| Pull base images | 5-30 minutes | 1-5 minutes |
+| Install npm deps | May fail | Fast success |
+| Download Go deps | 5-10 minutes | 30s-1 minute |
+
+> **Note**: Users outside China should not configure mirror sources, use default settings.
+
+```bash
+# Start services
docker-compose up -d
-# 查看日志
+# View logs
docker-compose logs -f
-# 停止服务
+# Stop services
docker-compose down
```
-#### 方式二:Docker 命令
+#### Method 2: Docker Command
-> **注意**:Linux 用户需添加 `--add-host=host.docker.internal:host-gateway` 以访问宿主机服务
+> **Note**: Linux users need to add `--add-host=host.docker.internal:host-gateway` to access host services
```bash
-# 从 Docker Hub 运行
+# Run from Docker Hub
docker run -d \
--name huobao-drama \
-p 5678:5678 \
@@ -257,101 +311,106 @@ docker run -d \
--restart unless-stopped \
huobao/huobao-drama:latest
-# 查看日志
+# View logs
docker logs -f huobao-drama
```
-**本地构建**(可选):
+**Local Build** (optional):
+
```bash
docker build -t huobao-drama:latest .
docker run -d --name huobao-drama -p 5678:5678 -v $(pwd)/data:/app/data huobao-drama:latest
```
-**Docker 部署优势:**
-- ✅ 开箱即用,内置默认配置
-- ✅ 环境一致性,避免依赖问题
-- ✅ 一键启动,无需安装 Go、Node.js、FFmpeg
-- ✅ 易于迁移和扩展
-- ✅ 自动健康检查和重启
-- ✅ 自动处理文件权限,无需手动配置
+**Docker Deployment Advantages:**
-#### 🔗 访问宿主机服务(Ollama/本地模型)
+- ✅ Ready to use with default configuration
+- ✅ Environment consistency, avoiding dependency issues
+- ✅ One-click start, no need to install Go, Node.js, FFmpeg
+- ✅ Easy to migrate and scale
+- ✅ Automatic health checks and restarts
+- ✅ Automatic file permission handling
-容器已配置支持访问宿主机服务,直接使用 `http://host.docker.internal:端口号` 即可。
+#### 🔗 Accessing Host Services (Ollama/Local Models)
-**配置步骤:**
+The container is configured to access host services using `http://host.docker.internal:PORT`.
+
+**Configuration Steps:**
+
+1. **Start service on host (listen on all interfaces)**
-1. **宿主机启动服务(监听所有接口)**
```bash
export OLLAMA_HOST=0.0.0.0:11434 && ollama serve
```
-2. **前端 AI 服务配置**
+2. **Frontend AI Service Configuration**
- Base URL: `http://host.docker.internal:11434/v1`
- Provider: `openai`
- Model: `qwen2.5:latest`
---
-### 🏭 传统部署方式
+### 🏭 Traditional Deployment
-#### 1. 编译构建
+#### 1. Build
```bash
-# 1. 构建前端
+# 1. Build frontend
cd web
npm run build
cd ..
-# 2. 编译后端
+# 2. Compile backend
go build -o huobao-drama .
```
-生成文件:
-- `huobao-drama` - 后端可执行文件
-- `web/dist/` - 前端静态文件(已嵌入后端)
+Generated files:
-#### 2. 准备部署文件
+- `huobao-drama` - Backend executable
+- `web/dist/` - Frontend static files (embedded in backend)
+
+#### 2. Prepare Deployment Files
+
+Files to upload to server:
-需要上传到服务器的文件:
```
-huobao-drama # 后端可执行文件
-configs/config.yaml # 配置文件
-data/ # 数据目录(可选,首次运行自动创建)
+huobao-drama # Backend executable
+configs/config.yaml # Configuration file
+data/ # Data directory (optional, auto-created on first run)
```
-#### 3. 服务器配置
+#### 3. Server Configuration
```bash
-# 上传文件到服务器
+# Upload files to server
scp huobao-drama user@server:/opt/huobao-drama/
scp configs/config.yaml user@server:/opt/huobao-drama/configs/
-# SSH登录服务器
+# SSH to server
ssh user@server
-# 修改配置文件
+# Modify configuration file
cd /opt/huobao-drama
vim configs/config.yaml
-# 设置mode为production
-# 配置域名和存储路径
+# Set mode to production
+# Configure domain and storage path
-# 创建数据目录并设置权限(重要!)
-# 注意:将 YOUR_USER 替换为实际运行服务的用户名(如 www-data、ubuntu、deploy 等)
+# Create data directory and set permissions (Important!)
+# Note: Replace YOUR_USER with actual user running the service (e.g., 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
-# 赋予执行权限
+# Grant execute permission
chmod +x huobao-drama
-# 启动服务
+# Start service
./huobao-drama
```
-#### 4. 使用 systemd 管理服务
+#### 4. Manage Service with systemd
-创建服务文件 `/etc/systemd/system/huobao-drama.service`:
+Create service file `/etc/systemd/system/huobao-drama.service`:
```ini
[Unit]
@@ -366,14 +425,15 @@ ExecStart=/opt/huobao-drama/huobao-drama
Restart=on-failure
RestartSec=10
-# 环境变量(可选)
+# Environment variables (optional)
# Environment="GIN_MODE=release"
[Install]
WantedBy=multi-user.target
```
-启动服务:
+Start service:
+
```bash
sudo systemctl daemon-reload
sudo systemctl enable huobao-drama
@@ -381,38 +441,40 @@ sudo systemctl start huobao-drama
sudo systemctl status huobao-drama
```
-**⚠️ 常见问题:SQLite 写权限错误**
+**⚠️ Common Issue: SQLite Write Permission Error**
-如果遇到 `attempt to write a readonly database` 错误:
+If you encounter `attempt to write a readonly database` error:
```bash
-# 1. 确认当前运行服务的用户
+# 1. Check current user running the service
sudo systemctl status huobao-drama | grep "Main PID"
ps aux | grep huobao-drama
-# 2. 修复权限(将 YOUR_USER 替换为实际用户名)
+# 2. Fix permissions (replace YOUR_USER with actual username)
sudo chown -R YOUR_USER:YOUR_USER /opt/huobao-drama/data
sudo chmod -R 755 /opt/huobao-drama/data
-# 3. 验证权限
+# 3. Verify permissions
ls -la /opt/huobao-drama/data
-# 应该显示所有者为运行服务的用户
+# Should show owner as the user running the service
-# 4. 重启服务
+# 4. Restart service
sudo systemctl restart huobao-drama
```
-**原因说明**:
-- SQLite 需要对数据库文件 **和** 所在目录都有写权限
-- 需要在目录中创建临时文件(如 `-wal`、`-journal`)
-- **关键**:确保 systemd 配置中的 `User` 与数据目录所有者一致
+**Reason:**
-**常用用户名**:
-- Ubuntu/Debian: `www-data`、`ubuntu`
-- CentOS/RHEL: `nginx`、`apache`
-- 自定义部署: `deploy`、`app`、当前登录用户
+- SQLite requires write permission on both the database file **and** its directory
+- Needs to create temporary files in the directory (e.g., `-wal`, `-journal`)
+- **Key**: Ensure systemd `User` matches data directory owner
-#### 5. Nginx 反向代理
+**Common Usernames:**
+
+- Ubuntu/Debian: `www-data`, `ubuntu`
+- CentOS/RHEL: `nginx`, `apache`
+- Custom deployment: `deploy`, `app`, current logged-in user
+
+#### 5. Nginx Reverse Proxy
```nginx
server {
@@ -426,7 +488,7 @@ server {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
- # 静态文件直接访问
+ # Direct access to static files
location /static/ {
alias /opt/huobao-drama/data/storage/;
}
@@ -435,102 +497,129 @@ server {
---
-## 🎨 技术栈
+## 🎨 Tech Stack
-### 后端技术
-- **语言**: Go 1.23+
-- **Web框架**: Gin 1.9+
+### Backend
+
+- **Language**: Go 1.23+
+- **Web Framework**: Gin 1.9+
- **ORM**: GORM
-- **数据库**: SQLite
-- **日志**: Zap
-- **视频处理**: FFmpeg
-- **AI服务**: OpenAI、Gemini、火山等
+- **Database**: SQLite
+- **Logging**: Zap
+- **Video Processing**: FFmpeg
+- **AI Services**: OpenAI, Gemini, Doubao, etc.
-### 前端技术
-- **框架**: Vue 3.4+
-- **语言**: TypeScript 5+
-- **构建工具**: Vite 5
-- **UI组件**: Element Plus
-- **CSS框架**: TailwindCSS
-- **状态管理**: Pinia
-- **路由**: Vue Router 4
+### Frontend
-### 开发工具
-- **包管理**: Go Modules, npm
-- **代码规范**: ESLint, Prettier
-- **版本控制**: Git
+- **Framework**: Vue 3.4+
+- **Language**: TypeScript 5+
+- **Build Tool**: Vite 5
+- **UI Components**: Element Plus
+- **CSS Framework**: TailwindCSS
+- **State Management**: Pinia
+- **Router**: Vue Router 4
+
+### Development Tools
+
+- **Package Management**: Go Modules, npm
+- **Code Standards**: ESLint, Prettier
+- **Version Control**: Git
---
-## 📝 常见问题
+## 📝 FAQ
-### Q: Docker 容器如何访问宿主机的 Ollama?
-A: 使用 `http://host.docker.internal:11434/v1` 作为 Base URL。注意两点:
-1. 宿主机 Ollama 需监听 `0.0.0.0`:`export OLLAMA_HOST=0.0.0.0:11434 && ollama serve`
-2. Linux 用户使用 `docker run` 需添加:`--add-host=host.docker.internal:host-gateway`
+### Q: How can Docker containers access Ollama on the host?
-详见:[DOCKER_HOST_ACCESS.md](docs/DOCKER_HOST_ACCESS.md)
+A: Use `http://host.docker.internal:11434/v1` as Base URL. Note two things:
-### Q: FFmpeg未安装或找不到?
-A: 确保FFmpeg已安装并在PATH环境变量中。运行 `ffmpeg -version` 验证。
+1. Host Ollama needs to listen on `0.0.0.0`: `export OLLAMA_HOST=0.0.0.0:11434 && ollama serve`
+2. Linux users using `docker run` need to add: `--add-host=host.docker.internal:host-gateway`
-### Q: 前端无法连接后端API?
-A: 检查后端是否启动,端口是否正确。开发模式下前端代理配置在 `web/vite.config.ts`。
+See: [DOCKER_HOST_ACCESS.md](docs/DOCKER_HOST_ACCESS.md)
-### Q: 数据库表未创建?
-A: GORM会在首次启动时自动创建表,检查日志确认迁移是否成功。
+### Q: FFmpeg not installed or not found?
+
+A: Ensure FFmpeg is installed and in the PATH environment variable. Verify with `ffmpeg -version`.
+
+### Q: Frontend cannot connect to backend API?
+
+A: Check if backend is running and port is correct. In development mode, frontend proxy config is in `web/vite.config.ts`.
+
+### Q: Database tables not created?
+
+A: GORM automatically creates tables on first startup, check logs to confirm migration success.
---
-## � 更新日志 / Changelog
+## 📋 Changelog
### v1.0.2 (2026-01-16)
-#### 🚀 重大更新
-- SQLite 纯 Go 驱动(`modernc.org/sqlite`),支持 `CGO_ENABLED=0` 跨平台编译
-- 优化并发性能(WAL 模式),解决 "database is locked" 错误
-- Docker 跨平台支持 `host.docker.internal` 访问宿主机服务
-- 精简文档和部署指南
+#### 🚀 Major Updates
+
+- Pure Go SQLite driver (`modernc.org/sqlite`), supports `CGO_ENABLED=0` cross-platform compilation
+- Optimized concurrency performance (WAL mode), resolved "database is locked" errors
+- Docker cross-platform support for `host.docker.internal` to access host services
+- Streamlined documentation and deployment guides
### v1.0.1 (2026-01-14)
#### 🐛 Bug Fixes / 🔧 Improvements
-- 修复视频生成 API 响应解析问题
-- 添加 OpenAI Sora 视频端点配置
-- 优化错误处理和日志输出
+
+- Fixed video generation API response parsing issues
+- Added OpenAI Sora video endpoint configuration
+- Optimized error handling and logging
---
-## 🤝 贡献指南
+## 🤝 Contributing
-欢迎提交 Issue 和 Pull Request!
+Issues and Pull Requests are welcome!
-1. Fork 本项目
-2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
-3. 提交改动 (`git commit -m 'Add some AmazingFeature'`)
-4. 推送到分支 (`git push origin feature/AmazingFeature`)
-5. 开启 Pull Request
+1. Fork this project
+2. Create a feature branch (`git checkout -b feature/AmazingFeature`)
+3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)
+4. Push to the branch (`git push origin feature/AmazingFeature`)
+5. Open a Pull Request
---
-## API配置站点
-2分钟完成配置:[API聚合站点](https://api.chatfire.site/models)
+## API Configuration Site
-## 📧 联系方式
-商务联系V:dangbao1117
-## 项目交流群
-
-- 提交 [Issue](../../issues)
-- 发送邮件至项目维护者
+Configure in 2 minutes: [API Aggregation Site](https://api.chatfire.site/models)
+
+---
+
+## 👨💻 About Us
+
+**AI Huobao - AI Studio Startup**
+
+- 🏠 **Location**: Nanjing, China
+- 🚀 **Status**: Startup in Progress
+- 📧 **Email**: [18550175439@163.com](mailto:18550175439@163.com)
+- 💬 **WeChat**: dangbao1117 (Personal WeChat - No technical support)
+- 🐙 **GitHub**: [https://github.com/chatfire-AI/huobao-drama](https://github.com/chatfire-AI/huobao-drama)
+
+> _"Let AI help us do more creative things"_
+
+## Community Group
+
+
+
+- Submit [Issue](../../issues)
+- Email project maintainers
---
-**⭐ 如果这个项目对你有帮助,请给一个Star!**
+**⭐ If this project helps you, please give it a Star!**
+
## Star History
[](https://www.star-history.com/#chatfire-AI/huobao-drama&type=date&legend=top-left)
+
Made with ❤️ by Huobao Team
diff --git a/api/handlers/scene.go b/api/handlers/scene.go
index 1367992..cf9fa4f 100644
--- a/api/handlers/scene.go
+++ b/api/handlers/scene.go
@@ -74,6 +74,28 @@ func (h *SceneHandler) GenerateSceneImage(c *gin.Context) {
})
}
+func (h *SceneHandler) UpdateScenePrompt(c *gin.Context) {
+ sceneID := c.Param("scene_id")
+
+ var req services2.UpdateScenePromptRequest
+ if err := c.ShouldBindJSON(&req); err != nil {
+ response.BadRequest(c, "Invalid request")
+ return
+ }
+
+ if err := h.sceneService.UpdateScenePrompt(sceneID, &req); err != nil {
+ h.log.Errorw("Failed to update scene prompt", "error", err, "scene_id", sceneID)
+ if err.Error() == "scene not found" {
+ response.NotFound(c, "场景不存在")
+ return
+ }
+ response.InternalError(c, err.Error())
+ return
+ }
+
+ response.Success(c, gin.H{"message": "场景提示词已更新"})
+}
+
func (h *SceneHandler) DeleteScene(c *gin.Context) {
sceneID := c.Param("scene_id")
diff --git a/api/routes/routes.go b/api/routes/routes.go
index 4b5c04a..98b9c6d 100644
--- a/api/routes/routes.go
+++ b/api/routes/routes.go
@@ -137,6 +137,7 @@ func SetupRouter(cfg *config.Config, db *gorm.DB, log *logger.Logger, localStora
scenes := api.Group("/scenes")
{
scenes.PUT("/:scene_id", sceneHandler.UpdateScene)
+ scenes.PUT("/:scene_id/prompt", sceneHandler.UpdateScenePrompt)
scenes.DELETE("/:scene_id", sceneHandler.DeleteScene)
scenes.POST("/generate-image", sceneHandler.GenerateSceneImage)
}
diff --git a/application/services/storyboard_composition_service.go b/application/services/storyboard_composition_service.go
index 0b203c3..9264729 100644
--- a/application/services/storyboard_composition_service.go
+++ b/application/services/storyboard_composition_service.go
@@ -399,6 +399,28 @@ func (s *StoryboardCompositionService) GenerateSceneImage(req *GenerateSceneImag
return nil, fmt.Errorf("image generation service not available")
}
+type UpdateScenePromptRequest struct {
+ Prompt string `json:"prompt"`
+}
+
+func (s *StoryboardCompositionService) UpdateScenePrompt(sceneID string, req *UpdateScenePromptRequest) error {
+ var scene models.Scene
+ if err := s.db.Where("id = ?", sceneID).First(&scene).Error; err != nil {
+ if err == gorm.ErrRecordNotFound {
+ return fmt.Errorf("scene not found")
+ }
+ return fmt.Errorf("failed to find scene: %w", err)
+ }
+
+ scene.Prompt = req.Prompt
+ if err := s.db.Save(&scene).Error; err != nil {
+ return fmt.Errorf("failed to update scene prompt: %w", err)
+ }
+
+ s.log.Infow("Scene prompt updated", "scene_id", sceneID, "prompt", req.Prompt)
+ return nil
+}
+
func (s *StoryboardCompositionService) DeleteScene(sceneID string) error {
var scene models.Scene
if err := s.db.Where("id = ?", sceneID).First(&scene).Error; err != nil {
diff --git a/docker-compose.yml b/docker-compose.yml
index 1610fc8..807ae5e 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -5,6 +5,15 @@ services:
build:
context: .
dockerfile: Dockerfile
+ args:
+ # Docker Hub 镜像源(注意末尾斜杠)
+ DOCKER_REGISTRY: ${DOCKER_REGISTRY:-}
+ # npm 镜像源
+ NPM_REGISTRY: ${NPM_REGISTRY:-}
+ # Go 代理
+ GO_PROXY: ${GO_PROXY:-}
+ # Alpine apk 镜像源
+ ALPINE_MIRROR: ${ALPINE_MIRROR:-}
ports:
- "5678:5678"
volumes:
diff --git a/drama.png b/drama.png
index d20193d..f09ff20 100644
Binary files a/drama.png and b/drama.png differ
diff --git a/pkg/ai/openai_client.go b/pkg/ai/openai_client.go
index 83734fc..d9f82e1 100644
--- a/pkg/ai/openai_client.go
+++ b/pkg/ai/openai_client.go
@@ -168,6 +168,7 @@ func (c *OpenAIClient) sendChatRequest(req *ChatCompletionRequest) (*ChatComplet
if len(chatResp.Choices) > 0 {
finishReason := chatResp.Choices[0].FinishReason
content := chatResp.Choices[0].Message.Content
+ usage := chatResp.Usage
fmt.Printf("OpenAI: finish_reason=%s, content_length=%d\n", finishReason, len(content))
@@ -175,7 +176,7 @@ func (c *OpenAIClient) sendChatRequest(req *ChatCompletionRequest) (*ChatComplet
return nil, fmt.Errorf("AI内容被安全过滤器拦截,可能因为:\n1. 请求内容触发了安全策略\n2. 生成的内容包含敏感信息\n3. 建议:调整输入内容或联系API提供商调整过滤策略")
}
- if content == "" && finishReason != "stop" {
+ if usage.TotalTokens == 0 && finishReason != "stop" {
return nil, fmt.Errorf("AI返回内容为空 (finish_reason: %s),可能的原因:\n1. 内容被过滤\n2. Token限制\n3. API异常", finishReason)
}
}
@@ -238,7 +239,7 @@ func (c *OpenAIClient) TestConnection() error {
},
}
- _, err := c.ChatCompletion(messages, WithMaxTokens(10))
+ _, err := c.ChatCompletion(messages, WithMaxTokens(50))
if err != nil {
fmt.Printf("OpenAI: TestConnection failed: %v\n", err)
} else {
diff --git a/pkg/image/gemini_image_client.go b/pkg/image/gemini_image_client.go
index 3ffa427..08e9926 100644
--- a/pkg/image/gemini_image_client.go
+++ b/pkg/image/gemini_image_client.go
@@ -107,7 +107,7 @@ func NewGeminiImageClient(baseURL, apiKey, model, endpoint string) *GeminiImageC
func (c *GeminiImageClient) GenerateImage(prompt string, opts ...ImageOption) (*ImageResult, error) {
options := &ImageOptions{
- Size: "1024x1024",
+ Size: "1920x1920",
Quality: "standard",
}
diff --git a/pkg/image/volcengine_image_client.go b/pkg/image/volcengine_image_client.go
index 243f7fb..13f182b 100644
--- a/pkg/image/volcengine_image_client.go
+++ b/pkg/image/volcengine_image_client.go
@@ -63,7 +63,7 @@ func NewVolcEngineImageClient(baseURL, apiKey, model, endpoint, queryEndpoint st
func (c *VolcEngineImageClient) GenerateImage(prompt string, opts ...ImageOption) (*ImageResult, error) {
options := &ImageOptions{
- Size: "1024x1024",
+ Size: "1920x1920",
Quality: "standard",
}
diff --git a/web/src/api/drama.ts b/web/src/api/drama.ts
index 34a3acf..12d0cfa 100644
--- a/web/src/api/drama.ts
+++ b/web/src/api/drama.ts
@@ -108,8 +108,12 @@ export const dramaAPI = {
return request.put(`/scenes/${sceneId}`, data)
},
- generateSceneImage(data: { scene_id: string; prompt?: string; model?: string }) {
- return request.post('/scenes/generate-image', data)
+ generateSceneImage(data: { scene_id: number; prompt?: string; model?: string }) {
+ return request.post<{ image_generation: { id: number } }>('/scenes/generate-image', data)
+ },
+
+ updateScenePrompt(sceneId: string, prompt: string) {
+ return request.put(`/scenes/${sceneId}/prompt`, { prompt })
},
deleteScene(sceneId: string) {
diff --git a/web/src/locales/zh-CN.ts b/web/src/locales/zh-CN.ts
index 8eeaa5f..bd8bd14 100644
--- a/web/src/locales/zh-CN.ts
+++ b/web/src/locales/zh-CN.ts
@@ -68,7 +68,9 @@ export default {
tip: '提示',
status: '状态',
createdAt: '创建时间',
- updatedAt: '更新时间'
+ updatedAt: '更新时间',
+ name: '名称',
+ description: '描述'
},
settings: {
title: '设置',
diff --git a/web/src/views/drama/DramaManagement.vue b/web/src/views/drama/DramaManagement.vue
index 8bf61d7..41fcd43 100644
--- a/web/src/views/drama/DramaManagement.vue
+++ b/web/src/views/drama/DramaManagement.vue
@@ -241,10 +241,10 @@
-
+
-
+
@@ -285,8 +285,8 @@ const newCharacter = ref({
})
const newScene = ref({
- name: '',
- description: ''
+ location: '',
+ prompt: ''
})
const episodesCount = computed(() => drama.value?.episodes?.length || 0)
@@ -494,14 +494,14 @@ const deleteCharacter = async (character: any) => {
const openAddSceneDialog = () => {
newScene.value = {
- name: '',
- description: ''
+ location: '',
+ prompt: ''
}
addSceneDialogVisible.value = true
}
const addScene = async () => {
- if (!newScene.value.name.trim()) {
+ if (!newScene.value.location.trim()) {
ElMessage.warning('请输入场景名称')
return
}
@@ -517,7 +517,11 @@ const addScene = async () => {
}
const editScene = (scene: any) => {
- ElMessage.info('编辑功能开发中')
+ newScene.value = {
+ location: scene.location || scene.name || '',
+ prompt: scene.prompt || scene.description || ''
+ }
+ addSceneDialogVisible.value = true
}
const deleteScene = async (scene: any) => {
diff --git a/web/src/views/drama/EpisodeWorkflow.vue b/web/src/views/drama/EpisodeWorkflow.vue
index bd8c7d7..8ab6f9b 100644
--- a/web/src/views/drama/EpisodeWorkflow.vue
+++ b/web/src/views/drama/EpisodeWorkflow.vue
@@ -1601,8 +1601,9 @@ const saveShotEdit = async () => {
// 对话框相关方法
const openPromptDialog = (item: any, type: 'character' | 'scene') => {
currentEditItem.value = item
+ currentEditItem.value.name = item.name || item.location
currentEditType.value = type
- editPrompt.value = item.appearance || item.description || ''
+ editPrompt.value = item.prompt || item.appearance || item.description || ''
promptDialogVisible.value = true
}
@@ -1614,10 +1615,32 @@ const savePrompt = async () => {
})
await generateCharacterImage(currentEditItem.value.id)
} else {
- await dramaAPI.generateSceneImage({
+ // 1. 先保存场景提示词
+ await dramaAPI.updateScenePrompt(currentEditItem.value.id.toString(), editPrompt.value)
+
+ // 2. 生成场景图片
+ const model = selectedImageModel.value || undefined
+ const response = await dramaAPI.generateSceneImage({
scene_id: parseInt(currentEditItem.value.id),
- prompt: editPrompt.value
+ prompt: editPrompt.value,
+ model
})
+ const imageGenId = response.image_generation?.id
+
+ // 3. 轮询图片生成状态
+ if (imageGenId) {
+ ElMessage.info('场景图片生成中,请稍候...')
+ generatingSceneImages.value[currentEditItem.value.id] = true
+ pollImageStatus(imageGenId, async () => {
+ await loadDramaData()
+ ElMessage.success('场景图片生成完成!')
+ }).finally(() => {
+ generatingSceneImages.value[currentEditItem.value.id] = false
+ })
+ } else {
+ ElMessage.success('场景图片生成已启动')
+ await loadDramaData()
+ }
}
promptDialogVisible.value = false
} catch (error: any) {
diff --git a/web/src/views/drama/ProfessionalEditor.vue b/web/src/views/drama/ProfessionalEditor.vue
index baabcd3..0593e4d 100644
--- a/web/src/views/drama/ProfessionalEditor.vue
+++ b/web/src/views/drama/ProfessionalEditor.vue
@@ -386,6 +386,32 @@