Skip to content
ํ”„๋กœ์ ํŠธ

chatfire-AI/huobao-drama has 17,241 GitHub stars and 3,211 forks. GitHot measured +36 stars in 24 hours and +252 in 7 days. Last checked 2026-11-11 15:49 UTC. Last push 2026-11-01.

์ด ์ˆ˜์น˜๋ฅผ ์ธก์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•

๐ŸŽฌ ็ซๅฎ็Ÿญๅ‰ง - AI ๊ธฐ๋ฐ˜ ์˜ฌ์ธ์› ๋‹จํŽธ ๋“œ๋ผ๋งˆ ์ƒ์„ฑ ํ”Œ๋žซํผ. โ€œํ•œ ๋ฌธ์žฅ์œผ๋กœ ๋‹จํŽธ ๋“œ๋ผ๋งˆ ์ „์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๋Œ€๋ณธ๋ถ€ํ„ฐ ์™„์„ฑ ์˜์ƒ๊นŒ์ง€ ๋ชจ๋“  ๊ณผ์ •์„ ์ž๋™ํ™”ํ•ฉ๋‹ˆ๋‹ค.โ€

์ธก์ •๋œ ์Šคํƒ€ ์ฆ๊ฐ€

in 24h
+36
in 7 days
+252
in 15 days
์—…๋ฐ์ดํŠธ ์ง€์—ฐ
in 1 month
์—…๋ฐ์ดํŠธ ์ง€์—ฐ

์„œ๋กœ ๊ฒน์น˜๋Š” ๊ธฐ๊ฐ„์˜ ์ˆœ์ฆ๊ฐ€๋Ÿ‰์ด๋ฉฐ ์ผ๋ณ„ ํ•ฉ๊ณ„๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ธก์ •๊ฐ’์ด ์—†์œผ๋ฉด ๋น„์›Œ ๋‘ก๋‹ˆ๋‹ค. ์Šคํƒ€๋Š” ๊ด€์‹ฌ๋„๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ ํ’ˆ์งˆ์„ ๋ณด์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

README.ko.md

Original

๐ŸŽฌ Huobao Drama - AI ์ˆ๋“œ๋ผ๋งˆ ์ƒ์„ฑ ํ”Œ๋žซํผ

TypeScript ํ’€์Šคํƒ ๊ธฐ๋ฐ˜ AI ์ˆ๋“œ๋ผ๋งˆ ์ž๋™ ์ œ์ž‘ ํ”Œ๋žซํผ

Node Version Vue Version License ๋‹ค์šด๋กœ๋“œ

ไธญ่‹ฑๅŒ่ฏญ | English | ็ฎ€ไฝ“ไธญๆ–‡ | ๆ—ฅๆœฌ่ชž | ํ•œ๊ตญ์–ด

๊ธฐ๋Šฅ โ€ข ๋น ๋ฅธ ์‹œ์ž‘ โ€ข ํŠœํ† ๋ฆฌ์–ผ โ€ข ๋ฐ์Šคํฌํ†ฑ ์•ฑ โ€ข ๋ฐฐํฌ

๐Ÿ”‘ Huobao API Key ๋ฐ›๊ธฐ ๐Ÿ‘‰ ๋ฐ”๋กœ ๋ณด๊ธฐ

ํ…์ŠคํŠธ ยท ์ด๋ฏธ์ง€ ยท ์˜์ƒ ๋ชจ๋“  AI ๊ธฐ๋Šฅ, Key ํ•˜๋‚˜๋กœ ํ™œ์„ฑํ™”

๋ฐฐํฌ ํ›„ ใ€Œ์„ค์ • โ†’ ็ซๅฎๅฟซๆท ์„ค์ •ใ€์— Key ๋ฅผ ๋ถ™์—ฌ๋„ฃ์œผ๋ฉด ์ถ”์ฒœ ์„ค์ • 3๊ฐœ๊ฐ€ ํ•œ ๋ฒˆ์— ์ž…๋ ฅ๋ฉ๋‹ˆ๋‹ค

๐Ÿ“ฅ ๋ฐ์Šคํฌํ†ฑ ์•ฑ ๋‹ค์šด๋กœ๋“œ (macOS / Windows)

๐ŸŒ ๊ณต์‹ ์›น์‚ฌ์ดํŠธ


๐Ÿ“– ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ

Huobao Drama๋Š” AI ๊ธฐ๋ฐ˜ ์ˆ๋“œ๋ผ๋งˆ ์ž๋™ ์ œ์ž‘ ํ”Œ๋žซํผ์œผ๋กœ, ๊ฐ๋ณธ ์ƒ์„ฑ, ์บ๋ฆญํ„ฐ ๋””์ž์ธ, ์Šคํ† ๋ฆฌ๋ณด๋“œ ์ œ์ž‘๋ถ€ํ„ฐ ์˜์ƒ ํ•ฉ์„ฑ๊นŒ์ง€ ์ „ ๊ณผ์ •์„ ์ž๋™ํ™”ํ•ฉ๋‹ˆ๋‹ค.

๐ŸŽฏ ํ•ต์‹ฌ ๊ฐ€์น˜

  • ๐Ÿค– AI ๊ธฐ๋ฐ˜๏ผš๋Œ€๊ทœ๋ชจ ์–ธ์–ด ๋ชจ๋ธ๋กœ ๊ฐ๋ณธ์„ ๋ถ„์„ํ•˜์—ฌ ์บ๋ฆญํ„ฐ, ์žฅ๋ฉด, ์Šคํ† ๋ฆฌ๋ณด๋“œ ์ •๋ณด๋ฅผ ์ถ”์ถœ
  • ๐ŸŽจ ์ง€๋Šฅํ˜• ์ฐฝ์ž‘๏ผšAI ์ด๋ฏธ์ง€ ์ƒ์„ฑ์œผ๋กœ ์บ๋ฆญํ„ฐ ์ด๋ฏธ์ง€์™€ ์žฅ๋ฉด ๋ฐฐ๊ฒฝ ์ œ์ž‘
  • ๐Ÿ“น ์˜์ƒ ์ƒ์„ฑ๏ผšํ…์ŠคํŠธโ†’์˜์ƒ ๋ฐ ์ด๋ฏธ์ง€โ†’์˜์ƒ ๋ชจ๋ธ๋กœ ์Šคํ† ๋ฆฌ๋ณด๋“œ ์˜์ƒ ์ž๋™ ์ƒ์„ฑ
  • ๐Ÿ”„ ์›Œํฌํ”Œ๋กœ๏ผš์•„์ด๋””์–ด๋ถ€ํ„ฐ ์™„์„ฑ ์˜์ƒ๊นŒ์ง€ ์ˆ๋“œ๋ผ๋งˆ ์ œ์ž‘ ์ „ ๊ณผ์ •์„ ํ•œ ๊ณณ์—์„œ ์™„๋ฃŒ

๐Ÿ› ๏ธ ๊ธฐ์ˆ  ์•„ํ‚คํ…์ฒ˜

frontend/   โ€” Nuxt 3 + Vue 3 + TypeScript (์ˆœ์ˆ˜ CSS, UI ํ”„๋ ˆ์ž„์›Œํฌ ์—†์Œ)
backend/    โ€” Hono + Drizzle ORM + Mastra AI Agents + better-sqlite3
backend/workspace/skills/ โ€” Agent ์Šคํ‚ฌ ์ •์˜ (SKILL.md, UI์—์„œ ์˜จ๋ผ์ธ ํŽธ์ง‘ ๊ฐ€๋Šฅ)
desktop/    โ€” Electron ๋ฐ์Šคํฌํ†ฑ ๋ฒ„์ „ (๋ฉ”์ธ ํ”„๋กœ์„ธ์Šค + esbuild ๋ฒˆ๋“ค + electron-builder๋กœ dmg/exe ์ƒ์„ฑ)
data/       โ€” ์ƒ์„ฑ๋œ ์—์…‹๊ณผ SQLite ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

โœจ ๊ธฐ๋Šฅ

๐ŸŽญ ์บ๋ฆญํ„ฐ ๊ด€๋ฆฌ

  • โœ… AI ์บ๋ฆญํ„ฐ ์ด๋ฏธ์ง€ ์ƒ์„ฑ
  • โœ… ์บ๋ฆญํ„ฐ ์ผ๊ด„ ์ƒ์„ฑ
  • โœ… ์บ๋ฆญํ„ฐ ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ๋ฐ ๊ด€๋ฆฌ

๐ŸŽฌ ์˜์ƒ ์ž‘์—…

  • โœ… AI ์˜์ƒ ์ž‘์—… ์ž๋™ ์ƒ์„ฑ
  • โœ… ์žฅ๋ฉด ์„ค๋ช… ๋ฐ ์˜์ƒ ํ”„๋กฌํ”„ํŠธ ์ƒ์„ฑ
  • โœ… ์ž‘์—…๋ณ„ ์˜์ƒ ์ผ๊ด„ ์ƒ์„ฑ

๐ŸŽฅ ์˜์ƒ ์ƒ์„ฑ

  • โœ… ํ…์ŠคํŠธโ†’์˜์ƒ ์ž๋™ ์ƒ์„ฑ
  • โœ… FFmpeg ์ƒท ๋‹จ์œ„ ํ•ฉ์„ฑ ๋ฐ ์ž๋ง‰ ์ฒ˜๋ฆฌ
  • โœ… ์—ํ”ผ์†Œ๋“œ ์ „์ฒด ๋ณ‘ํ•ฉ ๋ฐ ๋‚ฉ์ถœ

๐Ÿ“ฆ ์—์…‹ ๊ด€๋ฆฌ

  • โœ… ์†Œ์žฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ†ตํ•ฉ ๊ด€๋ฆฌ
  • โœ… ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€ ์ง€์›
  • โœ… ์ž‘์—… ์ง„ํ–‰ ์ƒํ™ฉ ์ถ”์ 

๐Ÿค– AI Agents

4๊ฐœ์˜ Mastra Agent ๋‚ด์žฅ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์ •๊ณผ Skill ํ™•์žฅ ์ง€์›:

Agent ์—ญํ• 
script_rewriter ์†Œ์„ค โ†’ ํ˜•์‹ํ™”๋œ ๊ฐ๋ณธ ๋ฆฌ๋ผ์ดํŒ…
extractor ์บ๋ฆญํ„ฐ / ์žฅ๋ฉด / ์†Œํ’ˆ ์ง€๋Šฅํ˜• ์ถ”์ถœ ๋ฐ ์ค‘๋ณต ์ œ๊ฑฐ
storyboard_breaker ๊ฐ๋ณธ โ†’ ์Šคํ† ๋ฆฌ๋ณด๋“œ ์‹œํ€€์Šค ๋ถ„ํ•ด
prompt_generator ์บ๋ฆญํ„ฐ/์žฅ๋ฉด/์†Œํ’ˆ ์ด๋ฏธ์ง€ ํ”„๋กฌํ”„ํŠธ + ์Šคํ† ๋ฆฌ๋ณด๋“œ ์˜์ƒ ํ”„๋กฌํ”„ํŠธ ์ƒ์„ฑ

๐ŸŒ ๋‹ค๊ตญ์–ด UI

์ธํ„ฐํŽ˜์ด์Šค๋Š” ไธญๆ–‡ / English / ๆ—ฅๆœฌ่ชž / ํ•œ๊ตญ์–ด 4๊ฐœ ์–ธ์–ด๋ฅผ ๋‚ด์žฅํ•˜๊ณ , AI ์ƒ์„ฑ ์ฝ˜ํ…์ธ ์˜ ์–ธ์–ด๋ฅผ ์ „์—ญ์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ”Œ ๋ฉ€ํ‹ฐ ํ”„๋กœ๋ฐ”์ด๋” ์ง€์›

์œ ํ˜• ์ง€์› ํ”„๋กœ๋ฐ”์ด๋”
ํ…์ŠคํŠธ OpenAI(ํ˜ธํ™˜ API), Gemini
์ด๋ฏธ์ง€ OpenAI, Gemini, Volcano Engine
์˜์ƒ Volcano Engine Seedance 2.0(Standard / Fast / Mini), MiniMax H3, Alibaba Bailian Wan 3.0(Prime / Standard)

๐Ÿš€ ๋น ๋ฅธ ์‹œ์ž‘

๐Ÿ“‹ ํ™˜๊ฒฝ ์š”๊ตฌ ์‚ฌํ•ญ

์†Œํ”„ํŠธ์›จ์–ด ๋ฒ„์ „ ์„ค๋ช…
Node.js 20+ ํ”„๋ŸฐํŠธ์—”๋“œ/๋ฐฑ์—”๋“œ ์‹คํ–‰ ํ™˜๊ฒฝ
npm 9+ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ ๋„๊ตฌ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์น˜ ๋ถˆํ•„์š”๏ผšSQLite ๋‚ด์žฅ(ํ”„๋กœ์ ํŠธ ๋ฐ์ดํ„ฐ ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ๋‹จ์ผ ํŒŒ์ผ)์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„ ์„ค์น˜๊ฐ€ ํ•„์š” ์—†์Šต๋‹ˆ๋‹ค. FFmpeg ์„ค์น˜ ๋ถˆํ•„์š”๏ผšffmpeg-static / ffprobe-static npm ํŒจํ‚ค์ง€์— ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ๋‚ด์žฅ๋˜์–ด ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โš™๏ธ ํ™˜๊ฒฝ ๋ณ€์ˆ˜

์„ค์ • ํŒŒ์ผ ์—†์ด ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค(๋ชจ๋‘ ๊ธฐ๋ณธ๊ฐ’์ด ์žˆ์–ด ๋กœ์ปฌ ๊ฐœ๋ฐœ์€ ๋ฌด์„ค์ •์œผ๋กœ ์‹œ์ž‘ ๊ฐ€๋Šฅ):

๋ณ€์ˆ˜ ๊ธฐ๋ณธ๊ฐ’ ์„ค๋ช…
SQLITE_PATH <์ €์žฅ์†Œ>/data/huobao.sqlite3 SQLite ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŒŒ์ผ ์œ„์น˜
PORT 5679 ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค ํฌํŠธ
STORAGE_PATH <์ €์žฅ์†Œ>/data/static ์ƒ์„ฑ ํŒŒ์ผ ์ €์žฅ ๋””๋ ‰ํ„ฐ๋ฆฌ
HUOBAO_DATA_DIR โ€” ๋ฐ์Šคํฌํ†ฑ ๋ฒ„์ „์—์„œ Electron ๋ฉ”์ธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ฃผ์ž…(userData ๋ฐ์ดํ„ฐ ๋ฃจํŠธ)
WORKSPACE_PATH backend/workspace Agent ์Šคํ‚ฌ/ํ”„๋กฌํ”„ํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ(๋ฐ์Šคํฌํ†ฑ ๋ฒ„์ „์€ userData์˜ ์“ฐ๊ธฐ ๊ฐ€๋Šฅํ•œ ๋ณต์‚ฌ๋ณธ)
FRONTEND_DIST frontend/dist ํ”„๋ŸฐํŠธ์—”๋“œ ์ •์  ๋นŒ๋“œ ๋””๋ ‰ํ„ฐ๋ฆฌ
FFMPEG_BIN / FFPROBE_BIN npm ๋‚ด์žฅ ๋ฐ”์ด๋„ˆ๋ฆฌ ์‚ฌ์šฉ์ž ์ง€์ • ffmpeg/ffprobe ์‹คํ–‰ ํŒŒ์ผ ๊ฒฝ๋กœ
PUBLIC_BASE_URL โ€” Seedance๊ฐ€ ๋กœ์ปฌ ์ฐธ์กฐ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ํ•„์š”ํ•œ ๊ณต๊ฐœ ์ฃผ์†Œ(์„œ๋ฒ„ ๋ฐฐํฌ์šฉ)

์„ค๋ช…๏ผšAI ์„œ๋น„์Šค์˜ API Key, Base URL, ๋ชจ๋ธ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ๋ชจ๋‘ ์›น UI์˜ ใ€Œ์„ค์ •ใ€ ํŽ˜์ด์ง€์—์„œ ์„ค์ •ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์„ค์ • ํŒŒ์ผ์ด๋‚˜ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ๊ด€๋ฆฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๐Ÿ“ฅ ์„ค์น˜

# ์ €์žฅ์†Œ ํด๋ก 
git clone https://github.com/chatfire-AI/huobao-drama.git
cd huobao-drama

# ๋ฐฑ์—”๋“œ ์˜์กด์„ฑ ์„ค์น˜
cd backend && npm install

# ํ”„๋ŸฐํŠธ์—”๋“œ ์˜์กด์„ฑ ์„ค์น˜
cd ../frontend && npm install

๐ŸŽฏ ์‹คํ–‰

๋ฐฉ๋ฒ• 1: ๊ฐœ๋ฐœ ๋ชจ๋“œ(๊ถŒ์žฅ)

ํ”„๋ŸฐํŠธ์—”๋“œ์™€ ๋ฐฑ์—”๋“œ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ํ•ซ ๋ฆฌ๋กœ๋“œ ์ง€์›:

# ํ„ฐ๋ฏธ๋„ 1: ๋ฐฑ์—”๋“œ
cd backend
npm run dev

# ํ„ฐ๋ฏธ๋„ 2: ํ”„๋ŸฐํŠธ์—”๋“œ
cd frontend
npm run dev
  • ํ”„๋ŸฐํŠธ์—”๋“œ ์ฃผ์†Œ: http://localhost:3013
  • ๋ฐฑ์—”๋“œ API: http://localhost:5679/api/v1
  • ํ”„๋ŸฐํŠธ์—”๋“œ๊ฐ€ /api์™€ /static์„ ๋ฐฑ์—”๋“œ๋กœ ์ž๋™ ํ”„๋ก์‹œ

๋ฐฉ๋ฒ• 2: ๋‹จ์ผ ์„œ๋น„์Šค ๋ชจ๋“œ

๋ฐฑ์—”๋“œ๊ฐ€ API์™€ ํ”„๋ŸฐํŠธ์—”๋“œ ์ •์  ํŒŒ์ผ์„ ๋ชจ๋‘ ์ œ๊ณต:

# 1. ํ”„๋ŸฐํŠธ์—”๋“œ ๋นŒ๋“œ
cd frontend && npm run generate

# 2. ๋นŒ๋“œ ์‚ฐ์ถœ๋ฌผ์„ ๋ฐฑ์—”๋“œ๊ฐ€ ์ฝ๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ๋ณต์‚ฌ
#    (generate ์‚ฐ์ถœ๋ฌผ์€ .output/public, ๋ฐฑ์—”๋“œ๋Š” frontend/dist๋ฅผ ์ฝ์Œ)
cp -r .output/public dist

# 3. ๋ฐฑ์—”๋“œ ์‹œ์ž‘
cd ../backend && npm start

์ ‘์†: http://localhost:5679

๐Ÿ—„๏ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

SQLite ๋‚ด์žฅ(better-sqlite3 + WAL ๋ชจ๋“œ). ์ตœ์ดˆ ์‹œ์ž‘ ์‹œ ํ…Œ์ด๋ธ” ์ž๋™ ์ƒ์„ฑ(๋ฉฑ๋“ฑ DDL ์žฌ์ƒ + ์‹œ๋“œ ๋ฐ์ดํ„ฐ). ๊ธฐ๋ณธ ํŒŒ์ผ์€ data/huobao.sqlite3์ด๋ฉฐ SQLITE_PATH๋กœ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ. ๋ฐ์Šคํฌํ†ฑ ๋ฒ„์ „์˜ ๋ฐ์ดํ„ฐ๋Š” ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ ๋””๋ ‰ํ„ฐ๋ฆฌ(~/Library/Application Support/HuobaoDrama/data/)์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

๊ตฌ๋ฒ„์ „ MySQL์—์„œ ๋ฐ์ดํ„ฐ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜:

์‹œ์ž‘ ์‹œ ์ž๋™ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜(๊ถŒ์žฅ): MySQL์ด ๋ช…์‹œ์ ์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ๊ณ (DATABASE_URL ๋˜๋Š” MYSQL_HOST) SQLite๊ฐ€ ๋น„์–ด ์žˆ์œผ๋ฉด, ๋ฐฑ์—”๋“œ ์‹œ์ž‘ ์‹œ ์ž๋™์œผ๋กœ ๊ฐ์ง€ํ•˜์—ฌ ๋ชจ๋“  ํ…Œ์ด๋ธ”์„ ํ•œ ๋ฒˆ๋งŒ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค(ํ…Œ์ด๋ธ”๋ณ„ ํ–‰ ์ˆ˜ ๊ฒ€์ฆ, ๋‹จ์ผ ํŠธ๋žœ์žญ์…˜ ์›์ž์  ์“ฐ๊ธฐ, ์‹คํŒจ ์‹œ ์ž๋™ ๋กค๋ฐฑ ํ›„ ๋‹ค์Œ ์‹œ์ž‘ ๋•Œ ์žฌ์‹œ๋„, ์„ฑ๊ณต ์‹œ .mysql-imported ๋งˆ์ปค๋ฅผ ๊ธฐ๋กํ•˜์—ฌ ์ค‘๋ณต ๋ฐฉ์ง€). MYSQL_AUTO_IMPORT=false๋กœ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

# ์ˆ˜๋™ ์‹คํ–‰๋„ ๊ฐ€๋Šฅ(๋Œ€์ƒ DB๊ฐ€ ๋น„์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด --force ํ•„์š”, ์“ฐ๊ธฐ ์ „ ์ž๋™ ๋ฐฑ์—…)
cd backend && npx tsx scripts/import-mysql-to-sqlite.ts

๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ–‰๋งŒ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ ๋ฐฐํฌ์˜ data/static/ ์•„๋ž˜ ์ด๋ฏธ์ง€/์˜์ƒ ๋“ฑ ๋ฏธ๋””์–ด ํŒŒ์ผ์€ ์ˆ˜๋™์œผ๋กœ ๋ณต์‚ฌํ•ด์•ผ ํ•˜๋ฉฐ, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๊ธฐ์กด ์†Œ์žฌ์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๐Ÿ”‘ ์ฒซ ์‚ฌ์šฉ: AI ์„œ๋น„์Šค ์„ค์ •

์‹œ์ž‘ ํ›„ ๋ชจ๋“  AI ๊ธฐ๋Šฅ(ํ…์ŠคํŠธ/์ด๋ฏธ์ง€/์˜์ƒ)์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋จผ์ € ๋ชจ๋ธ ์„œ๋น„์Šค๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฏธ์„ค์ • ์‹œ ํŽ˜์ด์ง€ ์ƒ๋‹จ์— ๋ฐฐ๋„ˆ๋กœ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค:

  1. ใ€Œ์„ค์ •ใ€ ํŽ˜์ด์ง€ ์—ด๊ธฐ
  2. ใ€Œ็ซๅฎๅฟซๆท ์„ค์ •ใ€์— Huobao API Key ๋ถ™์—ฌ๋„ฃ๊ธฐ(api.firemux.com์—์„œ ๋ฐœ๊ธ‰). ํ…์ŠคํŠธ, ์ด๋ฏธ์ง€, ์˜์ƒ ์ถ”์ฒœ ์„ค์ • 3๊ฐœ๊ฐ€ ํ•œ ๋ฒˆ์— ์ž…๋ ฅ๋ฉ๋‹ˆ๋‹ค
  3. ๋˜๋Š” ใ€Œ์ˆ˜๋™ ํ…œํ”Œ๋ฆฟใ€์œผ๋กœ ํ”„๋กœ๋ฐ”์ด๋”๋ณ„ ์ถ”๊ฐ€. ์—ฐ๊ฒฐ ํ…Œ์ŠคํŠธ ์ง€์›

์„ค์ •์ด ์™„๋ฃŒ๋˜๋ฉด ๋ฐฐ๋„ˆ๊ฐ€ ์ž๋™์œผ๋กœ ์‚ฌ๋ผ์ง€๊ณ  ์—ํ”ผ์†Œ๋“œ ์ œ์ž‘์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ“– ๊ทธ๋ฆผ ํŠœํ† ๋ฆฌ์–ผ

์†Œ์„ค๋ถ€ํ„ฐ ์™„์„ฑ ์—ํ”ผ์†Œ๋“œ๊นŒ์ง€์˜ ์ „์ฒด ์ œ์ž‘ ํ๋ฆ„์ž…๋‹ˆ๋‹ค. ์™ผ์ชฝ ์ง„ํ–‰ ํ‘œ์‹œ์ค„์ด ํ•ญ์ƒ ํ˜„์žฌ ๋‹จ๊ณ„๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

1๋‹จ๊ณ„ ยท ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

ํ™ˆ์—์„œ "์ƒˆ ํ”„๋กœ์ ํŠธ"๋ฅผ ํด๋ฆญํ•˜๊ณ  ํ™”๋ฉด ๋น„์œจ(16:9 ๊ฐ€๋กœ / 9:16 ์„ธ๋กœ, ์ƒ์„ฑ ํ›„ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€)๊ณผ ํ™”ํ’(3D / ์‹ค์‚ฌ ๋“ฑ, ๋ชจ๋“  ์ด๋ฏธ์ง€ ํ”„๋กฌํ”„ํŠธ์— ์ฃผ์ž…)์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

ํ”„๋กœ์ ํŠธ ๋ชฉ๋ก

2๋‹จ๊ณ„ ยท AI ์„œ๋น„์Šค ์„ค์ • (์ตœ์ดˆ)

์„ค์ • ํŽ˜์ด์ง€์˜ "ํœ˜๋ฐ”์˜ค ๋น ๋ฅธ ์„ค์ •"์— API ํ‚ค๋ฅผ ๋ถ™์—ฌ๋„ฃ์œผ๋ฉด ์ถ”์ฒœ ์„ค์ • 3์ข…์„ ํ•œ ๋ฒˆ์— ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜๋™ ํ…œํ”Œ๋ฆฟ์œผ๋กœ ์ง์ ‘ ์ถ”๊ฐ€ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ ๋ชจ๋ธ์€ ์ƒ๋‹จ ๋ฐ”์—์„œ ์–ธ์ œ๋“  ์ „ํ™˜ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค(5๋‹จ๊ณ„ ์ฐธ๊ณ ).

AI ์„œ๋น„์Šค ์„ค์ •

3๋‹จ๊ณ„ ยท ๋Œ€๋ณธ ๋‹จ๊ณ„

์ œ์ž‘ ํ™”๋ฉด์— **์›๋ฌธ(์†Œ์„ค)**์„ ๋ถ™์—ฌ๋„ฃ๊ณ  "AI ์žฌ์ž‘์„ฑ"์„ ์‹คํ–‰ํ•˜๋ฉด ์ดฌ์˜์šฉ ๋Œ€๋ณธ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค โ€” ์—ํ”ผ์†Œ๋“œ๋ณ„ ๋ถ„ํ•  ๋ฐ ์žฅ๋ฉดยท์บ๋ฆญํ„ฐ ์ฃผ์„ ํฌํ•จ. ๋ชจ๋ธ๊ณผ ํ†ค์„ ๋ฐ”๊ฟ”๊ฐ€๋ฉฐ ์žฌ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ€๋ณธ ๋‹จ๊ณ„

4๋‹จ๊ณ„ ยท ์—์…‹ ์ œ์ž‘

๋Œ€๋ณธ์— ์ถ”์ถœ์„ ์‹คํ–‰ํ•˜๋ฉด ์บ๋ฆญํ„ฐ / ์žฅ๋ฉด / ์†Œํ’ˆ ๋ชฉ๋ก์ด ์ž๋™ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๊ฐ ํ•ญ๋ชฉ์˜ "์ด๋ฏธ์ง€ ์ƒ์„ฑ"์œผ๋กœ ์ผ๊ด€์„ฑ ์žˆ๋Š” ์ฐธ์กฐ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ผ๊ด„ ์ƒ์„ฑ ์ง€์›). ์ด ์ด๋ฏธ์ง€๋“ค์€ ์˜์ƒ ์ƒ์„ฑ ์‹œ ์ฐธ์กฐ ์†Œ์žฌ๋กœ ์ฃผ์ž…๋ฉ๋‹ˆ๋‹ค.

์—์…‹ ์ œ์ž‘

5๋‹จ๊ณ„ ยท ์Šคํ† ๋ฆฌ๋ณด๋“œ์™€ ์˜์ƒ

"์˜์ƒ ์ œ์ž‘" ํŽ˜์ด์ง€์—์„œ ๋จผ์ € ์Šคํ† ๋ฆฌ๋ณด๋“œ ๋ถ„ํ• ์„ ์‹คํ–‰ํ•˜์„ธ์š”(AI๊ฐ€ ์ปท์„ ๋‚˜๋ˆ„๊ณ  ์˜์ƒ ํ”„๋กฌํ”„ํŠธ ์ƒ์„ฑ). ๊ทธ ํ›„:

  • ์ƒ๋‹จ ๋ฐ”์—์„œ ์˜์ƒ ๋ชจ๋ธ ์„ ํƒ(Seedance / Wan 3.0 / MiniMax ๋“ฑ). ํ•ด์ƒ๋„์™€ ๊ธธ์ด ์˜ต์…˜์€ ๋ชจ๋ธ์— ์—ฐ๋™๋ฉ๋‹ˆ๋‹ค
  • ์˜ค๋ฅธ์ชฝ์—์„œ ๊ฐ ์ปท์˜ ํ”„๋กฌํ”„ํŠธ๋ฅผ ํ™•์ธยท์กฐ์ •(@์บ๋ฆญํ„ฐ๋ช… ์ฐธ์กฐ๋Š” ์ž๋™์œผ๋กœ ์ฐธ์กฐ ์ด๋ฏธ์ง€์— ๋งคํ•‘)
  • "์ผ๊ด„ ์˜์ƒ ์ƒ์„ฑ"์œผ๋กœ ์ž‘์—… ์‹œ์ž‘. ์‹คํŒจํ•œ ์ž‘์—…์€ ์›ํด๋ฆญ ์žฌ์‹œ๋„

์Šคํ† ๋ฆฌ๋ณด๋“œ ๋ถ„ํ• 

์˜์ƒ ์ƒ์„ฑ

6๋‹จ๊ณ„ ยท ๋ณ‘ํ•ฉ๊ณผ ๋‚ด๋ณด๋‚ด๊ธฐ

์ปท์„ ์„ ํƒ(ํ˜ธ๋ฒ„๋กœ ๊ฐ ํด๋ฆฝ ๋ฏธ๋ฆฌ๋ณด๊ธฐ)ํ•˜๊ณ  "๋ณ‘ํ•ฉ ์‹œ์ž‘"์„ ๋ˆ„๋ฅด๋ฉด FFmpeg์ด ์™„์„ฑ ์—ํ”ผ์†Œ๋“œ๋ฅผ ์ž๋™ ํ•ฉ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์˜จ๋ผ์ธ ์žฌ์ƒยท๋‹ค์šด๋กœ๋“œ ๊ฐ€๋Šฅ. ์™„๋ฃŒ ํ›„ "์™„๋ฃŒ ํ‘œ์‹œ"๋ฅผ ๋ˆ„๋ฅด๋ฉด ์ง„ํ–‰ ํ‘œ์‹œ์ค„์ด ์ผœ์ง‘๋‹ˆ๋‹ค.

๋ณ‘ํ•ฉ๊ณผ ๋‚ด๋ณด๋‚ด๊ธฐ

์—ํ”ผ์†Œ๋“œ ๋ชฉ๋ก์—์„œ ๊ฐ ํ™”์˜ ์ œ์ž‘ ํ˜„ํ™ฉ์„ ํ™•์ธํ•˜๊ณ  "์ œ์ž‘ ์—ด๊ธฐ"๋กœ ์ด์–ด์„œ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

์—ํ”ผ์†Œ๋“œ ๋ชฉ๋ก


๐Ÿ“ฆ ๋ฐฐํฌ

๐Ÿ–ฅ๏ธ ๋ฐ์Šคํฌํ†ฑ ์•ฑ(๊ถŒ์žฅ)

โฌ‡๏ธ ๋นŒ๋“œ๋œ ์„ค์น˜ ํŒŒ์ผ: GitHub Releases ยท ์ค‘๊ตญ์šฉ ๋ฏธ๋Ÿฌ(Tencent COS)

ํ”Œ๋žซํผ ๋‹ค์šด๋กœ๋“œ ํŒŒ์ผ
macOS(Apple Silicon, M ์‹œ๋ฆฌ์ฆˆ) HuobaoDrama-4.0.5-arm64.dmg
macOS(Intel) HuobaoDrama-4.0.5.dmg
Windows HuobaoDrama.Setup.4.0.5.exe

์ค‘๊ตญ ๋ณธํ† ์—์„œ๋Š” GitHub์ด ๋ถˆ์•ˆ์ •ํ•˜๋ฏ€๋กœ Tencent COS ๋ฏธ๋Ÿฌ๋ฅผ ์ด์šฉํ•˜์„ธ์š”. ์•ฑ ๋‚ด ์—…๋ฐ์ดํ„ฐ๋„ COS๋ฅผ ์šฐ์„ ํ•˜๊ณ  GitHub์œผ๋กœ ํด๋ฐฑํ•ฉ๋‹ˆ๋‹ค.

์ปค๋งจ๋“œ๋ผ์ธ ์„ค์น˜(๊ถŒ์žฅ, ๋ณต๊ตฌ ๋ถˆํ•„์š”): curl๋กœ ๋‹ค์šด๋กœ๋“œํ•˜๋ฉด macOS ๊ฒฉ๋ฆฌ ์†์„ฑ์ด ๋ถ™์ง€ ์•Š์•„ "์†์ƒ๋จ" ๊ฒฝ๊ณ  ์—†์ด ๋ฐ”๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค(Apple Silicon์€ -arm64.dmg, Intel์€ ์ผ๋ฐ˜ dmg ์‚ฌ์šฉ):

curl -L -o /tmp/HuobaoDrama.dmg https://installer.chatfire.site/huobao-drama/v4.0.5/HuobaoDrama-4.0.5-arm64.dmg \
  && hdiutil attach -nobrowse /tmp/HuobaoDrama.dmg \
  && cp -R /Volumes/HuobaoDrama*/HuobaoDrama.app /Applications/ \
  && hdiutil detach /Volumes/HuobaoDrama*

๋นŒ๋“œ ๋ถˆํ•„์š” โ€” dmg/exe๋ฅผ ๋‹ค์šด๋กœ๋“œํ•ด ๋ฐ”๋กœ ์„ค์น˜ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์„ค์น˜๋œ ํด๋ผ์ด์–ธํŠธ๋Š” ๋‚ด์žฅ ์—…๋ฐ์ดํ„ฐ๋กœ ์ž๋™ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค. (์†Œ์Šค์—์„œ ์ง์ ‘ ํŒจํ‚ค์ง•ํ•˜๋ ค๋ฉด ์•„๋ž˜ ๋ช…๋ น์„ ์ฐธ์กฐํ•˜์„ธ์š”.)

๋”๋ธ”ํด๋ฆญ ์„ค์น˜๋กœ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์Šคํฌํ†ฑ ๋ฒ„์ „(macOS + Windows). ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(SQLite), ์ƒ์„ฑ๋œ ๋ฏธ๋””์–ด ํŒŒ์ผ, Agent ์Šคํ‚ฌ์€ ๋ชจ๋‘ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์ €์žฅ๋˜๋ฉฐ ์•ฑ์„ ์‚ญ์ œํ•„ํ•„๋„ ๋ฐ์ดํ„ฐ์— ์˜ํ–ฅ์ด ์—†์Šต๋‹ˆ๋‹ค.

# ์›์ปค๋งจ๋“œ ํŒจํ‚ค์ง•(ํ”„๋ŸฐํŠธ์—”๋“œ generate โ†’ ๋ฐฑ์—”๋“œ esbuild โ†’ electron-builder)
npm run dist        # macOS dmg(arm64 + Intel)
npm run dist:win    # Windows NSIS ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ(win-x64, macOS์—์„œ ํฌ๋กœ์Šค ๋นŒ๋“œ ๊ฐ€๋Šฅ)

# ์‚ฐ์ถœ๋ฌผ
# desktop/release/HuobaoDrama-<๋ฒ„์ „>-arm64.dmg        (Apple Silicon)
# desktop/release/HuobaoDrama-<๋ฒ„์ „>.dmg              (Intel)
# desktop/release/HuobaoDrama Setup <๋ฒ„์ „>.exe        (Windows)

์„ค์น˜ ์•ˆ๋‚ด:

  • macOS ๋ฏธ์„œ๋ช… ํŒจํ‚ค์ง€๋Š” ์ฒซ ์‹คํ–‰ ์‹œ "App์ด ์†์ƒ๋˜์–ด ์—ด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค"๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ๋œฐ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(Apple Silicon์—์„œ ํ”ํ•จ). ์ด๋Š” Gatekeeper ๊ฒฉ๋ฆฌ ์†์„ฑ ๋•Œ๋ฌธ์ด๋ฉฐ ํŒŒ์ผ์ด ์‹ค์ œ๋กœ ์†์ƒ๋œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๋ณต๊ตฌ ๋ฐฉ๋ฒ•์€ ๋‘ ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค:

    1. dmg์— ๋ณต๊ตฌ ์Šคํฌ๋ฆฝํŠธ ํฌํ•จ: ์•ฑ์„ "์‘์šฉ ํ”„๋กœ๊ทธ๋žจ"์œผ๋กœ ๋“œ๋ž˜๊ทธํ•œ ํ›„ dmg ์ฐฝ ํ•˜๋‹จ์˜ "ๅฆ‚ๆ็คบๅทฒๆŸๅ่ฏทๅŒๅ‡ปๆˆ‘.command"๋ฅผ ๋”๋ธ”ํด๋ฆญํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋ณต๊ตฌ๋ฉ๋‹ˆ๋‹ค;
    2. ๋˜๋Š” ํ„ฐ๋ฏธ๋„์—์„œ sudo xattr -cr /Applications/HuobaoDrama.app ์‹คํ–‰.

    ๋ณต๊ตฌ๋Š” ์ฒ˜์Œ ํ•œ ๋ฒˆ๋งŒ ํ•„์š”ํ•˜๋ฉฐ, ์ดํ›„์—๋Š” ์ •์ƒ ์‹คํ–‰๋˜๊ณ  ์•ฑ ๋‚ด ์ž๋™ ์—…๋ฐ์ดํŠธ์—๋„ ์˜ํ–ฅ์ด ์—†์Šต๋‹ˆ๋‹ค.

  • Windows ๋ฏธ์„œ๋ช… ํŒจํ‚ค์ง€๋Š” SmartScreen์—์„œ ใ€Œ์ถ”๊ฐ€ ์ •๋ณด โ†’ ์‹คํ–‰ใ€ ์„ ํƒ

  • ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ ๋””๋ ‰ํ„ฐ๋ฆฌ: ~/Library/Application Support/HuobaoDrama/(๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ์ƒ์„ฑ๋œ ๋ฏธ๋””์–ด, ์˜จ๋ผ์ธ ํŽธ์ง‘ํ•œ ์Šคํ‚ฌ ๋ณต์‚ฌ๋ณธ)

  • FFmpeg/FFprobe ๋ฐ”์ด๋„ˆ๋ฆฌ ๋‚ด์žฅ, ์‹œ์Šคํ…œ ์„ค์น˜ ๋ถˆํ•„์š”

  • Electron์€ 37.x๋กœ ๊ณ ์ •: better-sqlite3์˜ win32 ํ”„๋ฆฌ๋นŒ๋“œ๊ฐ€ ํ•ด๋‹น ABI๊นŒ์ง€๋งŒ ์ง€์›(ํฌ๋กœ์Šค ํŒจํ‚ค์ง• ์‹œ ์ปดํŒŒ์ผ ๋ถˆํ•„์š”์˜ ํ•ต์‹ฌ)

  • ์•ฑ ๋‚ด ์™ธ๋ถ€ ๋งํฌ(ใ€Œapi.firemux.com์—์„œ Key ๋ฐ›๊ธฐใ€ ๋“ฑ)๋Š” ์‹œ์Šคํ…œ ๋ธŒ๋ผ์šฐ์ €๋กœ ๋ฐ”๋กœ ์—ด๋ฆฝ๋‹ˆ๋‹ค

๐Ÿ”„ ์•ฑ ๋‚ด ์—…๋ฐ์ดํŠธ(Apple ์„œ๋ช… ๋ถˆํ•„์š”)

๋ฐ์Šคํฌํ†ฑ ๋ฒ„์ „์—๋Š” ์—…๋ฐ์ดํ„ฐ๊ฐ€ ๋‚ด์žฅ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค(Tauri์™€ ๋™๋ฅ˜ ๋ฐฉ์‹: macOS ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ต์ฒด / Windows ์‚ฌ์ผ๋ŸฐํŠธ ์„ค์น˜, ๋กœ์ปฌ sha256 ๊ฒ€์ฆ). ์ƒˆ ๋ฒ„์ „ ๋ฆด๋ฆฌ์Šค ์ ˆ์ฐจ:

# 1. desktop/package.json์˜ version์„ ์ˆ˜์ •ํ•œ ํ›„ ํŒจํ‚ค์ง•
npm run dist        # macOS(dmg + ์—…๋ฐ์ดํŠธ์šฉ zip ์‚ฐ์ถœ)
npm run dist:win    # Windows(Setup.exe ์‚ฐ์ถœ)

# 2. ๋ฒ„์ „ ๋งค๋‹ˆํŽ˜์ŠคํŠธ release/latest.json ์ƒ์„ฑ(ํ”Œ๋žซํผ๋ณ„ sha256 ํฌํ•จ)
cd desktop && npm run feed

# 3. ๋ฆด๋ฆฌ์Šค: latest.json + ์„ค์น˜ ํŒจํ‚ค์ง€ + zip์„ GitHub Release์— ์—…๋กœ๋“œ(ํƒœ๊ทธ๋Š” v1.0.1 ํ˜•์‹)

์„ค์น˜๋œ ํด๋ผ์ด์–ธํŠธ๋Š” ์‹œ์ž‘ ํ›„ ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ์ž๋™์œผ๋กœ ํ™•์ธํ•˜๊ณ (ใ€Œ์„ค์ • โ†’ ์ •๋ณด ๋ฐ ์—…๋ฐ์ดํŠธใ€์—์„œ ์ˆ˜๋™ ํ™•์ธ๋„ ๊ฐ€๋Šฅ), ์ƒˆ ๋ฒ„์ „์„ ๋ฐœ๊ฒฌํ•˜๋ฉด ๋‹ค์šด๋กœ๋“œ ๋ฐ ์„ค์น˜๋ฅผ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค. ๋งค๋‹ˆํŽ˜์ŠคํŠธ ์ฃผ์†Œ๋Š” HUOBAO_UPDATE_FEED ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ์Šคํฌํ†ฑ ๋ฒ„์ „ ๊ฐœ๋ฐœ ๋””๋ฒ„๊น…:

npm run build:frontend   # ํ”„๋ŸฐํŠธ์—”๋“œ ์ •์  ์‚ฐ์ถœ๋ฌผ(frontend/.output/public)
cd desktop && npm run dev  # ๋ฐฑ์—”๋“œ ๋ฒˆ๋“ค ํ›„ Electron ์ฐฝ์œผ๋กœ ์‹คํ–‰

์•Œ๋ ค์ง„ ์ œํ•œ: Seedance ์˜์ƒ ๋ชจ๋ธ์ด ๋กœ์ปฌ ์ฐธ์กฐ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด PUBLIC_BASE_URL ๊ณต๊ฐœ ์ฃผ์†Œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์Šคํฌํ†ฑ ๋ฒ„์ „์—๋Š” ๊ณต๊ฐœ ์ง„์ž…์ ์ด ์—†์–ด ํ•ด๋‹น ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ๋Š” ๋ช…ํ™•ํ•œ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ํ…์ŠคํŠธโ†’์˜์ƒ/์ด๋ฏธ์ง€ ์ƒ์„ฑ ๋“ฑ ๋‚˜๋จธ์ง€ ๊ธฐ๋Šฅ์—๋Š” ์˜ํ–ฅ์ด ์—†์Šต๋‹ˆ๋‹ค.


๐Ÿญ ์„œ๋ฒ„ ๋ฐฐํฌ

# 1. ํ”„๋ŸฐํŠธ์—”๋“œ ๋นŒ๋“œ
cd frontend && npm run generate

# 2. ๋นŒ๋“œ ์‚ฐ์ถœ๋ฌผ ๋ณต์‚ฌ(generate ์‚ฐ์ถœ๋ฌผ์€ frontend/.output/public, ๋ฐฑ์—”๋“œ๋Š”
#    frontend/dist๋ฅผ ์ฝ์Œ. ์ด ๋‹จ๊ณ„๋ฅผ ์ƒ๋žตํ•˜๋ฉด API๋Š” ์ •์ƒ์ด์ง€๋งŒ ํŽ˜์ด์ง€๊ฐ€ 404)
cp -r .output/public dist && cd ..

# 3. ๋ฐฑ์—”๋“œ ์‹œ์ž‘
cd backend && npm start

์„œ๋ฒ„์— ์—…๋กœ๋“œํ•  ํŒŒ์ผ:

backend/                    # ๋ฐฑ์—”๋“œ ์†Œ์Šค + node_modules
backend/workspace/skills/   # Agent ์Šคํ‚ฌ ํŒŒ์ผ
frontend/dist/              # ํ”„๋ŸฐํŠธ์—”๋“œ ๋นŒ๋“œ ์‚ฐ์ถœ๋ฌผ
data/                       # ๋ฐ์ดํ„ฐ ๋””๋ ‰ํ„ฐ๋ฆฌ(์ตœ์ดˆ ์‹คํ–‰ ์‹œ ์ž๋™ ์ƒ์„ฑ)

Nginx ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ

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

    # ์ฐธ์กฐ ์˜์ƒ/์˜ค๋””์˜ค ์—…๋กœ๋“œ ์ตœ๋Œ€ 50MB
    client_max_body_size 100m;

    # ์ƒ์„ฑ๋œ ์ด๋ฏธ์ง€/์˜์ƒ์€ ๋””์Šคํฌ์—์„œ ์ง์ ‘ ์„œ๋น™(Node๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š์Œ):
    # sendfile ์ œ๋กœ ์นดํ”ผ + ์žฅ๊ธฐ ์บ์‹œ
    # (ํŒŒ์ผ์€ uuid ๋ช…๋ช…, ๋‚ด์šฉ ๋ถˆ๋ณ€์ด๋ฏ€๋กœ immutable ์บ์‹œ ์•ˆ์ „)
    location /static/ {
        alias /path/to/huobao-drama/data/static/;
        sendfile on;
        tcp_nopush on;
        expires 1y;
        add_header Cache-Control "public, immutable";
    }

    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;
    }
}

๋ฏธ๋””์–ด ๋กœ๋”ฉ ์ตœ์ ํ™”: ์ด๋ฏธ์ง€ ์ƒ์„ฑ ์‹œ ๋ฐฑ์—”๋“œ๊ฐ€ ๋ชฉ๋ก ํŽ˜์ด์ง€์šฉ 400px ์ธ๋„ค์ผ(*_thumb.webp)์„ ์ž๋™ ์ƒ์„ฑํ•˜๊ณ , ์˜์ƒ์€ ํฌ์Šคํ„ฐ ํ”„๋ ˆ์ž„(*_poster.jpg)์„ ์ปค๋ฒ„๋กœ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค. ํ”„๋ŸฐํŠธ์—”๋“œ๋Š” ํฐ ์ด๋ฏธ์ง€๋ฅผ ์—ด๊ฑฐ๋‚˜ ์žฌ์ƒํ•  ๋•Œ๋งŒ ์›๋ณธ ํŒŒ์ผ์„ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด ํŒŒ์ผ์€ backend/์—์„œ npm run backfill-artwork๋ฅผ ์‹คํ–‰ํ•ด ์ผ๊ด„ ๋ณด์™„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿณ Docker ๋ฐฐํฌ(์•ฑ ๋‚ด ์—…๋ฐ์ดํŠธ ํฌํ•จ)

๋ฐฉ๋ฒ• A โ€” ์‚ฌ์ „ ๋นŒ๋“œ ์ด๋ฏธ์ง€(ํด๋ก ยท๋นŒ๋“œ ๋ถˆํ•„์š”): ๋ฉ€ํ‹ฐ ์•„ํ‚คํ…์ฒ˜(linux/amd64 + linux/arm64), x86 ์„œ๋ฒ„์™€ ARM ๋””๋ฐ”์ด์Šค ์ž๋™ ๋งค์นญ

docker pull huobao/huobao-drama:4.0.6

docker run -d \
  --name huobao-drama \
  -p 5679:5679 \
  -v huobao-data:/app/data \
  --restart unless-stopped \
  huobao/huobao-drama:4.0.6

๋ฐฉ๋ฒ• B โ€” docker compose(์†Œ์Šค ๋นŒ๋“œ + Watchtower ์ธ์•ฑ ์—…๋ฐ์ดํŠธ): ์ €์žฅ์†Œ ๋ฃจํŠธ์— ์˜ฌ์ธ์› Dockerfile(ํ”„๋ŸฐํŠธ์—”๋“œ generate + ๋ฐฑ์—”๋“œ ์˜์กด์„ฑ/๋Ÿฐํƒ€์ž„ 3๋‹จ๊ณ„, ๋ฐฑ์—”๋“œ๋Š” ์„œ๋ฒ„ ๋ฐฐํฌ์™€ ๋™์ผํ•˜๊ฒŒ tsx๋กœ ์‹คํ–‰)๊ณผ docker-compose.yml(์•ฑ + Watchtower)์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:

# 1. ํ™˜๊ฒฝ ์„ค์ •(Watchtower ํ† ํฐ, app๊ณผ watchtower ์–‘์ชฝ์ด ์ผ์น˜ํ•ด์•ผ ํ•จ)
cp .env.example .env   # WATCHTOWER_TOKEN ์ˆ˜์ •

# 2. ๋นŒ๋“œ ๋ฐ ์‹œ์ž‘(๋ฆด๋ฆฌ์Šค ์‹œ ๋ฒ„์ „์„ ์ฃผ์ž…ํ•˜์—ฌ ใ€Œ์ •๋ณด ๋ฐ ์—…๋ฐ์ดํŠธใ€ ๋น„๊ต์— ์‚ฌ์šฉ)
HUOBAO_VERSION=4.0.5 docker compose up -d --build

# 3. http://localhost:5679 ์ ‘์†
  • ๋ฐ์ดํ„ฐ ์˜์†ํ™”: ๋„ค์ž„๋“œ ๋ณผ๋ฅจ huobao-data๋ฅผ /app/data์— ๋งˆ์šดํŠธ(SQLite + ์ƒ์„ฑ๋œ ์ด๋ฏธ์ง€/์˜์ƒ + workspace/skills). ์ด๋ฏธ์ง€ ์—…๋ฐ์ดํŠธ ์‹œ์—๋„ ๋ฐ์ดํ„ฐ ์œ ์ง€
  • ์•ฑ ๋‚ด ์—…๋ฐ์ดํŠธ: compose์— Watchtower ์‚ฌ์ด๋“œ์นด ํฌํ•จ(--label-enable๋กœ ๋ผ๋ฒจ์ด ์ง€์ •๋œ ์ปจํ…Œ์ด๋„ˆ๋งŒ ์—…๋ฐ์ดํŠธ, --cleanup์œผ๋กœ ๊ตฌ ์ด๋ฏธ์ง€ ์ •๋ฆฌ, ๋งค์ผ ์ž์ฒด ์ ๊ฒ€). ใ€Œ์„ค์ • โ†’ ์ •๋ณด ๋ฐ ์—…๋ฐ์ดํŠธใ€์—์„œ ์ƒˆ ๋ฒ„์ „ ํ™•์ธ ๋ฐ ใ€Œ์ง€๊ธˆ ์—…๋ฐ์ดํŠธใ€ ๊ฐ€๋Šฅ โ€” ๋ฐฑ์—”๋“œ๊ฐ€ Watchtower HTTP API๋ฅผ ํ†ตํ•ด ํŠธ๋ฆฌ๊ฑฐํ•˜์—ฌ ์ƒˆ ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์™€ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์žฌ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋ช‡ ๋ถ„ ํ›„ ํŽ˜์ด์ง€๋ฅผ ์ƒˆ๋กœ๊ณ ์นจํ•˜๋ฉด ์™„๋ฃŒ
  • ์ˆ˜๋™ ๋ชจ๋“œ: docker-compose.yml์—์„œ app์˜ HUOBAO_WATCHTOWER_* ํ™˜๊ฒฝ ๋ณ€์ˆ˜ 2๊ฐœ(๋˜๋Š” watchtower ์„œ๋น„์Šค ์ „์ฒด)๋ฅผ ์‚ญ์ œํ•˜๋ฉด ใ€Œ์ •๋ณด ๋ฐ ์—…๋ฐ์ดํŠธใ€๋Š” ์ƒˆ ๋ฒ„์ „ ์•Œ๋ฆผ + ์ˆ˜๋™ ๋ช…๋ น docker compose pull && docker compose up -d์œผ๋กœ ์ „ํ™˜๋ฉ๋‹ˆ๋‹ค
  • ์ด๋ฏธ์ง€ ๋ฆด๋ฆฌ์Šค: docker buildx build --platform linux/amd64,linux/arm64 --build-arg HUOBAO_VERSION=x.y.z -t huobao/huobao-drama:x.y.z -t huobao/huobao-drama:latest --push .. ๋ฒ„์ „ ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋Š” ๋ฐ์Šคํฌํ†ฑ ๋ฒ„์ „๊ณผ GitHub Releases์˜ latest.json์„ ๊ณต์œ (HUOBAO_UPDATE_FEED๋กœ ์žฌ์ •์˜ ๊ฐ€๋Šฅ)

๐ŸŽจ ๊ธฐ์ˆ  ์Šคํƒ

๋ฐฑ์—”๋“œ

  • ๋Ÿฐํƒ€์ž„: Node.js 20+
  • ์›น ํ”„๋ ˆ์ž„์›Œํฌ: Hono
  • ORM: Drizzle ORM + better-sqlite3(WAL ๋ชจ๋“œ)
  • AI Agent: Mastra + AI SDK(OpenAI ํ˜ธํ™˜)
  • ์˜์ƒ ์ฒ˜๋ฆฌ: FFmpeg(fluent-ffmpeg + ๋‚ด์žฅ ๋ฐ”์ด๋„ˆ๋ฆฌ)
  • ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ: Sharp

๋ฐ์Šคํฌํ†ฑ

  • ์…ธ: Electron(utilityProcess๊ฐ€ ๋ฐฑ์—”๋“œ๋ฅผ ํ˜ธ์ŠคํŒ…, BrowserWindow๋Š” ๋™์ผ ์ถœ์ฒ˜๋กœ ๋กœ๋“œ)
  • ํŒจํ‚ค์ง•: esbuild(๋ฐฑ์—”๋“œ ๋‹จ์ผ ํŒŒ์ผ ๋ฒˆ๋“ค) + electron-builder(dmg arm64/x64, NSIS win-x64)

ํ”„๋ŸฐํŠธ์—”๋“œ

  • ํ”„๋ ˆ์ž„์›Œํฌ: Nuxt 3(SPA ๋ชจ๋“œ)
  • ์–ธ์–ด: Vue 3 + TypeScript
  • ๋ผ์šฐํŒ…: ํŒŒ์ผ ๋ผ์šฐํŒ…(Vue Router 4)
  • ์Šคํƒ€์ผ: ์ˆœ์ˆ˜ CSS + CSS Variables
  • ์•„์ด์ฝ˜: Lucide Vue
  • i18n: vue-i18n(ไธญๆ–‡ / English / ๆ—ฅๆœฌ่ชž / ํ•œ๊ตญ์–ด)

๐Ÿ“ ์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ

Q: ๋ฐ์Šคํฌํ†ฑ ๋ฒ„์ „์˜ ๋ฐ์ดํ„ฐ๋Š” ์–ด๋””์— ์ €์žฅ๋˜๋‚˜์š”?

A: ~/Library/Application Support/HuobaoDrama/data/(SQLite ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค + ์ƒ์„ฑ๋œ ์ด๋ฏธ์ง€/์˜์ƒ)์— ์ €์žฅ๋˜๋ฉฐ, ์˜จ๋ผ์ธ ํŽธ์ง‘ํ•œ ์Šคํ‚ฌ์˜ ๋ณต์‚ฌ๋ณธ์€ ๊ฐ™์€ ์ˆ˜์ค€์˜ workspace/ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ๋ชจ๋“œ์—์„œ๋Š” ์ €์žฅ์†Œ์˜ data/ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Q: ๊ตฌ๋ฒ„์ „ MySQL ๋ฐ์ดํ„ฐ๋ฅผ SQLite๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋ ค๋ฉด?

A: MySQL์— ์—ฐ๊ฒฐ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ(ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋˜๋Š” backend/.env)๋ฅผ ์œ ์ง€ํ•˜๊ณ  cd backend && npx tsx scripts/import-mysql-to-sqlite.ts๋ฅผ ์‹คํ–‰ํ•˜์„ธ์š”. ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ž๋™์œผ๋กœ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜๊ณ  ํ…Œ์ด๋ธ”๋ณ„๋กœ ๊ฐ€์ ธ์˜ค๋ฉฐ ํ–‰ ์ˆ˜๋ฅผ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค(๋Œ€์ƒ DB๊ฐ€ ๋น„์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด --force ํ•„์š”, ์“ฐ๊ธฐ ์ „ ์ž๋™ ๋ฐฑ์—…).

Q: FFmpeg๊ฐ€ ์„ค์น˜๋˜์ง€ ์•Š์•˜๊ฑฐ๋‚˜ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค๊ณ  ๋‚˜์˜ต๋‹ˆ๋‹ค?

A: ์„ค์น˜ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์— ffmpeg-static / ffprobe-static ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ๋‚ด์žฅ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค(๋ฐ์Šคํฌํ†ฑ ๋ฒ„์ „์—๋„ ํฌํ•จ). ์‹œ์Šคํ…œ PATH์˜ FFmpeg์™€ ์ถฉ๋Œํ•˜์ง€ ์•Š์œผ๋ฉฐ, FFMPEG_BIN/FFPROBE_BIN์œผ๋กœ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

Q: ํŽ˜์ด์ง€ ์ƒ๋‹จ์— ใ€Œ๋ชจ๋ธ ๋ฏธ์„ค์ •ใ€์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค?

A: ์ •์ƒ์ ์ธ ์ฒซ ๋ฐฐํฌ ์•ˆ๋‚ด์ž…๋‹ˆ๋‹ค. ใ€Œ์„ค์ •ใ€ ํŽ˜์ด์ง€์—์„œ ใ€Œ็ซๅฎๅฟซๆท ์„ค์ •ใ€์— API Key๋ฅผ ๋ถ™์—ฌ๋„ฃ์–ด ํ•œ ๋ฒˆ์— ์ž…๋ ฅํ•˜๊ฑฐ๋‚˜, ใ€Œ์ˆ˜๋™ ํ…œํ”Œ๋ฆฟใ€์œผ๋กœ ํ”„๋กœ๋ฐ”์ด๋”๋ฅผ ์ถ”๊ฐ€ํ•˜์„ธ์š”. ํ…์ŠคํŠธ, ์ด๋ฏธ์ง€, ์˜์ƒ 3๊ฐ€์ง€ ๋ชจ๋‘์— ํ™œ์„ฑํ™”๋œ ์„ค์ •์ด ์žˆ์œผ๋ฉด ๋ฐฐ๋„ˆ๊ฐ€ ์ž๋™์œผ๋กœ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

Q: ํ”„๋ŸฐํŠธ์—”๋“œ๊ฐ€ ๋ฐฑ์—”๋“œ API์— ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค?

A: ๋ฐฑ์—”๋“œ๊ฐ€ ์‹œ์ž‘๋˜์—ˆ๋Š”์ง€, ํฌํŠธ๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ์ง€ ํ™•์ธํ•˜์„ธ์š”. ๊ฐœ๋ฐœ ๋ชจ๋“œ์˜ ํ”„๋ก์‹œ ์„ค์ •์€ frontend/nuxt.config.ts์— ์žˆ์Šต๋‹ˆ๋‹ค.

Q: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์ด ์ƒ์„ฑ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค?

A: ๋ฐฑ์—”๋“œ๋Š” ์ตœ์ดˆ ์‹œ์ž‘ ์‹œ ๋ชจ๋“  ํ…Œ์ด๋ธ”์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋กœ๊ทธ์—์„œ ์ดˆ๊ธฐํ™” ์„ฑ๊ณต ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜์„ธ์š”.


๐Ÿ“‹ ์—…๋ฐ์ดํŠธ ๋กœ๊ทธ

v4.0.0 (2026-08)

๐Ÿ–ฅ๏ธ ๋ฐ์Šคํฌํ†ฑ ์•ฑ + ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜

  • Electron ๋ฐ์Šคํฌํ†ฑ ๋ฒ„์ „(macOS dmg, arm64/x64 ๋“€์–ผ ์•„ํ‚คํ…์ฒ˜)
    • ๋”๋ธ”ํด๋ฆญ ์„ค์น˜, ์ฆ‰์‹œ ์‚ฌ์šฉ: ์ž๋™ ํฌํŠธ ์„ ํƒ, ๋‹จ์ผ ์ธ์Šคํ„ด์Šค ์ž ๊ธˆ, ์ถฉ๋Œ ๋ถ„๋ฆฌ๋œ ๋ฐฑ์—”๋“œ ์„œ๋ธŒํ”„๋กœ์„ธ์Šค
    • ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ ๋ถ„๋ฆฌ: SQLite DB / ์ƒ์„ฑ๋œ ๋ฏธ๋””์–ด / ์Šคํ‚ฌ ๋ณต์‚ฌ๋ณธ ๋ชจ๋‘ userData ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์ €์žฅ
    • FFmpeg/FFprobe ํฌํ•จ ๋ฐฐํฌ. workspace ์Šคํ‚ฌ ํ…œํ”Œ๋ฆฟ์€ ์ฒซ ์‹œ์ž‘ ์‹œ ๋ณต์‚ฌ, ์—…๊ทธ๋ ˆ์ด๋“œ ์‹œ ๋ˆ„๋ฝ๋ถ„๋งŒ ๋ณด์ถฉํ•˜๊ณ  ๋ฎ์–ด์“ฐ์ง€ ์•Š์Œ
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ MySQL์—์„œ SQLite๋กœ ์™„์ „ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜(better-sqlite3 + WAL)
    • ๋น„์ฆˆ๋‹ˆ์Šค ์ฝ”๋“œ ๋ณ€๊ฒฝ ์ œ๋กœ(Drizzle ์ฟผ๋ฆฌ ๊ณ„์ธต์€ ๋ณธ์งˆ์ ์œผ๋กœ ์ด์‹ ๊ฐ€๋Šฅ), ๋ฉฑ๋“ฑ DDL ์žฌ์ƒ
    • 1ํšŒ์šฉ ๊ฐ€์ ธ์˜ค๊ธฐ ์Šคํฌ๋ฆฝํŠธ import-mysql-to-sqlite.ts ์ถ”๊ฐ€(ํ…Œ์ด๋ธ”๋ณ„ ํ–‰ ์ˆ˜ ๊ฒ€์ฆ + ์ž๋™ ๋ฐฑ์—…)
  • ๋ฐฑ์—”๋“œ esbuild ๋‹จ์ผ ํŒŒ์ผ ๋ฒˆ๋“ค(externals: sharp/better-sqlite3/ffmpeg ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒจํ‚ค์ง€)
  • Docker/MySQL ๋ฐฐํฌ ๋ฐฉ์‹ ์ œ๊ฑฐ(git ํžˆ์Šคํ† ๋ฆฌ์—์„œ ๋ณต๊ตฌ ๊ฐ€๋Šฅ)

v3.1.0 (2026-09)

  • Alibaba Bailian Wan 3.0 ๋™์˜์ƒ ๋ชจ๋ธ ์ถ”๊ฐ€(Prime / ํ‘œ์ค€, ๊ณต์‹ input.media/parameters ํŒŒ๋ผ๋ฏธํ„ฐ ์ง€์›)
  • ์ž‘์—…๋Œ€ ์ƒ๋‹จ ๋ฐ”์— ํ•ด์ƒ๋„ ์„ ํƒ๊ธฐ ์ถ”๊ฐ€, ์ œ๊ณต์‚ฌ๋ณ„ ๋„ค์ดํ‹ฐ๋ธŒ ๋‹จ๊ณ„ ํ‘œ์‹œ(Seedance 480p/720p, MiniMax 768P/2K, Wan 480P/720P/1080P)
  • ๊ธฐ๋ณธ ๋™์˜์ƒ ๋ชจ๋ธ์„ Seedance 2.0 Mini๋กœ ๋ณ€๊ฒฝ
  • ๋™์˜์ƒ ๋ชจ๋ธ ์ „ํ™˜ ์‹œ ์ œ๊ณต์‚ฌ/๋ชจ๋ธ ๋ถˆ์ผ์น˜๋กœ ์ธํ•œ ์ƒ์„ฑ ์˜ค๋ฅ˜ ์ˆ˜์ •
  • ๋ฐฐ์น˜ ๋™์˜์ƒ: ์„ ํƒ ๋ชจ๋“œ + ์ƒ์„ฑ ์ „ ํ™•์ธ(์ˆ ์ˆ˜/์ด ๊ธธ์ด/๋ชจ๋ธ/ํ•ด์ƒ๋„), ์‹คํŒจ ์ž‘์—… ์›ํด๋ฆญ ์žฌ์‹œ๋„
  • ์Šคํ† ๋ฆฌ๋ณด๋“œ ๊ธธ์ด๋ฅผ ๋™์˜์ƒ ์ƒ์„ฑ ํŒŒ๋ผ๋ฏธํ„ฐ ์˜์—ญ์—์„œ ์ง์ ‘ ํŽธ์ง‘ยท์ €์žฅ, ๋‹จ๊ฑด/๋ฐฐ์น˜ ์ƒ์„ฑ์— ํ†ต์ผ ์ ์šฉ
  • ์‹ค์‚ฌ/๋ฏผ๊ฐ ์ฝ˜ํ…์ธ  ์‹ฌ์‚ฌ ์‹คํŒจ ์‹œ ๋ชจ๋ธ ์ „ํ™˜ ํ›„ ์žฌ์‹œ๋„ ์•ˆ๋‚ด

v3.0.0 (2026-08)

๐Ÿš€ ๋ฐฐํฌ ๋ฐ ๊ฒฝํ—˜ ์ตœ์ ํ™”

  • Docker ๋ฐฐํฌ ์ค€๋น„ ๊ฐœ์„ 
    • MySQL / ์•ฑ ํ—ฌ์Šค ์ฒดํฌ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ค€๋น„ ํ›„ ์•ฑ ์‹œ์ž‘
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ดˆ๊ธฐํ™”์— ์žฌ์‹œ๋„ ์ถ”๊ฐ€, ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์—์„œ ์ฒซ ๋ฐฐํฌ ๋ฌด์ธ ์™„๋ฃŒ
    • ์‹œ์Šคํ…œ FFmpeg ์˜์กด ์ œ๊ฑฐ, ๋‚ด์žฅ ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ ์ „๋ฉด ์ „ํ™˜
    • Agent skills ๋””๋ ‰ํ„ฐ๋ฆฌ ๋ณผ๋ฅจ ์˜์†ํ™”(์„ค์ • ํŽ˜์ด์ง€ ์˜จ๋ผ์ธ ํŽธ์ง‘ ์œ ์‹ค ๋ฐฉ์ง€)
    • docker/init.sql ๋ฐ ๋‚ฉ์ถœ ์Šคํฌ๋ฆฝํŠธ ์ถ”๊ฐ€(DBA ๊ฒ€ํ†  / ์‚ฌ์ „ ํ…Œ์ด๋ธ” ์ƒ์„ฑ)
  • ์ฒซ ์‚ฌ์šฉ ๊ฐ€์ด๋“œ
    • AI ์„œ๋น„์Šค ๋ฏธ์„ค์ • ์‹œ ์‚ฌ์ดํŠธ ์ƒ๋‹จ ๋ฐฐ๋„ˆ๋กœ ์„ค์ • ํŽ˜์ด์ง€ ์•ˆ๋‚ด
    • ์„ค์ • ํŽ˜์ด์ง€์— ใ€Œ็ซๅฎๅฟซๆท ์„ค์ •ใ€ ์ถ”๊ฐ€: Key ํ•˜๋‚˜๋กœ ํ…์ŠคํŠธ/์ด๋ฏธ์ง€/์˜์ƒ ์ถ”์ฒœ ์„ค์ • 3๊ฐœ ์ž…๋ ฅ
    • ๋ชจ๋ธ ๋ฏธ์„ค์ • ์˜ค๋ฅ˜์˜ ์ค‘๊ตญ์–ดํ™” ๋ฐ ์„ค์ • ํŽ˜์ด์ง€ ์•ˆ๋‚ด
  • ์˜์ƒ ๋ชจ๋ธ ๊ธฐ๋ณธ๊ฐ’์„ Seedance 2.0 Fast๋กœ ์กฐ์ •
  • ํ”„๋กœ๋ฐ”์ด๋” ํ†ตํ•ฉ: OpenAI / Gemini / Volcano Engine๋งŒ ์œ ์ง€
  • ์›Œํฌ๋ฒค์น˜: ์ž‘์—… ๋ชฉ๋ก ๋“œ๋กœ์–ด, ํŒŒ์ดํ”„๋ผ์ธ ๋Œ€์„น์…˜ ์ƒํƒœ, ์„ ํƒ์  ๋ณ‘ํ•ฉ(๋ณ‘ํ•ฉ ์ „ ์˜์ƒ ํŒŒ์ผ ์กด์žฌ ๊ฒ€์ฆ)
  • ์†Œ์žฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฐœํŽธ, @๋ฉ˜์…˜ ์ตœ์ ํ™”, ์—ํ”ผ์†Œ๋“œ ๋ชฉ๋ก ์žฌ๊ตฌ์„ฑ

v2.0.0 (2026-04)

๐Ÿš€ ๋Œ€๊ทœ๋ชจ ์—…๋ฐ์ดํŠธ

  • ํ”„๋กœ์ ํŠธ๋ฅผ TypeScript ๊ธฐ์ˆ  ์Šคํƒ์œผ๋กœ ์ „๋ฉด ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜
    • ๋ฐฑ์—”๋“œ: Hono + Drizzle ORM + mysql2
    • ํ”„๋ŸฐํŠธ์—”๋“œ: Nuxt 3 + Vue 3
    • AI Agent: Mastra ํ”„๋ ˆ์ž„์›Œํฌ
  • ์—ํ”ผ์†Œ๋“œ ์›Œํฌ๋ฒค์น˜ UI์™€ ์ œ์ž‘ ํ”Œ๋กœ์šฐ ์žฌ๊ตฌ์ถ•
    • ๋” ์ปดํŒฉํŠธํ•œ ์ฝ˜์†” ๋ ˆ์ด์•„์›ƒ
    • ์Šคํ† ๋ฆฌ๋ณด๋“œ ํŽธ์ง‘ ์˜์—ญ ์žฌ๊ตฌ์ถ•
    • ์ƒท ์ด๋ฏธ์ง€, ์˜์ƒ, ํ•ฉ์„ฑ, ๋‚ฉ์ถœ ํ™”๋ฉด ์žฌ๊ตฌ์ถ•
  • Docker ๋ฐฐํฌ ์ง€์› ์ถ”๊ฐ€, ํ”„๋ŸฐํŠธ์—”๋“œ์™€ ๋ฐฑ์—”๋“œ๋ฅผ ๋‹จ์ผ ์ด๋ฏธ์ง€๋กœ ํ†ตํ•ฉ
  • ๋Ÿฐํƒ€์ž„ Skill ๋กœ๋”ฉ ๋ฉ”์ปค๋‹ˆ์ฆ˜ ์ถ”๊ฐ€
  • ๋ฉ€ํ‹ฐ ํ”„๋กœ๋ฐ”์ด๋” ๋ฏธ๋””์–ด ์–ด๋Œ‘ํ„ฐ ํ™•์žฅ
    • ์ด๋ฏธ์ง€: OpenAI, Gemini, Volcano Engine, Alibaba
    • ์˜์ƒ: Volcano Engine/Seedance, Vidu, Alibaba
  • ๋กœ์ปฌ ํŒŒ์ผ ์ฒ˜๋ฆฌ ๋ฐ ์ฐธ์กฐ ์ด๋ฏธ์ง€ ์˜จ๋””๋งจ๋“œ ํŠธ๋žœ์Šค์ฝ”๋”ฉ ์ตœ์ ํ™”

v1.0.4 (2026-01-27)

  • ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€ ์ „๋žต ๋„์ž…์œผ๋กœ ์™ธ๋ถ€ ๋ฆฌ์†Œ์Šค ๋งํฌ ์‹คํšจ ํšŒํ”ผ
  • Base64 ์ฐธ์กฐ ์ด๋ฏธ์ง€ ์ž„๋ฒ ๋””๋“œ ์ „์†ก
  • ์ƒท ์ „ํ™˜ ์ƒํƒœ ๋ฆฌ์…‹ ๋ฌธ์ œ ์ˆ˜์ •
  • ์žฅ๋ฉด์˜ ์ฑ•ํ„ฐ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ถ”๊ฐ€

v1.0.3 (2026-01-16)

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋™์‹œ ์ ‘๊ทผ ์„ฑ๋Šฅ ์ตœ์ ํ™”
  • Docker ํฌ๋กœ์Šค ํ”Œ๋žซํผ host.docker.internal ์ง€์›

v1.0.2 (2026-01-14)

  • ์˜์ƒ ์ƒ์„ฑ API ์‘๋‹ต ํŒŒ์‹ฑ ๋ฌธ์ œ ์ˆ˜์ •
  • OpenAI Sora ์˜์ƒ ์—”๋“œํฌ์ธํŠธ ์„ค์ • ์ถ”๊ฐ€
  • ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๋ฐ ๋กœ๊ทธ ์ถœ๋ ฅ ์ตœ์ ํ™”

๐Ÿ“„ ๋ผ์ด์„ ์Šค

์ด ํ”„๋กœ์ ํŠธ๋Š” CC BY-NC-SA 4.0(์ €์ž‘์žํ‘œ์‹œ-๋น„์˜๋ฆฌ-๋™์ผ์กฐ๊ฑณ๊ฒฝ๋ณ€๊ฒฝํ—ˆ๋ฝ 4.0 ๊ตญ์ œ) ๋ผ์ด์„ ์Šค๋ฅผ ์ฑ„ํƒํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  • โœ… ๊ฐœ์ธ ์‚ฌ์šฉ, ํ•™์Šตยท์—ฐ๊ตฌ, ๋น„์˜๋ฆฌ ํ”„๋กœ์ ํŠธ๋Š” ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • โœ… ์ˆ˜์ • ๋ฐ ์žฌ๋ฐฐํฌ ๊ฐ€๋Šฅ, ๋‹จ ์ €์ž‘์ž ํ‘œ์‹œ์™€ ๋™์ผ ๋ผ์ด์„ ์Šค๋กœ ๊ณต์œ  ํ•„์š”
  • โŒ ์ƒ์—…์  ์‚ฌ์šฉ ๊ธˆ์ง€ โ€” ์ €์ž‘์ž์˜ ์„œ๋ฉด ํ—ˆ๊ฐ€ ์—†์ด ์ด ํ”„๋กœ์ ํŠธ์˜ ์ „๋ถ€ ๋˜๋Š” ์ผ๋ถ€๋ฅผ ์–ด๋– ํ•œ ์ƒ์—…์  ๋ชฉ์ (์œ ๋ฃŒ ์„œ๋น„์Šค, ์ƒ์—… ๋ฐฐํฌ, ์žฌํŒ๋งค ๋“ฑ)์œผ๋กœ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค

๋ผ์ด์„ ์Šค ์ „๋ฌธ์€ 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 ์ƒ์„ฑ

์ž์ฃผ ์“ฐ๋Š” ๊ฒ€์‚ฌ ๋ช…๋ น:

cd backend && npm run typecheck
cd ../frontend && npm run build

๐Ÿ’ฌ WeChat ๊ทธ๋ฃน

QR ์ฝ”๋“œ๋ฅผ ์Šค์บ”ํ•˜์—ฌ WeChat ๊ทธ๋ฃน์— ์ฐธ์—ฌํ•˜์„ธ์š”:

WeChat ๊ทธ๋ฃน QR ์ฝ”๋“œ

"AI๊ฐ€ ๋” ์ฐฝ์˜์ ์ธ ์ผ์„ ๋•๊ฒŒ ํ•˜์ž"

๐Ÿ”— ๊ด€๋ จ ๋งํฌ

์ด ํ”„๋กœ์ ํŠธ๋Š” LINUX DO ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ๋งํฌ ์Šน์ธ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.

  • LINUX DO โ€” ์ง„์ •ํ•œ ์˜คํ”ˆ์†Œ์Šค ์ •์‹ , ํ•จ๊ป˜ ๋งŒ๋“ค๊ณ  ๊ณต์œ ํ•˜๋Š” ๊ธฐ์ˆ  ์ปค๋ฎค๋‹ˆํ‹ฐ

๊ด€๋ จ ํ”„๋กœ์ ํŠธ ์‚ดํŽด๋ณด๊ธฐ