Skip to content

[Bug]: Mobile dictation has no usable German transcription #19091

Closed as not planned

Description

@enving

Area

apps/mobile

Steps to reproduce

  1. Set the iPhone device language to German (de-DE) with Apple Intelligence speech assets available.
  2. Open any thread composer in the mobile app and tap the microphone.
  3. 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 SpeechTranscriber only (apps/mobile/src/native/voiceTranscription.ios.ts), gated on iOS 26+ and supportedLocale(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 returns null, 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) supports OfflineRecognizer transducer 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

  1. juliusmarminge commented on Oct 13, 2026

    @juliusmarminge
    Member

    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:

    Please follow those threads for updates.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    duplicateThis issue or pull request already exists

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions