waoowaoo Documentation

首家工业级全流程 AI 影视生产平台。Industry-first professional AI Agent platform for controllable film & video production. From shorts to live-action with...

RAW Doc

Docker & Self-Hosted Deployment Verified OCI

Deploy waoowaoo on any server, homelab, or cloud container platform.

1-Click Terminal Command
bash (docker run)
docker run -d --name waoowaoo --restart always mysql:8.0
Configured Services & Ports
⚙️ mysql
image: mysql:8.0
🔌 Ports: 127.0.0.1:${TEST_MYSQL_PORT:-0}:3306
⚙️ redis
image: redis:7-alpine
🔌 Ports: 127.0.0.1:${TEST_REDIS_PORT:-0}:6379
⚙️ temporal-db-bootstrap
image: mysql:8.0
⚙️ temporal-schema
image: temporalio/admin-tools:1.31.2
⚙️ temporal-config
image: busybox:1.37
⚙️ temporal
image: temporalio/server:1.31.2
🔌 Ports: 127.0.0.1:${TEST_TEMPORAL_PORT:-0}:7233
⚙️ temporal-create-namespace
image: temporalio/admin-tools:1.31.2
docker-compose.yml
yaml (docker-compose.yml)
x-logging: &default-logging
  driver: json-file
  options:
    max-size: "50m"
    max-file: "5"

services:
  mysql:
    image: mysql:8.0
    logging: *default-logging
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: waoowaoo_test
      MYSQL_ROOT_HOST: "%"
    ports:
      - "127.0.0.1:${TEST_MYSQL_PORT:-0}:3306"
    command:
      - "--default-authentication-plugin=mysql_native_password"
      - "--sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"
    healthcheck:
      test: ["CMD-SHELL", "mysqladmin ping -h 127.0.0.1 -uroot -proot"]
      interval: 5s
      timeout: 5s
      retries: 30
      start_period: 15s

  redis:
    image: redis:7-alpine
    logging: *default-logging
    ports:
      - "127.0.0.1:${TEST_REDIS_PORT:-0}:6379"
    command: ["redis-server", "--appendonly", "no"]
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 5s
      timeout: 5s
      retries: 30
      start_period: 5s

  temporal-db-bootstrap:
    image: mysql:8.0
    profiles: ["temporal"]
    restart: "no"
    logging: *default-logging
    network_mode: "service:mysql"
    depends_on:
      mysql:
        condition: service_healthy
    environment:
      MYSQL_HOST: 127.0.0.1
      MYSQL_PORT: "3306"
      MYSQL_ROOT_PASSWORD: root
      TEMPORAL_MYSQL_USER: temporal
      TEMPORAL_MYSQL_PASSWORD: temporal-test-only
    entrypoint: ["/bin/sh", "-ec"]
    command:
      - |
        MYSQL_PWD="$$MYSQL_ROOT_PASSWORD" mysql \
          --protocol=TCP --host="$$MYSQL_HOST" --port="$$MYSQL_PORT" --user=root < /config/docker.yaml
        test -s /config/docker.yaml

  temporal:
    image: temporalio/server:1.31.2
    profiles: ["temporal"]
    restart: unless-stopped
    logging: *default-logging
    depends_on:
      temporal-schema:
        condition: service_completed_successfully
      temporal-config:
        condition: service_completed_successfully
    environment:
      DB: mysql8
      DB_PORT: "3306"
      MYSQL_SEEDS: mysql
      MYSQL_USER: temporal
      MYSQL_PWD: temporal-test-only
      BIND_ON_IP: 0.0.0.0
    ports:
      - "127.0.0.1:${TEST_TEMPORAL_PORT:-0}:7233"
    volumes:
      - temporal_test_config:/etc/temporal/config/dynamicconfig:ro
    healthcheck:
      test: ["CMD", "nc", "-z", "127.0.0.1", "7233"]
      interval: 5s
      timeout: 3s
      retries: 60
      start_period: 30s

  temporal-create-namespace:
    image: temporalio/admin-tools:1.31.2
    profiles: ["temporal"]
    restart: "no"
    logging: *default-logging
    depends_on:
      temporal:
        condition: service_healthy
    environment:
      TEMPORAL_ADDRESS: temporal:7233
      TEMPORAL_NAMESPACE: "${TEST_TEMPORAL_NAMESPACE:-waoowaoo-test}"
      TEMPORAL_NAMESPACE_RETENTION: 1d
      TEMPORAL_HEALTH_CHECK_MAX_ATTEMPTS: "60"
      TEMPORAL_HEALTH_CHECK_SLEEP_SECONDS: "1"
    entrypoint: ["/bin/sh", "-ec"]
    command:
      - |
        attempt=1
        until temporal operator cluster health \
          --address "$$TEMPORAL_ADDRESS" >/dev/null 2>&1; do
          if [ "$$attempt" -ge "$$TEMPORAL_HEALTH_CHECK_MAX_ATTEMPTS" ]; then
            echo "Temporal test server did not become healthy" >&2
            exit 1
          fi
          attempt=$$((attempt + 1))
          sleep "$$TEMPORAL_HEALTH_CHECK_SLEEP_SECONDS"
        done
        if temporal operator namespace describe \
          --namespace "$$TEMPORAL_NAMESPACE" \
          --address "$$TEMPORAL_ADDRESS" >/dev/null 2>&1; then
          exit 0
        fi
        temporal operator namespace create \
          --namespace "$$TEMPORAL_NAMESPACE" \
          --retention "$$TEMPORAL_NAMESPACE_RETENTION" \
          --address "$$TEMPORAL_ADDRESS"

volumes:
  temporal_test_config:

File: README.md

waoowaoo AI 影视 Studio

[!IMPORTANT]
⚠️ 测试版声明:本项目目前处于测试初期阶段,由于暂时只有我一个人开发,存在部分 bug 和不完善之处。我们正在快速迭代更新中,欢迎进群反馈问题和需求,及时关注项目更新!目前更新会非常频繁,后续会增加大量新功能以及优化效果,我们的目标是成为行业最强AI工具!


✨ 功能特性

  • 🎬 AI 剧本分析 — 自动解析小说,提取角色、场景、剧情
  • 🎨 角色 & 场景生成 — AI 生成一致性人物和场景图片
  • 📽️ 分镜视频制作 — 自动生成分镜头并合成视频
  • 🎙️ AI 配音 — 多角色语音合成
  • 🌐 多语言支持 — 中文 / 英文界面,右上角一键切换

🚀 快速开始

前提条件:安装 Docker Desktop

方式一:拉取预构建镜像(最简单)

无需克隆仓库,下载即用:

bash
# 下载 docker-compose.yml
curl -O https://raw.githubusercontent.com/saturndec/waoowaoo/main/docker-compose.yml

# 启动所有服务
docker compose up -d

⚠️ 当前为测试版,版本间数据库不兼容。升级请先清除旧数据:

bash
docker compose down -v
docker rmi ghcr.io/saturndec/waoowaoo:latest
curl -O https://raw.githubusercontent.com/saturndec/waoowaoo/main/docker-compose.yml
docker compose up -d

启动后请清空浏览器缓存并重新登录,避免旧版本缓存导致异常。

方式二:克隆仓库 + Docker 构建(完全控制)

bash
git clone https://github.com/saturndec/waoowaoo.git
cd waoowaoo
docker compose up -d

更新版本:

bash
git pull
docker compose down && docker compose up -d --build

方式三:本地开发模式(开发者)

bash
git clone https://github.com/saturndec/waoowaoo.git
cd waoowaoo

# 复制环境变量配置文件(必须在 npm install 之前完成)
cp .env.example .env
# ⚠️ 编辑 .env,填入你的 AI API Key(NEXTAUTH_URL 默认已是 http://localhost:3000,无需修改)

npm install

# 只启动基础设施
# 注意:docker-compose.yml 将服务映射到非标准端口,.env.example 已按此预设
mysql:13306  redis:16379  minio:19000
docker compose up mysql redis minio -d

# 初始化数据库表结构(首次必须执行,跳过会导致启动后报错)
npx prisma db push

# 启动开发服务器
npm run dev

[!WARNING]
跳过 npx prisma db push 会导致所有数据库表不存在,启动后报错 The table 'tasks' does not exist。请务必先运行此命令再启动开发服务器。


访问 http://localhost:13000(方式一、二)或 http://localhost:3000(方式三)开始使用!

首次启动会自动完成数据库初始化,无需任何额外配置。

[!TIP]
如果遇到网页卡顿:HTTP 模式下浏览器可能限制并发连接。可安装 Caddy 启用 HTTPS:

bash
caddy run --config Caddyfile

然后访问 https://localhost:1443


🔧 API 配置

启动后进入设置中心配置 AI 服务的 API Key,内置配置教程。

💡 注意:目前仅推荐使用各服务商官方 API,第三方兼容格式(OpenAI Compatible)尚不完善,后续版本会持续优化。


📦 技术栈

  • 框架: Next.js 15 + React 19
  • 数据库: MySQL + Prisma ORM
  • 队列: Redis + BullMQ
  • 样式: Tailwind CSS v4
  • 认证: NextAuth.js

📦 页面功能预览


🤝 参与方式

本项目由核心团队独立维护。欢迎你通过以下方式参与:

  • 🐛 提交 Issue 反馈 Bug
  • 💡 提交 Issue 提出功能建议
  • 🔧 提交 Pull Request 供参考 — 我们会认真审阅每一个 PR 的思路,但最终由团队自行实现修复,不会直接合并外部 PR

Made with ❤️ by waoowaoo team

Star History


File: README_en.md

waoowaoo AI Video Studio

[!IMPORTANT]
Beta Notice: This project is currently in its early beta stage. As it is currently a solo-developed project, some bugs and imperfections are to be expected. We are iterating rapidly — please stay tuned for frequent updates! We are committed to rolling out a massive roadmap of new features and optimizations, with the ultimate goal of becoming the top-tier solution in the industry. Your feedback and feature requests are highly welcome!


✨ Features

  • 🎬 AI Script Analysis — Parse novels, extract characters, scenes & plot automatically
  • 🎨 Character & Scene Generation — Consistent AI-generated character and scene images
  • 📽️ Storyboard Video — Auto-generate shots and compose into complete videos
  • 🎙️ AI Voiceover — Multi-character voice synthesis
  • 🌐 Bilingual UI — Chinese / English, switch in the top-right corner

🚀 Quick Start

Prerequisites: Install Docker Desktop

Method 1: Pull Pre-built Image (Easiest)

No need to clone the repository. Just download and run:

bash
# Download docker-compose.yml
curl -O https://raw.githubusercontent.com/saturndec/waoowaoo/main/docker-compose.yml

# Start all services
docker compose up -d

⚠️ This is a beta version. Database is not compatible between versions. To upgrade, clear old data first:

bash
docker compose down -v
docker rmi ghcr.io/saturndec/waoowaoo:latest
curl -O https://raw.githubusercontent.com/saturndec/waoowaoo/main/docker-compose.yml
docker compose up -d

After starting, please clear your browser cache and log in again to avoid issues caused by stale cache.

Method 2: Clone & Docker Build (Full Control)

bash
git clone https://github.com/saturndec/waoowaoo.git
cd waoowaoo
docker compose up -d

To update:

bash
git pull
docker compose down && docker compose up -d --build

Method 3: Local Development (For Developers)

bash
git clone https://github.com/saturndec/waoowaoo.git
cd waoowaoo

# Copy environment config (must be done before npm install)
cp .env.example .env
# ⚠️ Edit .env to fill in your AI API Keys (NEXTAUTH_URL defaults to http://localhost:3000, no change needed)

npm install

# Start infrastructure only
docker compose up mysql redis minio -d

# Run database migration
npx prisma db push

# Start development server
npm run dev

Visit http://localhost:13000 (Method 1 & 2) or http://localhost:3000 (Method 3) to get started!

The database is initialized automatically on first launch — no extra configuration needed.

[!TIP]
If you experience lag: HTTP mode may limit browser connections. Install Caddy for HTTPS:

bash
caddy run --config Caddyfile

Then visit https://localhost:1443


🔧 API Configuration

After launching, go to Settings to configure your AI service API keys. A built-in guide is provided.

💡 Note: Currently only official provider APIs are recommended. Third-party compatible formats (OpenAI Compatible) are not yet fully supported and will be improved in future releases.


📦 Tech Stack

  • Framework: Next.js 15 + React 19
  • Database: MySQL + Prisma ORM
  • Queue: Redis + BullMQ
  • Styling: Tailwind CSS v4
  • Auth: NextAuth.js

📦 Preview


🤝 Contributing

This project is maintained by the core team. You're welcome to contribute by:

  • 🐛 Filing Issues — report bugs
  • 💡 Filing Issues — propose features
  • 🔧 Submitting Pull Requests as references — we review every PR carefully for ideas, but the team implements fixes internally rather than merging external PRs directly

Made with ❤️ by waoowaoo team

Star History