Listen Instead: Text-to-Speech When Your Eyes Have Had Enough

There is a particular kind of tired that does not look like tiredness. The letters are still sharp. You can read them fine. But the meaning slides off, and you get to the bottom of a paragraph having decoded every word and absorbed none of it. Read it again and the same thing happens.

I know that state well. I live with a nervous system that runs hot, tinnitus that never fully stops, and visual snow, a permanent field of static over everything I look at, which most people are surprised to learn is a documented neurological condition rather than a complaint about the lighting. On the bad days the eyes still work and the comprehension does not. What I found, eventually, is that the ears were unaffected the whole time. Hand me the same text as audio and I take it in completely.

So I stopped fighting it, and built listening into the workflow instead. This is how, using tools that cost nothing.

The commercial versions of this are all subscriptions. That is the part worth resisting. What follows runs on your own machine, and the fully offline option never sends a word of your text anywhere.

What you’re building

A command you can point at any text, that returns an audio file you can listen to anywhere. Then, optionally, the same thing running entirely offline in a container, so nothing leaves your hardware.

Option 1: the cloud one, free and very good

edge-tts is a small Python tool that speaks text using Microsoft Edge’s online voices. No account, no API key, no cost.

pip install edge-tts

# list the voices
edge-tts --list-voices

# speak a file into an mp3
edge-tts --voice en-US-AndrewNeural --rate=-8% --file article.txt --write-media article.mp3

That is the whole thing. The neural voices are genuinely good, close to the paid services, and there are dozens of languages.

Two settings that matter more than the voice you pick:

  • Slow it down. --rate=-8% sounds trivial and is not. Default pace is tuned for demos, not for a tired brain. Slightly slower is markedly easier to absorb, and after a week you stop noticing it.
  • Strip the page furniture first. Markdown symbols, code blocks, URLs and ASCII tables read aloud as gibberish and break your attention. A few lines of sed to remove them before speaking is the difference between listenable and unbearable.

The honest downside, and it is the important one: your text is sent to Microsoft’s servers. For public material this is a non-issue. An article you are about to publish, a news piece, a public report, none of that is secret. For anything confidential, client material, unpublished investigation, personal records, it is disqualifying. Which brings us to the second option.

Option 2: fully offline, in Docker

Piper is a fast local neural text-to-speech system that runs on ordinary hardware, including a Raspberry Pi. Nothing touches the network. Voice quality sits below the cloud services, noticeably but not badly, and for long-form listening it is perfectly comfortable.

The neatest way to run it is behind an OpenAI-compatible API, so anything that already knows how to request speech can point at your own box instead of a vendor:

docker run -d -p 8000:8000 --name speech ghcr.io/matatonic/openedai-speech

openedai-speech serves an OpenAI-compatible /v1/audio/speech endpoint backed by Piper (and optionally Coqui XTTS if you want higher quality and have the hardware for it). Point any client at http://localhost:8000/v1 and it works, including Open WebUI if you are running local models.

Other options worth knowing:

  • Kokoro, an 82M-parameter open-weight model, small and fast with quality better than its size suggests. A good middle ground on modest hardware.
  • Coqui XTTS, higher quality and voice cloning, heavier, wants a GPU.
  • espeak-ng, ancient and robotic, tiny, and it works on anything with no model files at all. Keep it as the floor. When everything else fails, espeak still talks.
  • The built-in one. macOS has say and most Linux desktops have something similar. Lower quality, zero setup, entirely offline. Worth wiring in as an automatic fallback for when the network drops mid-task.

Choosing, honestly

There is no single right answer, only a rule that is easy to apply:

Cloud (edge-tts) Local (Piper / Kokoro)
Voice quality Excellent Good
Cost Free Free
Privacy Text goes to a third party Nothing leaves the machine
Works offline No Yes
Setup One pip install A container

Public material goes to the cloud voice. Anything sensitive stays on the box. That single rule has never yet caused me a problem, and it means the good voice is available for the bulk of the work without ever putting confidential text somewhere it should not be.

What it looks like in practice

A working day here involves a lot of reading that has nothing to do with pleasure: security advisories, geopolitical wire copy, primary-source documents from long-running investigations, some of which run to thousands of pages. That volume is what breaks the eyes in the first place.

So most of it arrives as audio now. Briefings are generated overnight and voiced before I am awake, so the day starts in the ears rather than the eyes. Long documents get narrated while I am walking the dog, which is both better for the body and, oddly, better for retention. Drafts of my own writing get read back to me, which is the single best editing trick I know, because the ear catches a clumsy sentence the eye will happily skim past.

The setup is deliberately boring: a script that cleans the text, speaks it, and drops the file where I will find it. No app, no subscription, no account. On the days when the static is loud and the head is not cooperating, the work still gets done, just through a different door.

That is the actual point. This is not a productivity trick. It is a second route into the same information, for the days the first route is closed.

What you’ve gained

A free, private way to keep working when your eyes are finished. A good cloud voice for public material, a fully offline one for everything else, and a robotic last resort that works with no network and no dependencies at all.

If you have ever read the same paragraph four times and retained none of it, try handing it to your ears instead. It is not a lesser way of reading. On the wrong day it is the only one that works.

AI disclosure

This article uses AI tools for research and generation with a human in the loop. Drafts are reviewed, edited, and signed off by a named natural person before publication. Editorial responsibility: Thomas A. Kleppestø.

Get the next guide

New privacy and security guides, plus the occasional investigation. No tracking, no spam, unsubscribe any time by replying. We never share your address.

Prefer not to sign up? Just email a tip or a correction to HAL0zum@proton.me, or use our PGP key for sensitive material.