μκ·λͺ¨ μ€νΈλ¦¬λ¨Έλ€μ μ±ν λΆμ‘± λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν AI κΈ°λ° μ±ν μμ± μλΉμ€
- π₯ μ€μκ° μ€νΈλ¦Ό μ°κ²°: μΉμ§μ§ WebSocket APIλ₯Ό ν΅ν μ€μκ° μ±ν μμ§
- π€ AI μ±ν μμ±: Claude API κΈ°λ° λ§₯λ½ μΈμ μμ°μ€λ¬μ΄ μ±ν μμ±
- β‘ μ€μκ° ν΅μ : Socket.ioλ₯Ό ν΅ν μ€μκ° λ°μ΄ν° μ μ‘
- π μΉ λμ보λ: μ€νΈλ¦Ό μ°κ²° λ° AI μ€μ κ΄λ¦¬
- π¬ OBS μ€λ²λ μ΄: AI μ±ν νμμ© λΈλΌμ°μ μμ€
# νλ‘μ νΈ ν΄λ‘ ν μ΄λ
cd chzzk-ai-chat
# μμ‘΄μ± μ€μΉ
npm install
cd packages/api && npm install
cd ../../services/chzzk-connector && npm install
cd ../ai-chat-generator && npm installpackages/api/.env νμΌμμ Claude API ν€λ₯Ό μ€μ νμΈμ:
ANTHROPIC_API_KEY=your_actual_claude_api_key_here# API μλ² μμ (ν¬νΈ 3001)
cd packages/api
npm run dev
# μΉ λμ보λ μμ (ν¬νΈ 3000)
cd apps/web
python -m http.server 3000
# OBS μ€λ²λ μ΄ μμ (ν¬νΈ 3002)
cd overlays/chat-display
python -m http.server 3002- μΉ λμ보λ: http://localhost:3000
- OBS μ€λ²λ μ΄: http://localhost:3002/overlay.html
- API μλ²: http://localhost:3001
- μΉμ§μ§ μ±λ ID μ
λ ₯ (μ:
channelname123) - "π μ°κ²°" λ²νΌ ν΄λ¦
- AI μ±ν
μ€μ μ‘°μ :
- μμ± μ£ΌκΈ° (10-300μ΄)
- AI μ±κ²© μ ν
- κ΄μ¬ μ£Όμ μ λ ₯
- "βοΈ μ€μ μ λ°μ΄νΈ" ν΄λ¦
- OBSμμ "μμ€ μΆκ°" β "λΈλΌμ°μ " μ ν
- URL:
http://localhost:3002/overlay.html - λλΉ: 1920, λμ΄: 1080
- "CSS μ¬μ©μ μ§μ " 체ν¬νκ³ λ€μ μΆκ° (κ°λ° μ 보 μ¨κΉ):
.dev-info, .hide-dev { display: none !important; }
chzzk-ai-chat/
βββ packages/
β βββ api/ # Express + Socket.io API μλ²
β β βββ src/
β β β βββ server.ts # λ©μΈ μλ²
β β β βββ StreamManager.ts # μ€νΈλ¦Ό κ΄λ¦¬
β β βββ .env # νκ²½ λ³μ
β βββ shared/ # κ³΅ν΅ νμ
μ μ
βββ services/
β βββ chzzk-connector/ # μΉμ§μ§ API μ°λ
β βββ ai-chat-generator/ # Claude AI μ±ν
μμ±
βββ apps/
β βββ web/ # μΉ λμ보λ
β βββ index.html
βββ overlays/
βββ chat-display/ # OBS μ€λ²λ μ΄
βββ overlay.html
- νμ±ν: AI μ±ν μμ± μ¨/μ€ν
- μμ± μ£ΌκΈ°: 10-300μ΄ (κΈ°λ³Έ: 30μ΄)
- AI μ±κ²©:
- μΉκ·Όνκ³ νλ°ν μμ²μ
- μ¬λ―Έμκ³ μ λ¨Έλ¬μ€ν μμ²μ
- μ°¨λΆνκ³ μ§μ€ν μμ²μ
- μ΄μ μ μ΄κ³ μμνλ μμ²μ
- κ΄μ¬ μ£Όμ : μΌνλ‘ κ΅¬λΆ (μ: "λ°©μ‘,κ²μ,μΌμ,μμ")
- λ°±μλ: Node.js + Express + TypeScript
- μ€μκ° ν΅μ : Socket.io
- AI: Claude API (Anthropic)
- μΉμ§μ§ μ°λ: chzzk λΌμ΄λΈλ¬λ¦¬
- νλ‘ νΈμλ: HTML5 + Vanilla JavaScript
GET /: μλΉμ€ μν νμΈGET /health: ν¬μ€μ²΄ν¬GET /api/channels: μ°κ²°λ μ±λ λͺ©λ‘GET /api/channels/:channelId/config: μ±λλ³ μ€μ μ‘°ν
ν΄λΌμ΄μΈνΈ β μλ²:
connect-stream: μ€νΈλ¦Ό μ°κ²°disconnect-stream: μ€νΈλ¦Ό μ°κ²° ν΄μ update-config: AI μ€μ μ λ°μ΄νΈget-status: νμ¬ μν μμ²
μλ² β ν΄λΌμ΄μΈνΈ:
stream-connected: μ€νΈλ¦Ό μ°κ²° μ±κ³΅stream-error: μ€νΈλ¦Ό μ€λ₯chat-message: μ€μκ° μ±ν λ©μμ§ai-chat: AI μμ± μ±νstream-update: μ€νΈλ¦Ό μ 보 μ λ°μ΄νΈ
-
μ€νΈλ¦Ό μ°κ²° μ€ν¨
- μ±λ IDκ° μ ννμ§ νμΈ
- ν΄λΉ μ±λμ΄ νμ¬ λ°©μ‘ μ€μΈμ§ νμΈ
-
AI μ±ν μ΄ μμ±λμ§ μμ
.envνμΌμANTHROPIC_API_KEYνμΈ- AI μ±ν μ€μ μμ "νμ±ν"κ° μ²΄ν¬λμ΄ μλμ§ νμΈ
-
OBS μ€λ²λ μ΄κ° 보μ΄μ§ μμ
- λΈλΌμ°μ μμ€ URLμ΄ μ ννμ§ νμΈ:
http://localhost:3002/overlay.html - κ°λ° μ λ³΄κ° λ°©ν΄λλ€λ©΄ CSSλ‘ μ¨κΈ°κΈ°
- λΈλΌμ°μ μμ€ URLμ΄ μ ννμ§ νμΈ:
μλ² ν°λ―Έλμμ μ€μκ° λ‘κ·Έλ₯Ό νμΈν μ μμ΅λλ€:
- π₯: μ€νΈλ¦Ό κ΄λ ¨ μ΄λ²€νΈ
- π€: AI μ±ν μμ±
- π¬: μ€μκ° μ±ν μμ
- βοΈ: μ€μ λ³κ²½
- PostgreSQL + Prisma λ°μ΄ν°λ² μ΄μ€ μ°λ
- μ¬μ©μ μΈμ¦ λ° μ±λλ³ μ€μ μ μ₯
- AI νμ΅ λ°μ΄ν° μμ§ λ° κ°μ
- μΉ λμ보λ UI/UX κ°μ
- λ€μ€ μ±λ λμ κ΄λ¦¬
- AI μ±ν λΆμ λ° ν΅κ³
- 컀μ€ν AI μ±κ²© μ€μ
- λͺ¨λ°μΌ λμ보λ μ±
- μ΄μ 리ν¬νΈ λ° κΈ°λ₯ μ μ νμ
- ν 리νμ€νΈ μ μ½λ© μ€νμΌ μ€μ
- ν μ€νΈ μ½λ μμ± κΆμ₯
MIT License - μμ λ‘κ² μ¬μ©, μμ , λ°°ν¬ κ°λ₯
π‘ ν: κ°λ° μ€μ΄λ―λ‘ λ²κ·Έλ κ°μ μ¬νμ΄ μλ€λ©΄ μΈμ λ νΌλλ°± μ£ΌμΈμ!