Repository navigation
Description
Area
apps/mobile
Steps to reproduce
- Set the iPhone device language to German (de-DE) with Apple Intelligence speech assets available.
- Open any thread composer in the mobile app and tap the microphone.
- Dictate a German sentence and confirm.
On Android: open any composer — no microphone action is offered at all.
Expected behavior
German dictation is transcribed in German, offline, on both iOS and Android.
Actual behavior
- iOS: transcription goes through Apple on-device
SpeechTranscriberonly (apps/mobile/src/native/voiceTranscription.ios.ts), gated on iOS 26+ andsupportedLocale(equivalentTo:). With a German device locale there is no usable German path in practice — transcription fails (Voice transcription does not support this device language) or comes back English. Related: [Bug]: iPhone 1.2.0 voice input recognizes Korean speech as unrelated English words #12743 (Korean recognized as unrelated English words) — same underlying limitation for non-English locales. - Android:
getLocalVoiceTranscriber()(apps/mobile/src/native/voiceTranscription.ts) unconditionally returnsnull, so dictation is entirely unavailable.
Impact
Major degradation or frequent failure (German-language users; Android users are blocked completely).
Version or commit
main, October 2026 (voice controller with native-audio timeouts, cf. #19063).
Environment
iPhone, iOS 26, device language de-DE; Android (any version — no transcriber at all).
Suggested direction
Run transcription on the T3 server instead of only on the phone, using the exact stack I use daily for German dictation on desktop: winidi/dictate (MIT) with its local backend — parakeet-primeline, a German fine-tune of nvidia/parakeet-tdt-0.6b-v3, as int8 ONNX decoded CPU-only via sherpa-onnx (~50 ms decode for a 2 s clip at 4 threads, no network, no API key). The mobile app already abstracts transcription behind the VoiceTranscriber seam (prepare/transcribe, selected via getTranscriber in VoiceInputProvider), so a server-backed transcriber fits without touching the recording lifecycle:
- server side:
sherpa-onnx-node(npm, node-addon-api, multithreaded) supportsOfflineRecognizertransducer configs on macOS/Linux, i.e. the same pinned model files dictate uses (flozen1981/parakeet-primeline-onnx, ~640 MB, opt-in download on first use); - client side: upload the finished recording to the server and await text — this also enables dictation on Android, where no on-device transcriber exists today;
- keep Apple on-device transcription as the fallback when the server has no model.
Notes: the model is CC-BY-4.0 (attribute primeline / NVIDIA / sherpa-onnx, as dictate does). I run dictate locally with small macOS usability improvements (hotkey guards for keys pynput lacks on macOS, Cmd-double-tap toggle); happy to share details if this direction is accepted. I did not open a code PR because this needs maintainer approval on scope (new server dependency + model download) first.
Workaround
Dictate externally on desktop; nothing in-app.
Muse Spark via OpenCode.
Activity
juliusmarminge commentedon Oct 13, 2026
Note
Grok responding on behalf of Julius.
Thanks for the detailed write-up. Each part of this is already tracked, so I'm closing this one in favor of those threads:
en-DEandSpeechTranscribergets an English locale. Open PRs fix(mobile): transcribe voice input in the user's language #13312 (picks the language from your preferred languages, written for exactly the German iPhone case) and feat(mobile): choose the language for iPhone voice input #17692 (adds a manual voice-input language setting) both fix it.parakeet-primelinefine-tune) is best posted there.Please follow those threads for updates.