Skip to content

feat(ios): live streaming transcription preview (Wispr-style)#25

Merged
metaforismo merged 1 commit into
mainfrom
feat/ios-live-streaming
Jun 11, 2026
Merged

feat(ios): live streaming transcription preview (Wispr-style)#25
metaforismo merged 1 commit into
mainfrom
feat/ios-live-streaming

Conversation

@metaforismo

Copy link
Copy Markdown
Owner

Groq Whisper is batch-only, so the live "words appear as you speak" feel comes from Apple's on-device SFSpeechRecognizer as a preview; the accurate final transcript still comes from the server and is what's inserted.

  • LiveTranscriber: on-device SFSpeechRecognizer (partial results, on-device when supported, locale from the language setting). Graceful — a no-op if speech permission is denied/unavailable, server path unaffected.
  • AudioRecorder fans its raw tap buffers out via onBuffer (one tap per node).
  • DictationController owns it, feeds it off the audio thread (captures the transcriber, not the @MainActor self), starts/stops with recording, requests speech auth once.
  • KeyboardView shows the interim words during recording (head-truncated), falling back to the waveform until words arrive.
  • Info.plist usage descriptions.

Additive — the existing record→POST→insert flow is unchanged. Build- + test-verified (31 iOS tests).

🤖 Generated with Claude Code

Groq Whisper is batch-only, so the live "words appear as you speak" feel comes
from Apple's on-device SFSpeechRecognizer as a PREVIEW; the accurate final
transcript still comes from the server and is what gets inserted.

- LiveTranscriber: on-device SFSpeechRecognizer wrapper (partial results,
  requiresOnDeviceRecognition when supported, locale from the language setting).
  Degrades gracefully — if speech permission is denied/unavailable it's a no-op
  and the server path still works.
- AudioRecorder fans its raw tap buffers out via onBuffer (one tap per node).
- DictationController owns the LiveTranscriber, feeds it (capturing the
  transcriber, not the @mainactor self, so it stays off the audio thread's actor),
  starts/stops it with recording, and requests speech auth once.
- KeyboardView shows the interim words during recording (head-truncated so the
  latest stay visible), falling back to the waveform until words arrive.
- Info.plist: NSSpeechRecognition + NSMicrophone usage descriptions.

Additive — the existing record→POST→insert flow is unchanged. Build- + test-
verified (31 iOS tests).

Co-Authored-By: Claude Opus 4.8 <[email protected]>
@metaforismo
metaforismo merged commit fc1cb9f into main Jun 11, 2026
@metaforismo
metaforismo deleted the feat/ios-live-streaming branch June 11, 2026 15:02
metaforismo added a commit that referenced this pull request Jun 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant