Skip to content

feat(transcription): add drag-and-drop file transcription tab - #5

Merged
sperka merged 1 commit into
mainfrom
feat/file-transcription
Jul 1, 2026
Merged

sperka merged 1 commit into
mainfrom
feat/file-transcription

Conversation

@sperka

@sperka sperka commented Jul 1, 2026

Copy link
Copy Markdown
Owner

What

A new Transcribe tab: import audio/video files by drag-and-drop or file picker and transcribe them with the currently selected model. Adapted from kitlangton#232 for this fork's dual-engine (batch + streaming) setup.

Works with every engine

The reference PR sent all files through transcription.transcribe(url:...), but this fork's Nemotron streaming model rejects file-based transcribe (it decodes live). So:

  • WhisperKit / Parakeet batch - use the existing file-based transcribe.
  • Nemotron streaming - new NemotronStreamingClient.transcribeFile(...) one-shot path: feeds the whole file through the streaming manager (process(audioBuffer:) + finish()) in ~5s blocks. TranscriptionClient.transcribe(url:) now routes streaming models here instead of throwing.

The feature calls one unified transcribe(url, model, ...) for all three engines - no engine special-casing in the UI.

Per-job progress + elapsed time

  • Determinate % + bar for the Nemotron file path (real framesFed/total from the block-feed loop).
  • Indeterminate bar for Whisper/Parakeet, which don't expose a reliable decode fraction (no invented percentage that would stall or jump).
  • Live elapsed timer on every job (M:SS), frozen at the final value on completion.

Also

  • Multi-file import, per-job copy-to-clipboard / remove, "Clear Finished".
  • Clear errors for unsupported or silent-video files.
  • Imported transcripts save to History (preserving the original file extension) when history is enabled.

Testing

xcodebuild -scheme Hex -configuration Debug -skipMacroValidation CODE_SIGNING_ALLOWED=NO -quiet build
cd HexCore && swift test

Both pass (build clean; 62 tests / 5 suites). Runtime-verified across all three engines with live progress + elapsed timer.

Changeset

.changeset/81d5e24d.md (minor).

Add a "Transcribe" tab for importing audio/video files via drag-and-drop or the
file picker, transcribing them with the currently selected model. Adapted from
kitlangton#232 for this fork's dual-engine setup.

- Works with every engine. WhisperKit and Parakeet batch use the existing
  file-based transcribe; the Nemotron streaming model gains a one-shot
  transcribeFile path that feeds the whole file through the streaming manager
  (process(audioBuffer:) + finish()) in ~5s blocks. TranscriptionClient routes
  streaming models here instead of rejecting file-based transcribe.
- Per-job progress: determinate percentage + bar for the Nemotron file path
  (real framesFed/total), indeterminate bar for batch engines that don't expose
  a decode fraction, plus a live elapsed timer for every job.
- Multi-file import, per-job copy/remove, Clear Finished, and clear errors for
  unsupported or silent files. Imported transcripts save to History (preserving
  the original file extension) when history is enabled.

Part of the Nemotron streaming integration (kitlangton#236).

Verified: Debug build succeeds and HexCore swift test passes (62 tests, 5 suites);
file transcription runtime-tested across engines with live progress.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@sperka
sperka merged commit 8a97911 into main Jul 1, 2026
@sperka
sperka deleted the feat/file-transcription branch July 1, 2026 02:57
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