๐ฌ Huobao Drama - AI ็ญๅง็ๆๅนณๅฐ
ๅบไบ TypeScript ๅ จๆ ็ AI ็ญๅง่ชๅจๅ็ไบงๅนณๅฐ
ๅ่ฝ็นๆง โข ๅฟซ้ๅผๅง โข ้จ็ฝฒๆๅ
๐ฅ AIๅไฝ็้ฑๆป็ฅ๏ฝๅฟซไน้ฉฌ & Seedance ๅไฝไธๅฑๆๆฃ๏ผไผๆ ๅฐๅบ ๐ ็ซๅณๆฅ็
๐ ้กน็ฎ็ฎไป
Huobao Drama ๆฏไธไธชๅบไบ AI ็็ญๅง่ชๅจๅ็ไบงๅนณๅฐ๏ผๅฎ็ฐไปๅงๆฌ็ๆใ่ง่ฒ่ฎพ่ฎกใๅ้ๅถไฝๅฐ่ง้ขๅๆ็ๅ จๆต็จ่ชๅจๅใ
็ซๅฎ็ญๅงๅไธ็ๅฐๅ๏ผ็ซๅฎ็ญๅงๅไธ็ ็ซๅฎๅฐ่ฏด็ๆ๏ผ็ซๅฎๅฐ่ฏด็ๆ
๐ฏ ๆ ธๅฟไปทๅผ
- ๐ค AI ้ฉฑๅจ๏ผไฝฟ็จๅคง่ฏญ่จๆจกๅ่งฃๆๅงๆฌ๏ผๆๅ่ง่ฒใๅบๆฏๅๅ้ไฟกๆฏ
- ๐จ ๆบ่ฝๅไฝ๏ผAI ็ปๅพ็ๆ่ง่ฒๅฝข่ฑกๅๅบๆฏ่ๆฏ
- ๐น ่ง้ข็ๆ๏ผๅบไบๆ็่ง้ขๅๅพ็่ง้ขๆจกๅ่ชๅจ็ๆๅ้่ง้ข
- ๐ ๅทฅไฝๆต๏ผๅฎๆด็็ญๅงๅถไฝๅทฅไฝๆต๏ผไปๅๆๅฐๆ็ไธ็ซๅผๅฎๆ
๐ ๏ธ ๆๆฏๆถๆ
frontend/ โ Nuxt 3 + Vue 3 + TypeScript (็บฏ CSS๏ผๆ UI ๆกๆถ)
backend/ โ Hono + Drizzle ORM + Mastra AI Agents + better-sqlite3
configs/ โ config.yaml ้
็ฝฎๆไปถ
data/ โ SQLite ๆฐๆฎๅบ + ็ๆ่ตๆบๆไปถ
skills/ โ Agent ๆ่ฝๅฎไน (SKILL.md)
๐ฅ ไฝๅๅฑ็คบ / Demo Videos
ไฝ้ช AI ็ญๅง็ๆๆๆ๏ผ
โจ ๅ่ฝ็นๆง
๐ญ ่ง่ฒ็ฎก็
- โ AI ็ๆ่ง่ฒๅฝข่ฑก
- โ ๆน้่ง่ฒ็ๆ
- โ ่ง่ฒๅพ็ไธไผ ๅ็ฎก็
- โ ่ง่ฒ้ณ่ฒๅ้ ไธ่ฏๅฌ
๐ฌ ๅ้ๅถไฝ
- โ AI ่ชๅจๆ่งฃๅ้่ๆฌ
- โ ๅบๆฏๆ่ฟฐๅ้ๅคด่ฎพ่ฎก
- โ ๅ้ๅพ็็ๆ๏ผๆ็ๅพ๏ผ
- โ ๅฎซๆ ผๅพ็ๆใๅๅไธๅ้
- โ ๅธง็ฑปๅ้ๆฉ๏ผ้ฆๅธง/ๅฐพๅธง/ๅ้ๆฟ๏ผ
๐ฅ ่ง้ข็ๆ
- โ ๅพ็่ง้ข่ชๅจ็ๆ
- โ TTS ้ ้ณ็ๆ
- โ FFmpeg ๅ้ๅคดๅๆ๏ผ่ง้ข + ้ณ้ข + ๅญๅน๏ผ
- โ ๆด้ๆผๆฅๅฏผๅบ
๐ฆ ่ตๆบ็ฎก็
- โ ็ด ๆๅบ็ปไธ็ฎก็
- โ ๆฌๅฐๅญๅจๆฏๆ
- โ ไปปๅก่ฟๅบฆ่ฟฝ่ธช
๐ค AI Agents
ๅ ็ฝฎ 5 ไธช Mastra Agent๏ผๆฏๆๆฐๆฎๅบ้ ็ฝฎๅ Skill ๆฉๅฑ๏ผ
| Agent | ่่ดฃ |
|---|---|
script_rewriter |
ๅฐ่ฏด โ ๆ ผๅผๅๅงๆฌๆนๅ |
extractor |
่ง่ฒ + ๅบๆฏๆบ่ฝๆๅไธๅป้ |
storyboard_breaker |
ๅงๆฌ โ ๅ้ๅบๅๆ่งฃ |
voice_assigner |
่ง่ฒ้ณ่ฒ่ชๅจๅ้ |
grid_prompt_generator |
่ง่ฒ/ๅบๆฏ/ๅฎซๆ ผๅพๆ็คบ่ฏ็ๆ |
๐ ๅคๅๅ้้
| ็ฑปๅ | ๆฏๆๅๅ |
|---|---|
| ๅพ็ | OpenAIใGeminiใMiniMaxใ็ซๅฑฑๅผๆใ้ฟ้ใChatfire |
| ่ง้ข | MiniMaxใ็ซๅฑฑๅผๆ/SeedanceใViduใ้ฟ้ |
| TTS | MiniMax |
๐ ๅฟซ้ๅผๅง
๐ ็ฏๅข่ฆๆฑ
| ่ฝฏไปถ | ็ๆฌ่ฆๆฑ | ่ฏดๆ |
|---|---|---|
| Node.js | 20+ | ๅๅ็ซฏ่ฟ่ก็ฏๅข |
| npm | 9+ | ๅ ็ฎก็ๅทฅๅ ท |
| FFmpeg | 4.0+ | ่ง้ขๅค็๏ผๅฟ ้๏ผ |
ๅฎ่ฃ FFmpeg
macOS:
brew install ffmpegUbuntu/Debian:
sudo apt update && sudo apt install ffmpegWindows: ไป FFmpeg ๅฎ็ฝ ไธ่ฝฝๅนถ้ ็ฝฎ็ฏๅขๅ้
้ช่ฏๅฎ่ฃ ๏ผ
ffmpeg -versionโ๏ธ ้ ็ฝฎๆไปถ
ๅคๅถๅนถ็ผ่พ้ ็ฝฎๆไปถ๏ผ
cp configs/config.example.yaml configs/config.yaml้
็ฝฎๆไปถๆ ผๅผ๏ผconfigs/config.yaml๏ผ๏ผ
app:
name: "Huobao Drama API"
version: "1.0.0"
debug: true
server:
port: 5679
host: "0.0.0.0"
cors_origins:
- "http://localhost:3013"
database:
type: "sqlite"
path: "./data/huobao_drama.db"
storage:
type: "local"
local_path: "./data/storage"
base_url: "http://localhost:5679/static"
ai:
default_text_provider: "openai"
default_image_provider: "openai"
default_video_provider: "doubao"่ฏดๆ๏ผAI ๆๅก็ๅ ทไฝ API Key ๅๆจกๅๅๆฐๅจ Web ็้ข็ใ่ฎพ็ฝฎใ้กต้ขไธญ้ ็ฝฎใ
๐ฅ ๅฎ่ฃ ไพ่ต
# ๅ
้้กน็ฎ
git clone https://github.com/chatfire-AI/huobao-drama.git
cd huobao-drama
# ๅฎ่ฃ
ๅ็ซฏไพ่ต
cd backend && npm install
# ๅฎ่ฃ
ๅ็ซฏไพ่ต
cd ../frontend && npm install๐ฏ ๅฏๅจ้กน็ฎ
ๆนๅผไธ๏ผๅผๅๆจกๅผ๏ผๆจ่๏ผ
ๅๅ็ซฏๅ็ฆป๏ผๆฏๆ็ญ้่ฝฝ๏ผ
# ็ป็ซฏ1๏ผๅฏๅจๅ็ซฏ
cd backend
npm run dev
# ็ป็ซฏ2๏ผๅฏๅจๅ็ซฏ
cd frontend
npm run dev- ๅ็ซฏๅฐๅ:
http://localhost:3013 - ๅ็ซฏ API:
http://localhost:5679/api/v1 - ๅ็ซฏ่ชๅจไปฃ็
/apiๅ/staticๅฐๅ็ซฏ
ๆนๅผไบ๏ผๅๆๅกๆจกๅผ
ๅ็ซฏๅๆถๆไพ API ๅๅ็ซฏ้ๆๆไปถ๏ผ
# 1. ๆๅปบๅ็ซฏ
cd frontend && npm run generate
# 2. ๅฏๅจๅ็ซฏ
cd ../backend && npm start่ฎฟ้ฎ: http://localhost:5679
๐๏ธ ๆฐๆฎๅบ
ๆฐๆฎๅบ่กจๅจ้ฆๆฌกๅฏๅจๆถ่ชๅจๅๅปบ๏ผๆ ้ๆๅจ่ฟ็งปใ้ป่ฎค่ทฏๅพ data/huobao_drama.db๏ผๅฏ้่ฟ็ฏๅขๅ้่ฆ็๏ผ
DB_PATH=/path/to/your.db npm start๐ฆ ้จ็ฝฒๆๅ
๐ณ Docker ้จ็ฝฒ๏ผๆจ่๏ผ
ๆนๅผไธ๏ผDocker Compose๏ผๆจ่๏ผ
# ๅฏๅจๆๅก
docker compose up -d
# ๆฅ็ๆฅๅฟ
docker compose logs -f
# ๅๆญขๆๅก
docker compose downๆนๅผไบ๏ผDocker ๅฝไปค
# ไป Docker Hub ่ฟ่ก
docker run -d \
--name huobao-drama \
-p 5679:5679 \
-v $(pwd)/data:/app/data \
-v $(pwd)/configs/config.yaml:/app/configs/config.yaml \
--restart unless-stopped \
huobao/huobao-drama:latest
# ๆฅ็ๆฅๅฟ
docker logs -f huobao-dramaๆณจๆ๏ผLinux ็จๆท้ๆทปๅ
--add-host=host.docker.internal:host-gatewayไปฅ่ฎฟ้ฎๅฎฟไธปๆบๆๅก
ๆฌๅฐๆๅปบ๏ผๅฏ้๏ผ๏ผ
docker build -t huobao-drama:latest .
docker run -d --name huobao-drama -p 5679:5679 \
-v $(pwd)/data:/app/data \
-v $(pwd)/configs/config.yaml:/app/configs/config.yaml \
huobao-drama:latestDocker ้จ็ฝฒไผๅฟ๏ผ
- โ ๅผ็ฎฑๅณ็จ๏ผๅ ็ฝฎ FFmpeg ๅ้ป่ฎค้ ็ฝฎ
- โ ๅๅ็ซฏๅๅนถไธบๅ้ๅใๅ็ซฏๅฃ
- โ ็ฏๅขไธ่ดๆง๏ผ้ฟๅ ไพ่ต้ฎ้ข
- โ
data/็ฎๅฝ volume ๆ่ฝฝ๏ผๆฐๆฎๆไน ๅ
๐ ่ฎฟ้ฎๅฎฟไธปๆบๆๅก๏ผOllama / ๆฌๅฐๆจกๅ๏ผ
ๅฎนๅจๅ
ๅฏ้่ฟ http://host.docker.internal:็ซฏๅฃๅท ่ฎฟ้ฎๅฎฟไธปๆบๆๅกใ
้ ็ฝฎๆญฅ้ชค๏ผ
-
ๅฎฟไธปๆบๅฏๅจๆๅก๏ผ็ๅฌๆๆๆฅๅฃ๏ผ๏ผ
export OLLAMA_HOST=0.0.0.0:11434 && ollama serve
-
ๅจ Web ็้ขใ่ฎพ็ฝฎ โ AI ๆๅก้ ็ฝฎใไธญๅกซๅ๏ผ
- Base URL:
http://host.docker.internal:11434/v1 - Provider:
openai - Model:
qwen2.5:latest
- Base URL:
๐ญ ไผ ็ป้จ็ฝฒๆนๅผ
# 1. ๆๅปบๅ็ซฏ
cd frontend && npm run generate && cd ..
# 2. ๅฏๅจๅ็ซฏ
cd backend && npm start้่ฆไธไผ ๅฐๆๅกๅจ็ๆไปถ๏ผ
backend/ # ๅ็ซฏๆบ็ + node_modules
frontend/dist/ # ๅ็ซฏๆๅปบไบง็ฉ
configs/config.yaml
data/ # ๆฐๆฎ็ฎๅฝ๏ผ้ฆๆฌก่ฟ่ก่ชๅจๅๅปบ๏ผ
skills/ # Agent ๆ่ฝๆไปถ
Nginx ๅๅไปฃ็
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://localhost:5679;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}๐จ ๆๆฏๆ
ๅ็ซฏ
- ่ฟ่กๆถ: Node.js 20+
- Web ๆกๆถ: Hono
- ORM: Drizzle ORM + better-sqlite3
- AI Agent: Mastra + AI SDK (OpenAI compatible)
- ่ง้ขๅค็: FFmpeg (fluent-ffmpeg)
- ๅพ็ๅค็: Sharp
ๅ็ซฏ
- ๆกๆถ: Nuxt 3 (SPA ๆจกๅผ)
- ่ฏญ่จ: Vue 3 + TypeScript
- ่ทฏ็ฑ: ๆไปถ่ทฏ็ฑ (Vue Router 4)
- ๆ ทๅผ: ็บฏ CSS + CSS Variables (ๆ่ฒไธป้ข)
- ๅพๆ : Lucide Vue
๐ ๅธธ่ง้ฎ้ข
Q: Docker ๅฎนๅจๅฆไฝ่ฎฟ้ฎๅฎฟไธปๆบ็ Ollama๏ผ
A: ไฝฟ็จ http://host.docker.internal:11434/v1 ไฝไธบ Base URLใๆณจๆ๏ผ
- ๅฎฟไธปๆบ Ollama ้็ๅฌ
0.0.0.0๏ผexport OLLAMA_HOST=0.0.0.0:11434 && ollama serve - Linux ็จๆทไฝฟ็จ
docker run้ๆทปๅ ๏ผ--add-host=host.docker.internal:host-gateway
Q: FFmpeg ๆชๅฎ่ฃ ๆๆพไธๅฐ๏ผ
A: ็กฎไฟ FFmpeg ๅทฒๅฎ่ฃ
ๅนถๅจ PATH ็ฏๅขๅ้ไธญใ่ฟ่ก ffmpeg -version ้ช่ฏใDocker ้จ็ฝฒๅทฒๅ
็ฝฎ FFmpegใ
Q: ๅ็ซฏๆ ๆณ่ฟๆฅๅ็ซฏ API๏ผ
A: ๆฃๆฅๅ็ซฏๆฏๅฆๅฏๅจ๏ผ็ซฏๅฃๆฏๅฆๆญฃ็กฎใๅผๅๆจกๅผไธๅ็ซฏไปฃ็้
็ฝฎๅจ frontend/nuxt.config.tsใ
Q: ๆฐๆฎๅบ่กจๆชๅๅปบ๏ผ
A: ๅ็ซฏไผๅจ้ฆๆฌกๅฏๅจๆถ่ชๅจๅๅปบๆๆ่กจ๏ผๆฃๆฅๆฅๅฟ็กฎ่ฎคๅๅงๅๆฏๅฆๆๅใ
๐ ๆดๆฐๆฅๅฟ
v2.0.0 (2026-04)
๐ ้ๅคงๆดๆฐ
- ้กน็ฎๅ
จ้ข่ฟ็งป่ณ TypeScript ๆๆฏๆ
- ๅ็ซฏ๏ผHono + Drizzle ORM + better-sqlite3
- ๅ็ซฏ๏ผNuxt 3 + Vue 3
- AI Agent๏ผMastra ๆกๆถ
- ้ๅๅ้ๅทฅไฝๅฐ UI ๅ็ไบงๆต็จ
- ๆด็ดงๅ็ๆงๅถๅฐๅธๅฑ
- ้ๅๅ้็ผ่พๅบ
- ้ๅ้ ้ณใ้ๅคดๅพใ่ง้ขใๅๆใๅฏผๅบ็้ข
- ๆฐๅข Docker ้จ็ฝฒๆฏๆ๏ผๅๅ็ซฏๅๅนถไธบๅ้ๅ
- ๅขๅ ่ฟ่กๆถ Skill ๅ ่ฝฝๆบๅถ
- ๆฉๅฑๅคๅๅๅชไฝ Adapter
- ๅพ็๏ผOpenAIใGeminiใMiniMaxใ็ซๅฑฑๅผๆใ้ฟ้
- ่ง้ข๏ผMiniMaxใ็ซๅฑฑๅผๆ/SeedanceใViduใ้ฟ้
- TTS๏ผMiniMax
- ๅขๅ ๅฎซๆ ผๅพ็ๆใๅๅๅ้ๆฐๅ้ ๆต็จ
- ไผๅๆฌๅฐๆไปถๅค็ไธๅ่ๅพๆ้่ฝฌ็
v1.0.4 (2026-01-27)
- ๅผๅ ฅๆฌๅฐๅญๅจ็ญ็ฅ๏ผ่ง้ฟๅค้จ่ตๆบ้พๆฅๅคฑๆ
- Base64 ๅ่ๅพๅตๅ ฅๅผไผ ่พ
- ไฟฎๅค้ๅคดๅๆข็ถๆ้็ฝฎ้ฎ้ข
- ๆทปๅ ๅบๆฏ่ฟ็งป่ณ็ซ ่
v1.0.3 (2026-01-16)
- SQLite ็บฏ Go ้ฉฑๅจ๏ผๆฏๆ CGO_ENABLED=0 ่ทจๅนณๅฐ็ผ่ฏ
- ไผๅๅนถๅๆง่ฝ๏ผWAL ๆจกๅผ๏ผ
- Docker ่ทจๅนณๅฐๆฏๆ host.docker.internal
v1.0.2 (2026-01-14)
- ไฟฎๅค่ง้ข็ๆ API ๅๅบ่งฃๆ้ฎ้ข
- ๆทปๅ OpenAI Sora ่ง้ข็ซฏ็น้ ็ฝฎ
- ไผๅ้่ฏฏๅค็ๅๆฅๅฟ่พๅบ
๐ค ่ดก็ฎๆๅ
ๆฌข่ฟๆไบค Issue ๅ Pull Request๏ผ
- Fork ๆฌ้กน็ฎ
- ๅๅปบ็นๆงๅๆฏ (
git checkout -b feature/AmazingFeature) - ๆไบคๆนๅจ (
git commit -m 'Add some AmazingFeature') - ๆจ้ๅฐๅๆฏ (
git push origin feature/AmazingFeature) - ๅผๅฏ Pull Request
ๅธธ็จๆฃๆฅๅฝไปค๏ผ
cd backend && npm run typecheck
cd ../frontend && npm run buildAPI ้ ็ฝฎ็ซ็น
2 ๅ้ๅฎๆ้ ็ฝฎ๏ผAPI ่ๅ็ซ็น
๐จโ๐ป ๅ ณไบๆไปฌ
AI ็ซๅฎ - AI ๅทฅไฝๅฎคๅไธไธญ
- ๐ ไฝ็ฝฎ: ไธญๅฝๅไบฌ
- ๐ ็ถๆ: ๅไธไธญ
- ๐ง Email: 18550175439@163.com
- ๐ GitHub: https://github.com/chatfire-AI/huobao-drama
"่ฎฉ AI ๅธฎๆไปฌๅๆดๆๅ้ ๅ็ไบ"
๐ ๅๆ ้พๆฅ
ๆฌ้กน็ฎๅทฒ่ทๅพ LINUX DO ็คพๅบ้พๆฅ่ฎคๅฏใ
- LINUX DO โ ็ๆญฃ็ๅผๆบ็ฒพ็ฅ๏ผๅ ฑๅปบๅ ฑไบซ็ๆๆฏ็คพๅบ
้กน็ฎไบคๆต็พค
- ๆไบค Issue
- ๅ้้ฎไปถ่ณ้กน็ฎ็ปดๆค่
