A Chrome extension that converts web articles to speech using built-in local AI models. No cloud services, no API keys – everything runs directly in your browser.
Riddi extracts readable content from web pages and synthesizes natural-sounding speech using bundled ONNX neural TTS models. It's perfect for:
- Listening to articles while doing other tasks
- Accessibility – have any web content read aloud
- Learning – listen to educational content hands-free
- Reducing eye strain – give your eyes a break
- Runs entirely in your browser using ONNX Runtime (WebGPU with WASM fallback)
- No data sent to external servers
- Works offline once loaded
- Automatically detects and extracts article content using Readability.js
- Filters out navigation, ads, and other non-content elements
- Text Selection Mode – manually select specific text blocks to read
- Highlights the current paragraph being read
- Word-by-word highlighting synced with speech
- Smooth auto-scroll to keep content in view
- 4 built-in voice styles (2 male, 2 female)
- Adjustable speech speed (0.5x – 2x)
- Quality/speed tradeoff via denoising steps
- Unobtrusive player that stays in the corner
- Expand for playback controls
- Can be disabled in settings (use pop-up instead)
- Navigate to any article or web page
- Click the Riddi widget (bottom-right corner) to expand controls
- Press ▶ Play to start reading the entire article
- Use ⏸ Pause and ⏹ Stop as needed
- Click the ⌖ button (or press
Ctrl+Shift+S) to enter selection mode - Hover over text blocks – they highlight with an orange outline
- Click to select – TTS starts automatically with that content
- Press
Escapeto cancel selection mode
Click the Riddi icon in the Chrome toolbar to access:
- Voice – Choose between M1, M2, F1, F2
- Speed – Adjust playback rate
- Quality Steps – Higher = better quality, slower generation
- Widget Toggle – Show/hide the floating widget
| Action | Shortcut |
|---|---|
| Play / Pause | Ctrl + Shift + Space |
| Stop | Ctrl + Shift + X |
| Select Text | Ctrl + Shift + S |
- Git LFS
- Node.js 22+
- npm or pnpm
#If you don't have Git LFS installed
#mac
brew install git-lfs
#linux
sudo apt-get install git-lfs
#windows
git lfs install
# Clone the repository
git clone https://github.com/pmbstyle/Riddi.git
cd riddi
# Install dependencies
npm install
# Build the extension
npm run build- Open
chrome://extensions/ - Enable Developer mode (top-right toggle)
- Click Load unpacked
- Select the
distfolder
# Watch mode with hot reload
npm run devAfter making changes, click the refresh icon on the extension card in chrome://extensions/.
src/
├── background/ # Service worker
├── content/ # Content script (widget, highlighting)
├── popup/ # Extension popup (Vue)
├── offscreen/ # ONNX TTS pipeline
├── lib/tts/ # TTS synthesis logic
└── shared/ # Shared types and messages
public/assets/
├── onnx/ # Neural TTS models
└── voice_styles/ # Voice embedding files
- Vite + CRXJS – Extension bundling
- Vue 3 – Popup UI
- ONNX Runtime Web – Neural network inference
- Supertonic – Lightweight TTS model
- Readability.js – Content extraction
- TTS models are bundled (~60MB) under
public/assets/onnx/ - First synthesis may take a few seconds while models load
- WebGPU provides the best performance; falls back to WASM if unavailable
- Works best on article-style pages with a clear content structure

