Local Text-to-Speech for Drupal
Add a "Listen to this page" button to any Drupal content. Fully self-hosted: no cloud APIs, no subscriptions, no data leaving your server.
Hear it
Listen to a few of the 54 built-in voices:
English (US) · af_alloy
English (UK) · bf_emma
Spanish · ef_dora
Japanese · jf_alpha
All 54 voices across 9 languages
Add it to your site
Local TTS integrates with Drupal through four methods. Pick the one that fits your setup:
| Method | Best for | Setup |
|---|---|---|
| Block | Site-wide player on every content page | Place block in a region |
| Entity field | Per-content-type voice/speed control | Add field to selected bundles |
| Extra field | Quick toggle, no field storage | Enable in Manage Display |
| Views field | Player per row in content listings | Add field to a View |
All methods share the same player UI, accessibility features, and caching system. Which should I use?
How it works
- A visitor clicks "Listen to this page"
- The module extracts text server-side by rendering the entity
- If a cached audio file exists for the current content, it is served immediately
- Otherwise a background job generates the audio; the player polls until it is ready
- The visitor hears OGG Opus audio and can pause, seek, and resume on return visits
Key capabilities
| Capability | Detail |
|---|---|
| Voices | 54 voices across 9 languages (browse) |
| Audio format | OGG Opus, small files, broad browser support |
| Speed control | 0.5x to 2.0x, adjustable per voice |
| Caching | Content-hash based; auto-invalidates on edit |
| Long content | Chunked at sentence boundaries, concatenated into one file |
| Batch generation | Admin UI or Drush; date filtering, dry-run |
| Auto-generate | Queue audio on content save; ready before the first visit |
| Accessibility | ARIA labels, keyboard shortcuts, screen reader support |
| Privacy | All processing local; no external API calls |