SpeakChatBot Offline
Electron app that reads Twitch chat aloud with offline TTS, user group permissions, and volume control.
A desktop Twitch chat reader that speaks messages aloud using local, offline text-to-speech. Control which user groups trigger playback, adjust volume on the fly, and manage voice assignments per user.
- Electron
- React 19
- Vite
- Tailwind CSS
- Zustand
- Kokoro-js (ONNX-based TTS)
- ws (WebSocket)
- axios
- react-router
- react-icons
- cross-env
- electron-builder
SpeakChatBot Offline runs entirely locally on Windows as an Electron desktop app. It connects to any Twitch channel via TMI.js, captures chat messages in real-time, and passes them through Kokoro-82M (a small TTS model running locally via ONNX and WebGPU/WASM). Messages appear in a virtualized chat window with emote rendering (BTTV, FFZ, 7TV support), and each message is queued for audio synthesis when its voice profile matches the sender.
The core permission model lets you enable TTS only for specific user groups—moderators, subscribers, VIPs, followers, or all users—so you're not overwhelmed by spam or noise. Individual voice profiles bind a user to a specific voice (af_heart, etc.), and you can mute specific prefixes (like !commands). The TTS queue runs globally across pages, with play/pause/skip controls, and volume slides instantly during playback.
The app uses Zustand for state, Vite for build speed, and custom Electron preload/IPC for secure communication between main and renderer. Settings persist to disk (userData folder), and chat history can optionally persist or clear on startup. The build produces a portable .exe via electron-builder.
- Local, offline text-to-speech with Kokoro-82M using WebGPU fallback to WASM (no internet required after model download).
- Fine-grained TTS permission system: enable playback per user group (moderators, subscribers, VIPs, followers, guests, or all).
- Real-time TTS queue with pause, skip, and volume control that updates instantly even during playback.
- User and voice profile system to assign custom voices and mute specific users or commands by prefix.
- Emote rendering (BTTV, FFZ, 7TV) and optional chat timestamp/role icons in a virtualized chat view for performance.