Summary
Knowte runs Whisper transcription locally using whisper.cpp, which for a 1-hour lecture with larger models (medium, large) can take several minutes. The current UI shows a generic loading/processing state with no indication of transcription progress — no percentage complete, no estimated time remaining, no indication of which stage (loading model, processing audio, finalising transcript) the application is in. For long audio files this creates a poor and anxious user experience.
Problem
- The transcription process runs as an opaque background task with no progress feedback to the frontend.
whisper.cpp supports progress callbacks via its C API (whisper_full_params.progress_callback), but this is not currently wired to the Tauri event system.
- Users processing long lectures have no way to distinguish between "still working" and "silently crashed".
- On machines where the model needs to be loaded from disk for the first time, the startup latency can be 15–30 seconds before any audio is processed, with zero feedback.
Impact
- Users cannot estimate how long to wait, leading to uncertainty and premature application restarts.
- Silent failures (e.g., OOM during large model loading) look identical to normal processing.
- The absence of progress feedback is a meaningful quality gap for a tool positioned against commercial transcription services.
Proposed Solution
- Wire Whisper's progress callback in Rust: When invoking
whisper_full(), set the progress_callback in whisper_full_params to a closure that emits a Tauri event:
params.progress_callback = Some(|_ctx, _state, progress, _user_data| {
// progress is 0..=100
app_handle.emit_all("transcription:progress", progress).ok();
});
- Frontend listener: In the React component managing transcription state, listen for the
transcription:progress event via appWindow.listen:
const unlisten = await appWindow.listen<number>('transcription:progress', (event) => {
setTranscriptionProgress(event.payload);
});
-
Staged progress UI: Show a progress bar with labelled stages:
0–5%: Loading Whisper model
5–95%: Transcribing audio
95–100%: Post-processing and saving transcript
-
Estimated time remaining: Calculate a simple ETA based on elapsed time and current percentage.
I am happy to implement this in both the Rust Tauri backend and the React frontend. Could you please assign this issue to me?
Labels: enhancement, UX, help wanted, GSSoC 2026
Summary
Knowte runs Whisper transcription locally using
whisper.cpp, which for a 1-hour lecture with larger models (medium, large) can take several minutes. The current UI shows a generic loading/processing state with no indication of transcription progress — no percentage complete, no estimated time remaining, no indication of which stage (loading model, processing audio, finalising transcript) the application is in. For long audio files this creates a poor and anxious user experience.Problem
whisper.cppsupports progress callbacks via its C API (whisper_full_params.progress_callback), but this is not currently wired to the Tauri event system.Impact
Proposed Solution
whisper_full(), set theprogress_callbackinwhisper_full_paramsto a closure that emits a Tauri event:transcription:progressevent viaappWindow.listen:Staged progress UI: Show a progress bar with labelled stages:
0–5%: Loading Whisper model5–95%: Transcribing audio95–100%: Post-processing and saving transcriptEstimated time remaining: Calculate a simple ETA based on elapsed time and current percentage.
I am happy to implement this in both the Rust Tauri backend and the React frontend. Could you please assign this issue to me?
Labels:
enhancement,UX,help wanted,GSSoC 2026