Real-time audio translation for any browser tab.
Transcribes locally with Whisper, translates, and reads it back aloud — no API key, no account.
Add AuraLang from the Chrome Web Store →
Prefer to run it from source? See Run it locally.
Watching a talk, a podcast, or a video in a language you don't speak? AuraLang listens to the tab, translates on the fly, and speaks the result — so you can watch the screen instead of reading subtitles.
- 🎧 Any tab with audio — videos, calls, podcasts, live streams.
- 🧠 On-device transcription — Whisper runs locally; audio never leaves your machine.
- 🗣️ Spoken translation — the original tab audio is muted; you only hear the translation.
- 📊 Live transcript with karaoke — read the original + translation in a side panel; the line being spoken is highlighted.
- 🎚️ Model modes — Auto / Light (whisper-tiny) / Balanced (whisper-base): trade speed for accuracy per your device.
- 🔒 No key, no account, no backend — settings live only in your browser.
- 🌗 Light & dark themes, interface in English and Spanish.
Tab audio ─▶ Whisper (local transcription) ─▶ Google Translate ─▶ Web Speech API (spoken output)
Audio is buffered and cut on natural speech pauses, transcribed on-device, translated, and read aloud through the browser's built-in voice. The original tab audio is muted while capturing.
Requirements: Google Chrome 116+
npm install
npm run buildThen in Chrome:
- Open
chrome://extensions - Enable Developer mode (top-right)
- Click Load unpacked → select the
dist/folder - On the tab you want to translate, click the AuraLang icon to open the side panel
- Pick source & target languages, then hit Start translation
The Whisper model downloads on first Start and is cached afterwards. Size depends on the model mode: Light ~150 MB, Balanced ~290 MB. Auto picks one from your device.
npm run dev # Vite dev server (reload the extension after changes)
npm run type-check # TypeScript, no emit
npm run lint # ESLint
npm run test # Jest + React Testing Library
npm run zip # Build + package dist.zip for the Web Store| Layer | Tool |
|---|---|
| Extension API | Chrome MV3 — tabCapture, offscreen, sidePanel, storage |
| Build | Vite + @crxjs/vite-plugin |
| UI | React 18 + TypeScript (strict) |
| Styles | Tailwind CSS |
| Transcription | Whisper via @huggingface/transformers (local, offscreen document) |
| Translation | Google Translate (free, unofficial endpoint) |
| Speech | Web Speech API (speechSynthesis) |
src/
asr/ # Model tiers/registry, model manager (probe ladder), inference queue
background/ # Service worker — tabCapture + offscreen + side panel lifecycle
offscreen/ # AudioContext + transcription / translation / TTS pipeline
popup/ # React UI (rendered in the side panel)
components/ # Header, StatusHero, WaveformIndicator, LanguageSelect, SettingsPanel, TranscriptFeed…
hooks/ # useApiConfig, useTranslation, useI18n, useTheme
welcome/ # First-install onboarding page
services/ # transcriptionService, translationService, ttsService
types/ # Shared TypeScript interfaces
No backend, no telemetry, no account. Transcription happens on your device; only the transcribed text is sent to Google Translate to get the translation back. Settings (languages, theme) are stored in chrome.storage.local on your machine. Full details in PRIVACY.md.
- AGENTS.md — architecture, TypeScript, services, testing & accessibility conventions (source of truth for contributors).
- CONTRIBUTING.md — setup, branching, commit conventions.
- PRIVACY.md — privacy policy.
- DISCLAIMER.md — accuracy limitations, third-party services, no affiliation.
- SECURITY.md — how to report a vulnerability.
- LICENSE — MIT.
npm run zipUpload dist.zip to the Chrome Developer Dashboard.
Built with care — concepts before code.