Repository navigation
fix: allow voice recordings up to 30 minutes - #12
Merged
Merged
Conversation
Recordings were cut off at exactly five minutes by the recorder's duration limit. Raise it to 30 minutes, raise the recording size cap to 32 MiB to match (30 minutes of 128 kbit/s mobile audio), and give the ElevenLabs request up to five minutes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Martin's report: voice recording stops every five minutes. In his 11-minute dictation on 2026-10-25 (Chrome on Windows), five consecutive recordings ended at 300.02–300.03 s with the page visible and no error, each followed by an automatic transcription.
Existing systems changed
packages/client-runtime/src/voice-input/controller.ts):VOICE_RECORDING_LIMIT_SECONDSgoes from 5 to 30 minutes. This is the timer the web recorder arms at start (record({ forDuration })), and it was the cause of the cut-offs. The mobile app reads the same constant for its recorder and elapsed-time display.packages/contracts/src/voiceInput.ts):MAX_VOICE_RECORDING_BYTESgoes from 4 MiB to 32 MiB. At the old cap the size limit would have become the next cut-off: web audio (Opus, 64 kbit/s) reaches 4 MiB at about 8.5 minutes, and mobile (AAC, 128 kbit/s) at about 4.4 minutes. 32 MiB covers 30 minutes of mobile audio. Both the browser recorder and the server enforce this cap, and the base64 transcription RPC grows to at most about 43 MB, inside the WebSocket server's 100 MiB message limit.apps/server/src/voice/VoiceTranscription.ts): the ElevenLabs request timeout goes from 90 seconds to 5 minutes. Five-minute recordings took 5.6–8.8 s to transcribe today, so 30 minutes should take about a minute. Transcription still happens in one request after Stop, so a failure affects the whole recording; Retry keeps the audio.apps/web/src/components/settings/VoiceInputSettings.tsx): the description now says recordings stop after 30 minutes.Verifiable outcome
Local dev server with a fake ElevenLabs key, in Chromium with a 440 Hz fake microphone: one recording ran for 9 min 30 s (still
Stop · 5:09at the old limit) and was stopped by hand. The 4.6 MB recording, above the old 4 MiB cap, passed the server's size check and reached ElevenLabs, which rejected the fake key. Not tested: a real 30-minute transcription against ElevenLabs.🤖 Generated with Claude Code