A local proxy that exposes the League of Legends Live Client Data API to your LAN, featuring an AI Toxic Coach that roasts you in real-time when you die.
- 🔍 Auto Detection — Automatically detects the LoL game client
- 🔄 HTTP Proxy — Proxies all
/liveclientdata/*endpoints to LAN - 📡 WebSocket Push — Real-time game data via WebSocket
- 📊 Status Dashboard — Web UI for game status, players, and events
- 🤖 AI Toxic Coach — LLM-powered roasts with dynamic themes (powered by Google Gemini)
- 🗣️ Premium TTS — ElevenLabs V3 Dialogue API with 60+ emotion audio tags, or free Edge TTS
- 🎵 Web Audio Player — Browser-based player with progress bar, pause/resume, replay, and history
- 🌐 Multilingual — Chinese & English UI and roast generation
# Install dependencies
npm install
# Copy and configure environment
cp .env.example .env
# Edit .env with your API keys
# Start (development)
npm run dev
# Start (production)
npm startOpen http://localhost:8099 in your browser to see the dashboard.
All settings are managed via .env:
# LLM (Google Gemini)
LLM_ENABLED=true
LLM_API_KEY=your_gemini_api_key
LLM_BASE_URL=https://generativelanguage.googleapis.com/v1beta/openai/
LLM_MODEL=gemini-2.0-flash
# TTS Provider: "edge" (free) or "elevenlabs" (paid, with emotion tags)
TTS_PROVIDER=elevenlabs
ELEVENLABS_API_KEY=your_elevenlabs_api_key
ELEVENLABS_VOICE_ID=5mZxJZhSmJTjL7GoYfYI # Karo Yang (Chinese)When using ElevenLabs V3 Dialogue API, the AI coach can express emotions:
[laughs] [sighs] [sarcastic tone] [angry] [whispers] [shouts] ...
60+ tags are available including emotions, delivery styles, reactions, and pacing controls.
The coach triggers roasts based on in-game events:
| Event | Trigger |
|---|---|
| 💀 Death | Player dies |
| ⚔️ Kill | Player gets a kill |
| 💰 CS Gap | Poor CS performance |
| 🐷 Teammate Death | Teammate dies |
| 🐉 Objective | Dragon/Baron/Herald taken |
Each roast uses a random theme (e.g., "disappointed parent", "suggest uninstall", "compare to minions") for variety.
| Endpoint | Description |
|---|---|
GET /status |
Service status |
GET /liveclientdata/allgamedata |
All game data |
GET /liveclientdata/activeplayer |
Active player |
GET /liveclientdata/playerlist |
Player list |
GET /liveclientdata/eventdata |
Game events |
GET /liveclientdata/gamestats |
Game statistics |
GET /audio/:hash |
Serve cached TTS audio |
WS /ws |
WebSocket real-time push |
# Build for both Windows and Mac
npm run build
# Windows only
npm run build:win
# Mac only
npm run build:macOutput in dist/ directory. Users can run the executable directly without Node.js.
Package as a desktop application with system tray and built-in browser window:
# Development
npm run electron:dev
# Build for Mac (.dmg)
npm run electron:build:mac
# Build for Windows (.exe installer)
npm run electron:build:win
# Build for both
npm run electron:buildOutput in dist-electron/ directory.
git tag v0.2.0
git push origin v0.2.0Pushing a tag triggers GitHub Actions to automatically build:
- CLI:
lol-roaster-win.exe+lol-roaster-macos(via pkg) - Desktop:
.dmg(macOS) +.exeinstaller (Windows) (via electron-builder)
All artifacts are published on the GitHub Releases page.
- Polls
https://127.0.0.1:2999/liveclientdata/allgamedatato detect game status - Proxies all API requests to the local LoL client
- Pushes game data via WebSocket to connected browsers
- AI Coach monitors events → generates roasts via LLM → converts to speech via TTS → streams audio to browser
MIT