A high‑quality, low‑latency Text‑to‑Speech Chrome extension (Manifest v3) powered by the Kokoro TTS model and a Python WebSocket backend. Select text on any webpage and press Ctrl+Shift+S to stream speech through your browser.
- High‑quality audio using the Kokoro‑ONNX model
- Low‑latency streaming playback via WebSockets
- 9 built‑in voices (includes one relaxation/sleep mode)
- Support for dozens more voices via
voices-v1.0.bin
- React-based popup UI with Tailwind CSS, built with WXT
- Python 3.12+
- Node.js 18+ (or your preferred package manager)
- Google Chrome
git clone https://github.com/IonMich/tts-chrome.git
cd tts-chrome
# Python backend
pip install uv
uv sync
# Frontend
cd tts-ext
npm install
Place the model files alongside websocket-server.py
in the project root:
wget https://github.com/nazdridoy/kokoro-tts/releases/download/v1.0.0/voices-v1.0.bin
wget https://github.com/nazdridoy/kokoro-tts/releases/download/v1.0.0/kokoro-v1.0.onnx
cd tts-chrome
uv run websocket-server.py
The server listens on ws://localhost:5050
by default.
cd tts-chrome/tts-ext
npm run dev
This will launch your browser with the unpacked extension in development mode, with hot reload.
npm run build
npm run zip # Chrome
npm run zip:firefox
The distributable zip will be in tts-ext/dist
.
- Browse any webpage and highlight the text you want to hear.
- Press Ctrl+Shift+S to start streaming speech.
- Adjust voice or volume in the popup UI.
- Press the shortcut again or click Stop to end speech.
- Default voice and gain settings can be configured in
tts-ext/src/lib/ttsClient.ts
. - WebSocket endpoint can be adjusted in
tts-ext/wxt.config.ts
. - UI styles are in
tts-ext/src/index.css
. Customize using Tailwind CSS.
- Ensure model files are in the project root.
- Confirm WebSocket address matches in
ttsClient.ts
. - If the extension doesn't auto-reload, reload manually from
chrome://extensions
. - Check browser console for errors.
MIT © Ioannis Michaloliakos