Hallo zusammen,
Derzeit gängig lokale Speech to Test STT und Text to Speech TTS Systeme sind Whisper und Piper. Ich bin allerdings Mistral.ai Fan und bin auf deren neues Voice Modell Voxtral aufmerksam geworden. Die veröffentlichten Werte von Voxtral sind durchaus beeindruckend. Grund genug sich das näher anzuschauen. Ich möchte euch daher meinen vollständig lokalen Sprachassistenten-Stack mit Voxtral vorstellen den ich gestern aufgebaut habe. Keine Cloud, keine API-Kosten, alle Daten bleiben zuhause.
Hardware
Wie immer: Mac Mini M4 Pro, 64 GB RAM – das ist das Herzstück. Apple Silicon ist für diesen Use-Case ideal weil MLX-Modelle den Neural Engine nutzen und damit deutlich schneller laufen als auf CPU.
Die Voxtral Modelle
- Für STT (Sprache zu Text) nutze ich Voxtral-Mini-4B-Realtime-2602 von Mistral AI in der 4bit MLX-Quantisierung (~2,5 GB). Das Modell ist speziell für Echtzeit-Transkription optimiert und erreicht unter 500ms Latenz. Apache 2.0 Lizenz, also auch kommerziell nutzbar.
- Für TTS (Text zu Sprache) läuft Voxtral-4B-TTS-2603 ebenfalls von Mistral, in der 6bit MLX-Variante (~3,5 GB). Die Qualität ist beeindruckend – Für meinen Assistenten Jarvis nutze ich de_male, für Dialog-Szenarien auch de_female.
- Beide Modelle habe ich über LM Studio heruntergeladen und installiert
Der Server
Als Inference-Server läuft mlx-audio – eine Apple-native Library die einen OpenAI-kompatiblen API-Server bereitstellt. mlx-audio nutzt den Apple Neural Engine direkt, Docker-Container haben darauf keinen Zugriff.
Der Server läuft als macOS LaunchAgent und startet automatisch beim Login.
Home Assistant Integration
Für die Sprachein- und Ausgabe nutze ich nicht meinen Rechner sondern Home Assistant. Ich habe Assists Voice PE und Futurproofhome verteilt im Haus und kann die Sprachsteuerung daher mit “Wake Word” starten (derzeit gibt es viele Jarvis Konzepte im Netz, bei denen die Spracheingabe über den Rechner erfolgt, das ist aber dadurch recht eineschränkt). Für die Home Assistant Integration nutze ich das Wyoming-Protokoll als Brücke.
In Home Assistant habe ich dann meinen “Jarvis” neu konfiguriert mit Voxtral STT auf Deutsch und de_male als Stimme. Die Stimme klingt aus meiner Sicht sehr natürlich, ich musste ihn am Anfang etwas abgewöhnen auf Englisch zu antworten, das lag aber daran, dass ich Englisch als Zweitstimme installiert hatte, was ich wieder gelöscht habe. Hin und wieder kommt auch mal ein wenig Dialekt durch, was aber irgendwie auch witzig ist.
OpenClaw Integration
OpenClaw nutze ich im Moment um Audiodateien z.B für Podcast zu erstellen, die Nutzung als Telefonassistent wäre möglich, mache ich derzeit aber bewusst nicht. OpenClaw nutzt ebenfalls mlx-audio direkt über die OpenAI-kompatible API. STT und TTS funktionieren damit nativ, keine zusätzlichen Adapter nötig.
Installation
Die Installation hat bei mir Claude Code durchgeführt. Ich habe die Anweisung zunächst mit Mistral.AI erarbeitet und dann mit Claude Chat in einem Prompt für Claude Code übersetzt. Umsetzung mit Claude Code auf dem MacMini mit der Instanz. Konfiguration von Home Assistant manuell mit Claude Chat Unterstützung und OpenClaw Integration mit der Claude Code Instanz auf meiner OpenClaw VM
Ein paar Dinge die mir Zeit gekostet haben:
Docker kann den Neural Engine nicht nutzen. Deshalb läuft mlx-audio als nativer LaunchAgent, nur die Wyoming-Proxy-Container laufen in Docker.
Voxtral TTS braucht vLLM-Omni auf NVIDIA – auf Apple Silicon ist mlx-audio der einzig sinnvolle Weg, vLLM-Omni funktioniert nicht.
Fazit
Der Stack läuft seit heute stabil, vollständig lokal, kein einziges Byte geht in die Cloud. Ich muss natürlich noch langfristiger testen, aber ich muss sagen gerade die STT Installation war einfach und viel zumindest mir lechter als die alternative Whisper Installation. Die Sprachqualität von Voxtral ist deutlich besser als alles was ich vorher lokal ausprobiert habe – Jarvis klingt tatsächlich menschlicher.
Gruß
Elmar