Live, fully-local speech translation
between German, English, and Spanish.

All (EN) + Klaro! (DE) + claro (ES) — everything understood, in all three languages.

Someone speaks German or Spanish on your call — two seconds later the English translation is streaming onto your screen, color-coded by speaker and language. You answer in English; they get German or Spanish back. Nothing ever leaves your machine.

Get started View on GitHub
🔒 100% local — no cloud, no accounts 🍎 Apple Silicon GPU 🧪 200+ tests
🎙️ mic / 🔊 call audio ─► VAD ─► Whisper (Apple GPU) ─► Ollama ─► 🖥️ streaming cards

✨ What it does

🎙️ Live translation

🔄 Auto direction

Detects each utterance's language and translates to the other — DE↔EN, ES↔EN, ES↔DE — or force a direction, including German → English + Spanish at once.

📞 Call mode

Captures your mic and the meeting as separate You / Them channels via BlackHole; echoes picked up twice are dropped automatically.

🧠 Context-aware

Translations see the recent conversation, so pronouns and topics resolve correctly.

🧩 German-aware pausing

Verb-final sentences chopped by a short pause are re-joined and re-translated whole.

⚡ Draft + refine

A small model streams a translation instantly; the main model re-translates behind the scenes and swaps in its better answer.

⌨️ Type to translate

A text box under the feed — type instead of speaking, or hit 📥 to paste-and-translate in one tap (made for WhatsApp copy-paste); same context and refinement pipeline, mic not required.

🤝 The right "you"

English hides whether "you" means du, Sie, or ihr — tú, usted, or ustedes. Pin the address form, or let the conversation context decide.

🎭 Translate with style

Optional dialect flavor for the output — Berlinerisch, Hessisch, or Wormser Platt for German; Mexican or Barcelona Spanish — reply to your friends the way they actually write.

📚 For the language learner

🔍 Long-press dictionary

Hold any word for its Wiktionary entry — gender with article, plural, IPA, and meanings; "ging" chains to gehen. Built locally from free kaikki.org extracts.

🗣️ Tap to hear

Tap any phrase to hear it spoken in its own language — great for pronunciation practice.

📋 One-tap copy

Every finished translation carries a copy button — no fiddly text selection, and a ✓ confirms it landed on the clipboard.

✏️ Correctable

Edit any translation in place — corrections are saved locally and steer future translations of similar sentences.

📖 Learner tools

One-click summary with a vocabulary list, and Markdown export for later review.

🎯 Accuracy helpers

📖 Gender lexicons

Compile dict.cc / FreeDict exports into gender dictionaries — "caipirinha" gets der/die/das and "problema" gets el/la injected automatically.

🗺️ Dialect-aware

Berlin and Hessian forms ("dit", "ebbes", "gell") are detected and hinted to the translator — including typical speech-recognition mishearings of them.

📚 Glossary

Pin names and terms in glossary.txt — biases both recognition and translation.

🧠 Benchmarked model picks

Model recommendations come from the repo's own probe suite — gender, corrections-following, dialect steering — and one command benchmarks any Ollama model the same way.

🖥️ Ways to use it

📱 Phone mode

Serve over LAN HTTPS and use your iPhone's mic for in-person conversations.

🎯 Focus mode

Keep the newest text mid-screen ("Center latest") instead of at the bottom edge.

🔎 Big-text view

Tap a card's background and the translation fills the screen — made for showing the person across the table.

📲 iOS Shortcut

A stateless /api/translate endpoint built for Apple Shortcuts: copy a WhatsApp message, Back-Tap your iPhone, and the translation pops up — no app switch.

🌍 Anywhere mode

Reach your Mac's translator from any network over a private Tailscale VPN — encrypted, never public, with a real HTTPS certificate.

🚀 Quick start

You need an Apple Silicon Mac (M1+), 16 GB+ RAM recommended, ~12 GB free disk, and Homebrew.

# 1. Install uv (Python manager) and Ollama (runs the translation model)
brew install uv ollama

# 2. Start Ollama and pull the translation model (~8 GB download)
brew services start ollama
ollama pull gemma3:12b

# 3. Get the code and install Python dependencies
git clone https://github.com/ismayc/AllKlaro.git
cd AllKlaro
uv sync

# 4. Run it, then open http://127.0.0.1:8710
uv run uvicorn server:app --host 127.0.0.1 --port 8710

Or skip step 4 and double-click Start AllKlaro.command in Finder — it starts Ollama if needed, starts the server, and opens the page. The first launch downloads the Whisper weights (~1.6 GB) once; after that everything runs offline. To translate the other side of a call, add the free BlackHole loopback driver — the README walks through the one-time setup.

⚙️ Under the hood

Speculative transcription

Whisper starts ~320 ms into a pause and the result is discarded if speech resumes — partials never block real work.

Prompt caching

Static system prompt + history as chat turns means Ollama re-processes only the new sentence.

Continuous-speech splitting

No pauses (videos, fast talkers)? Utterances split at natural micro-pauses after ~8 s instead of stalling.

Pair-constrained detection

"Dutch" detected in a German↔English conversation triggers a re-decode pinned to German.

Junk defense in depth

Temperature-fallback ladder, compression-ratio and no-speech signals, a repetition-loop detector, and a blocklist of stock Whisper hallucinations.

VAD hysteresis

Starting speech needs Silero probability > 0.5, continuing only > 0.35, so quiet word-endings don't chop sentences.

Declension guard

Determiner and noun paradigms are intersected — a phrase with no consistent case/number/gender reading ("das Termin", "mit die Frau") triggers one verified corrective re-ask.