Skip to content

fix: allow voice recordings up to 30 minutes - #12

Merged
mdatagent merged 1 commit into
customfrom
fix/voice-recording-limit
Oct 25, 2026
Merged

mdatagent merged 1 commit into
customfrom
fix/voice-recording-limit

Conversation

@mdatagent

Copy link
Copy Markdown
Collaborator

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

  1. Voice input controller (packages/client-runtime/src/voice-input/controller.ts): VOICE_RECORDING_LIMIT_SECONDS goes 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.
  2. Voice contracts (packages/contracts/src/voiceInput.ts): MAX_VOICE_RECORDING_BYTES goes 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.
  3. Voice transcription service (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.
  4. Voice input settings (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:09 at 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

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>
@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XS labels Oct 25, 2026
@mdatagent
mdatagent merged commit ea5b47d into custom Oct 25, 2026
7 of 22 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XS vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant