AnkiWeb
- Rating
- 0 (π 0 Β· π 0)
- Updated
- 2026-05-10
- Anki versions
- 25.02.5~
- Description language
- en
AnkiWeb addon 170636394
Automatically reads card content aloud during reviews via neural text-to-speech, with offline system fallback, audio caching, text cleaning, and configurable speed, question, and answer settings.
Open on AnkiWeb GitHub Ask about alternatives
active
| Min Anki | Max Anki | Updated |
|---|---|---|
| 2.1.54 | 25.02.5+ | 2026-05-10 |
Loadingβ¦
Adds gradient text, bionic reading, random layout, read-aloud with karaoke highlighting, and progressive reveal to chosen note types, desktop runtime or baked for mobile.
Automatically assigns text-to-speech tags to configured note fields for playback, supporting per-field voice control and batch processing without template edits.
Enables hands-free flashcard review by reading cards aloud, recognizing spoken answers, AI-scoring them, and automatically rating cards using configurable text-to-speech, speech recognition, and OCR.
Automatically reads questions and answers aloud, transcribes spoken answers to auto-reveal cards, and grades via spoken commands, with toggles and internet/microphone requirements.
Reads Anki cards aloud offline using system text-to-speech, with 150+ medical pronunciations, smart cloze handling, and customizable shortcuts, speed, and voice settings.
Reads each card's front aloud, listens to your spoken answer, then on "done" reveals the back and AI-grades it Again/Hard/Good/Easy.
An Anki add-on that automatically reads card content aloud during reviews using high-quality neural text-to-speech.
The add-on uses a two-tier TTS fallback system:
say, Linux espeak, or Windows SAPI.When you review a card, the add-on automatically reads the question aloud. Edge TTS audio is cached on disk after it is generated, so repeated cards can start speaking immediately without waiting on the network. On profile open and after collection sync, the add-on delays automatic warming and then queues missing question audio in small batches so Anki can finish opening and remain responsive. If Edge TTS is unavailable for uncached text (no internet, service down), it falls back to your system voice.
anki_tts.ankiaddon locally (see below)..ankiaddon file.Once installed, the add-on works automatically during reviews. Access settings from the menu bar:
Ctrl+Shift+T) β Enable/disable TTSA speaker icon sits in Anki's top toolbar, just right of Sync. Its colour shows the background cache state at a glance, and hovering it shows a summary such as TTS cache 4,780/28,912 (16%) - 120 queued - 312/min - ETA 1h 20m.
| Icon | Meaning |
|---|---|
| Grey | Idle, nothing to do |
| Green with a spinning ring and a percentage | Scanning cards or generating audio |
| Green, no ring | Every speakable card has cached audio |
| Amber | Paused by you, or some clips failed and are waiting to retry (shown as !) |
Red ! |
Edge TTS is unreachable and nothing has been generated this session |
| Faded | TTS, the audio cache or background prefetch is turned off |
Click the icon (or use Anki TTS β Show Monitor when the toolbar is hidden, for example during review with some themes) to open a panel on the right side of the main window. It shows:
full: 12,400/30,120 cards)request timed out) and the start of the card textButtons:
user_files/audio_cache/ or the folder with user_files/anki_tts.log.The panel refreshes at most twice a second while it is open or work is running, and every 3 seconds otherwise. Each refresh only reads in-memory counters: no disk scans, no config reads and no collection access, so the monitor itself cannot slow Anki down. The background worker never calls into the UI.
The add-on also writes a rotating log (user_files/anki_tts.log, up to 1 MB plus 2 backups) with warnings and errors from Edge TTS, the background worker and card scans. Attach it when reporting a problem.
Cached audio is stored under anki_tts_addon/user_files/audio_cache/. Failed clips (with their retry backoff) and the last scan position are stored in anki_tts_addon/user_files/audio_cache_state.json, written at most every few seconds from a background thread. Anki preserves user_files across add-on upgrades, so the cache survives reinstalling a newer package. The package itself only ships user_files/README.txt; generated MP3/state files are excluded from builds.
| Option | Default | Description |
|---|---|---|
| Enable TTS | On | Master on/off switch |
| Speed | 1.5x | Speech rate (0.5x β 2.0x) |
| Read question | On | Speak the question when a card is shown |
| Read answer | Off | Speak the answer when revealed |
| System TTS fallback | On | Fall back to system voice as last resort |
| Audio cache | On | Store generated Edge TTS audio for faster replay |
| Background prefetch | On | Warm missing question audio without blocking review |
| Cache size limit | 2048 MB | Remove older cached audio when the cache grows beyond this limit |
The add-on intelligently handles card content:
\(...\), \[...\], $$...$$)Ο β "pi")[...] with "bla bla bla"Anki TTS caches generated Edge TTS MP3 files under the add-on's user_files/audio_cache/ directory. Anki preserves user_files/ when the add-on is upgraded, so generated audio survives reinstalling the package.
During review, the add-on plays cached audio immediately when available. If audio is missing, it generates the file with Edge TTS, stores it, and then plays it. The Anki TTS -> Warm All Audio Cache menu action queues every card for background generation. Existing cache files are skipped, so this is mainly work for new or changed card text. When a warm-all pass drains, the add-on reports whether the cache is complete or how many cards are still missing audio.
Each scan saves a watermark as soon as it completes, together with a compact backlog of cards whose audio is still missing. Startup and sync then scan only changed cards plus the next 1,000 backlog cards (continuing where the last scan stopped), and the next slice is scanned whenever the worker runs out of work, so quitting mid-generation never forces a full rescan. Template edits are detected by hashing note type templates, so add-ons that merely touch note types (e.g. AnkiHub) don't trigger rescans. A full scan also drops failed entries for text no card has any more. Stale partial .tmp audio files are removed on profile open. Transient Edge failures are marked failed with retry backoff, so repeated startup/sync scans do not immediately hammer the service.
If card text, voice, or speed changes, the cache key changes and new audio is generated automatically. The same all-card warm pass runs silently on profile open and after collection sync, but startup warming waits briefly, scans off the UI thread in small batches (so reviewing, the browser and sync never wait behind it), and only looks at cards changed since the last completed pass (including cards whose note type template was edited). Use the toolbar icon or Anki TTS -> Show Monitor to watch progress at any time. Old files can be removed with Anki TTS -> Clear Audio Cache.
git clone https://github.com/lcamillo/anki-tts.git
cd anki-tts
bash build_addon.sh
This produces anki_tts.ankiaddon β install it via Anki's add-on manager.
Edge TTS (edge-tts, aiohttp and their dependencies) is bundled under anki_tts_addon/vendor/, which is not checked into git. build_addon.sh fills it automatically with python3 -m pip using wheels for Anki's embedded Python (CPython 3.13, macOS arm64 by default), and refuses to build if edge_tts is missing. Override the target with ANKI_PY_VERSION / ANKI_PY_PLATFORM (e.g. ANKI_PY_PLATFORM=macosx_10_13_x86_64 for Intel Macs) and force a refresh with REFRESH_VENDOR=1.
anki_tts_addon/
__init__.py # Add-on entry point, hooks, settings dialog
tts_engine.py # Edge TTS cache plus system fallback engine
text_processing.py # HTML/LaTeX stripping, symbol replacement
config.json # Default settings
manifest.json # Anki add-on metadata
audio_cache.py # Persistent generated-audio cache
audio_cache_state.py # Persistent cache job/failure metadata
audio_prefetch.py # Background cache warmer (pause/resume, status)
monitor_model.py # Pure monitor data model: stats, snapshot, formatting, toolbar HTML/JS
monitor_ui.py # Toolbar icon, refresh timer and monitor dock (Qt, main thread only)
addon_log.py # Rotating log file in user_files/anki_tts.log
card_text.py # Shared card text extraction for live and cached audio
user_files/ # Preserved local files; generated audio cache lives here
vendor/ # Bundled Python dependencies
build_addon.sh # Builds the .ankiaddon package
See LICENSE for details.