WebNarrator doesn’t ship with voices. Instead, it asks your operating system for the list of voices installed on your machine, and plays back through whichever one you pick. It’s not using AI, it’s not using the internet, it’s using your own machine. If you load a webpage and turn off your internet, WebNarrator will work exactly the same way. This does come at a cost to users: the quality of the voice you hear is the quality of the voices your OS has downloaded.

In my opinion, a lot of the ‘classic’ voices are absolutely awful, especially when compared to new AI text to speech options. The good news is you can download better voices for free.

Here’s how:

macOS

macOS ships with Samantha (the “classic” voice) and makes you opt in to the premium Siri and Enhanced voices.

  1. Open System Settings -> Accessibility -> Spoken Content.
  2. Click the System Voice dropdown -> Manage Voices…
  3. Scroll through the list. Voices labeled (Premium), (Enhanced), or (Siri) are much higher quality than the default.
  4. Click the cloud/download icon next to any voice you want. They’re ~100–500 MB each.
  5. Wait for the download to finish. The voice now appears in WebNarrator’s voice picker.

Recommended starting points for English:

  • Siri Voice 1–4 (en-US), best quality, most natural prosody
  • Ava (Premium), excellent for long-form reading
  • Evan (Enhanced), crisp, slightly faster cadence

If you’re multilingual, grab a Premium voice for each language you read. The difference between “Premium Italian” and “classic Italian” is the difference between going to Italy and going to Olive Garden.

Note: You may need to restart your browser to see newly downloaded languages.

Windows

Windows 10 and 11 have two types of voices, SAPI5 voices and the newer Narrator Natural voices. WebNarrator can see both, but Natural is better.

  1. Open Settings -> Accessibility -> Narrator.
  2. Under Narrator’s voice, click Add natural voices.
  3. Pick a voice and click Install. They’re ~100 MB each.
  4. Restart your browser.

Natural voices to try:

  • Microsoft Aria Online (Natural) - English (United States)
  • Microsoft Ava Online (Natural)
  • Microsoft Andrew Online (Natural)

For additional SAPI5 voices, Settings -> Time & language -> Language & region -> add a language -> click it -> Language options -> Add voices. These are lower quality than Natural but useful for languages Natural doesn’t cover yet.

Linux

Linux doesn’t have a first-party premium voice catalog, but you can substantially upgrade the defaults.

espeak-ng comes with Linux. It’s small, fast, and robotic. To get something more natural:

# Debian/Ubuntu
sudo apt install mbrola mbrola-en1 mbrola-us1 mbrola-us2 mbrola-us3
sudo apt install speech-dispatcher-mbrola

MBROLA voices sound better. After installing, restart your browser and they’ll appear in WebNarrator’s voice list.

For the best Linux experience, Piper is the current state of the art, neural TTS that runs locally, with voices rivaling commercial ones:

# Install piper (check the piper repo for the latest instructions)
# Then wire it up to speech-dispatcher so browsers pick it up

Piper setup is more involved than a single apt install, but once speech-dispatcher is pointed at it, every app using the Web Speech API, including WebNarrator, gets the upgrade for free.

ChromeOS

ChromeOS includes Google voices that are already quite good, nothing to install. But you can add more:

  1. Settings -> Advanced -> Accessibility -> Manage accessibility features.
  2. Scroll to Text-to-Speech -> Text-to-Speech voice settings.
  3. Any voice marked (needs download), click it to fetch.

Google’s enhanced voices (en-US-Standard-*, en-US-Wavenet-*) are worth grabbing if you read a lot.

iOS / Android

WebNarrator is a desktop-browser extension, so this section is only relevant if you’re curious, but for completeness:

  • iOS: Same pipeline as macOS. Settings -> Accessibility -> Spoken Content -> Voices -> download the Premium/Enhanced variants.
  • Android: Settings -> Accessibility -> Text-to-speech output -> install Google TTS voices or third-party engines like Acapela.

How to tell which voice is currently playing

Open the WebNarrator extension. The voice dropdown shows the currently selected voice and its locale code. If you’re not sure what you’re listening to, it’s probably whatever your OS said was the default, which on a fresh macOS install is Samantha, on Windows is Microsoft David, and on Linux is usually espeak-ng.

None of those are bad. But none of them are what you’d get if you spent five minutes downloading the premium ones.

A note on privacy

Every voice recommended in this post runs entirely on your device. No audio is sent to a server, at least not by WebNarrator.

Look out for voices explicitly marked “Online” or “Cloud” in their name, some Windows installations include these. WebNarrator will still play them if you pick one, but the audio synthesis happens on Microsoft’s servers, not your machine. If that matters to you, stick to voices without “Online” in the name.

If the voice list is still short

If you’ve downloaded voices and WebNarrator still doesn’t see them:

  1. Fully quit the browser (not just close the window, quit the process).
  2. Reopen the browser.
  3. Open the WebNarrator popup.
  4. The onvoiceschanged event fires once the OS has reported its updated list; the dropdown should repopulate within a second.

If the list is still missing voices, the browser may not have permission to enumerate system voices. On macOS, grant Chrome/Firefox access under System Settings -> Privacy & Security -> Accessibility.


Questions & feedback welcome, you can join my discord or email me david@linkidex.com. No soliciting.