Skip to content

Text-to-Speech

Hear translations spoken aloud

Swiftin ships two TTS engines: AI voice via the backend (Gemini 2.5 Flash TTS, paid quota) and OS voice via the browser (free, always available). The speaker icon shows up next to translations in the selection popup and the history page.

Two engines

Same button, different engine depending on your plan and choice.

Browser voice (free)

Uses your OS's built-in voices through `chrome.tts` on Chromium and the Web Speech API on Firefox. Free, no quota, always available — but voice quality and language coverage depend on what your OS has installed.

AI voice (Pro / Team)

Routes through swiftin.dev backend to Gemini 2.5 Flash TTS. Returns a 24 kHz WAV. Two voices: Kore (female, clear and firm) and Orus (male, deliberate). Consistent quality across the 46 supported languages, but counts against your plan's TTS-token quota.

What you can configure

Only two TTS-related controls live in extension Options today. Settings persist via `chrome.storage.sync` so they follow you between browsers.

TTS engine

Pick between Backend (Gemini AI voice) and Browser (OS voice). Free users can choose Backend but the AI voice itself requires Pro/Team — picking it on Free opens the billing page instead.

Voice gender (AI voice only)

Female (Kore) or Male (Orus). The dropdown is only visible when the TTS engine is set to Backend AND your plan is Pro or Team. Browser voice uses whatever the OS chose for the language — no gender control on that side.

Where the speaker icon appears

Two places, the same TTS engine under the hood.

Selection popup

Two icons in the popup — one speaks the translation, one speaks the original. Auto-detects source language if you didn't pick one.

History page

Each saved history entry has a replay button. If the original synthesis cached its audio in the entry record, replay reuses that audio with no token charge; if not, the request re-runs through your current engine.

TTS token quota

AI voice spends from a separate token bucket (not your translation tokens). Quota resets monthly. Provider billing is per output audio token — short snippets cost little, long passages eat fast.

Free — 1 000 TTS tokens / month, 1 000-char max per request.
Pro — 50 000 TTS tokens / month, 5 000-char max per request.
Team — 50 000 TTS tokens / seat / month, 5 000-char max per request.

Auto-fallback when quota runs out

When AI TTS quota is exhausted, the backend signals the extension to use browser voice for the rest of the cycle. No error wall — the speaker icon just keeps working with the OS voice. UI shows a small "switched to system voice" hint.

Language support

AI voice covers 46 languages — every major European, East Asian and Indian language plus 20+ others. Browser voice depends on what voices your OS has installed. If neither engine has a voice for the target language, the speaker icon hides.

Common issues

Most TTS friction comes from quota, OS voices, or the audio-playback layer. Each row gives the fix.

NO_VOICE

Speaker icon missing for some languages

No OS voice installed for that language AND your plan doesn't include AI voice. Install a system voice for the language, or upgrade to Pro/Team for AI voice.

QUOTA_EXHAUSTED

"Switched to system voice" hint

AI quota for the month is gone. Either wait for the monthly reset, buy a TTS top-up addon (Pro/Team), or keep using browser voice — it's free and unlimited.

LINUX_QUALITY

Voice sounds tinny / robotic on Linux

Linux falls back to espeak-ng, which is the lowest-quality default. Install a higher-quality TTS engine via your package manager, or switch to AI voice.

FIREFOX_COLDSTART

First playback fails on fresh Firefox session

Firefox loads voices asynchronously. Swiftin waits 1.5 s for them; if they don't arrive, the first request fails. Retry once and it usually works.

TOO_SHORT

"Text too short" error

Gemini TTS rejects anything under 3 characters because it misclassifies them. No fix at the extension level — paste more text or use browser voice.

TOO_LONG

"Text too long" error

Per-request char cap by plan: 1 000 Free / 5 000 Pro / 5 000 Team. Break the input into smaller chunks or upgrade the plan.

THROTTLED

"Please wait before next playback"

Client-side rate limit (3 s minimum between TTS requests) to keep the quota from melting. Just wait a moment.

NO_AUDIO_DEVICE

No sound coming out

Browser-level audio permission or system mixer issue, not Swiftin. Test in another tab (e.g. YouTube); if that's silent too, fix it at the OS / browser level first.

BYOK — your AI keyKeyboard shortcuts