Skip to main content

Pixel-art open book with sound bars bouncing above it

Sawt

صوت (sawt): Arabic for "voice" or "sound".

Listen to any web page, or turn a whole book into an audiobook, with a natural voice that runs on your own computer.

Free, private, offline. No account, no subscription, no usage limits, and nothing you read is ever sent to a server: the voice model (Kokoro, 82M parameters) runs locally on your CPU.

  • Read any article aloud from the browser: one click or Alt+R. Menus, ads and sidebars are skipped, the sentence being spoken is highlighted, and every page resumes where you left off.
  • Meanings of hard words as you listen. When a sentence holds a word like "myopic", a small card beside the article explains it, from an offline dictionary or from the article itself ("maximum allowable operating pressure (MAOP)"). Reading never pauses.
  • Follow along word by word, optionally: the word being spoken can be gently magnified.
  • Convert books (EPUB, PDF, TXT) into .m4b audiobooks with chapter markers, mastered to audiobook loudness standards.
  • 28 English voices, American and British, with adjustable speed.

Status: v0.2, early. It works well for the author daily; expect rough edges. Bug reports and contributions are very welcome. See CONTRIBUTING.md.

How it works

 Browser extension                        Your computer
┌───────────────────────┐   article text   ┌──────────────────────────────┐
│ finds the article     │ ───────────────▶ │ sawt serve              │
│ plays + highlights    │ ◀─────────────── │ Kokoro voice model (CPU)     │
└───────────────────────┘   sentence audio  └──────────────────────────────┘
                     only over 127.0.0.1 - never the internet

The extension can't run a voice model by itself, so it talks to a small engine you run locally. The engine keeps the model loaded, synthesizes a few sentences ahead of playback, and caches the audio, so re-opening an article plays instantly.

Install

1. Install the engine. You need uv, the Python installer (skip this if uv --version already works):

# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows (PowerShell)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

Then:

uv tool install sawt
sawt agent install   # downloads the voice model once (~350MB), then runs in the background

From then on the engine starts by itself when you log in and restarts if it stops, so there is no window to keep open. sawt agent status checks on it and sawt agent uninstall removes it. To run it only when you want, use sawt serve and keep that terminal open instead.

After uv tool upgrade sawt, run sawt agent install again to restart on the new version.

2. Add the browser extension from the Chrome Web Store. Its setup page checks that the engine is running.

3. Open any article and press Alt+R.

Usage

Reading web pages

Do this To
Toolbar icon → Read this page, or Alt+R Read the article
Alt+R again Pause / resume
Right-click selected text → Read selection aloud Hear just that, when the page's article detection picks the wrong block
Popup → voice / speed Change it mid-article; reading continues from the current sentence

More: docs/extension.md (highlighting, resume, limits).

Converting books

Needs FFmpeg on your PATH.

sawt extract ~/Downloads/mybook.epub     # -> chapters
sawt inspect                             # check what extraction produced
sawt synth                               # synthesize (hours for a novel; resumable)
sawt build                               # -> ~/Sawt/out/<book>.m4b

Or several at once, unattended: sawt batch books/*.epub --voice af_bella --speed 0.85. The full guide (voices, pronunciation fixes, trimming front matter, quality checks): docs/books.md.

Run sawt with no arguments for every command.

Configuration

Setting Default What it does
SAWT_HOME ~/Sawt Where books, output, the audio cache and pronounce.json live
SAWT_MODELS ~/.cache/sawt/models Where the voice model and the glossary are stored
SAWT_GLOSSARY (downloaded) Use this glossary file instead, e.g. one built with scripts/build_glossary.py
SAWT_EXTENSION_IDS the published extension Extra extension IDs the engine accepts (comma-separated), e.g. a fork with its own ID
sawt serve --port 7865 Port the engine listens on (the extension expects 7865)
pronounce.json — Whole-word pronunciation fixes, e.g. {"Gregor": "Gregg or"}

Platform support

Engine Start at login Extension
macOS ✅ ✅ sawt agent install (launchd) ✅ Chrome; other Chromium browsers should work
Linux ✅ ⚠️ sawt agent install (systemd user service), new and lightly tested ✅ Chrome / Chromium
Windows ⚠️ expected to work, untested ⚠️ sawt agent install (Task Scheduler), new and untested ✅ Chrome

English only for now. Firefox and Safari are not supported yet.

Privacy and security

  • The extension reads a page only when you ask, and sends its text only to 127.0.0.1.
  • The engine makes network requests only to download two files once, on first start: the voice model and the word glossary, both from GitHub and both verified against pinned SHA-256 hashes.
  • The engine refuses requests from web pages and from other extensions. Details in SECURITY.md; the full policy is in PRIVACY.md.

Troubleshooting

Problem Fix
Popup says the engine isn't running sawt agent status, then sawt agent install to (re)start it. The log is ~/Sawt/work/serve.log. Check it answers: curl -H "X-Sawt: 1" http://127.0.0.1:7865/health
sawt: command not found after install Open a new terminal, or run uv tool update-shell
Nothing is read on a page Scroll first if the page loads text lazily, or select the text and right-click → Read selection aloud
A name is mispronounced Add it to pronounce.json in SAWT_HOME with a phonetic spelling
build fails Install FFmpeg (brew install ffmpeg, apt install ffmpeg, or winget install ffmpeg)

Roadmap

  • A desktop app that bundles the engine, so no terminal is needed
  • Firefox support
  • More languages (Kokoro has voices for Spanish, French, Hindi, Italian, Japanese, Portuguese and Chinese)

Ideas and votes welcome in issues.

Contributing

Pull requests are welcome, from typo fixes to new features. Start with CONTRIBUTING.md (setup takes a couple of minutes) and docs/architecture.md for a map of the code. Issues marked good first issue are a gentle way in.

Credits

  • Kokoro by hexgrad, the voice model (Apache-2.0)
  • kokoro-onnx, which runs it on the CPU (MIT)
  • Readability by Mozilla, which finds the article on a page (Apache-2.0)
  • Word meanings come from Wiktionary (CC BY-SA 4.0), via the Kaikki.org extraction; word frequencies from wordfreq
  • Pronunciation falls back to espeak-ng (GPL-3.0), installed as a dependency of kokoro-onnx

Convert books you own, public-domain texts and your own writing. Distributing a synthesized copy of an in-copyright book is not allowed.

Licence

MIT

Metadata

Release files for sawt 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sawt 0.2.1
File Size Uploaded Provenance Actions
sawt-0.2.1.tar.gz 177.0 kB With provenance Details for sawt-0.2.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for sawt 0.2.1
File Interpreter ABI Platform Actions
sawt-0.2.1-py3-none-any.whl Python 3 none any Details for sawt-0.2.1-py3-none-any.whl

Total release size: 232.2 kB

Release files / sawt-0.2.1.tar.gz

Download URL sawt-0.2.1.tar.gz
Size 177.0 kB
Tags Source
SHA-256 checksum
How to use checksums
8044e6699c1fc9bc1bb8533add061f71531bbfe993b8420bacb7ba0b921f3991
BLAKE2b-256 checksum
How to use checksums
cde531604d208c456bbb2db691cdc2694a8125e239872394e7f986c14800ee3a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 1, 2026.

Transparency log

Release files / sawt-0.2.1-py3-none-any.whl

Download URL sawt-0.2.1-py3-none-any.whl
Size 55.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9cc8a55eca1b09d9766ca08707bdd1eeb5b8ee1673456916f91c93d5ee538bf9
BLAKE2b-256 checksum
How to use checksums
5973259cf69fb8180b77b9ce389ad86fa8cb237a8b7198ef3a0181c410b84e39
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 1, 2026.

Transparency log

Security for sawt 0.2.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for sawt-0.2.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 1, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page