# Lumotia — Whisper Ecosystem Research Brief

*Spec handover for Claude Code. Mined across 10 open-source Whisper apps, synthesised April 2026. British English. Every claim URL-backed — see Sources.*

## TL;DR

Ten repos surveyed (whisper.cpp, whisper-rs, Handy, Buzz, Whispering/Epicenter, faster-whisper, WhisperLive, whisper_streaming, Scriberr, Vibe, plus OpenWhispr). The dominant pre-emptive patches for Lumotia cluster around **silent CUDA fallback, global-hotkey edge cases, MSVC C-runtime linking between `whisper-rs-sys` and `tokenizers`, clipboard overwrite on paste, and Tauri HTTP scope blocking localhost LLM calls**. The highest-leverage features to pinch are **an engine-abstraction crate (`transcribe-rs` pattern), a named-prompt transformation pipeline with raw-transcript preservation, Vulkan as the default GPU path on Windows, VAD-gated chunking with a hallucination blocklist, and a warm-up audio file at launch**.

---

## Cross-repo pain pattern matrix

| Pain point | Repos where observed | Severity for Lumotia | Recommended Lumotia mitigation |
|---|---|---|---|
| Silent CPU fallback when CUDA version mismatches | whisper.cpp #2857, #2214, #2297; faster-whisper #1398; Buzz FAQ; Handy #209 | **H** | Detect actual compute device at runtime, log it, show in UI; prefer Vulkan default on Windows |
| Global-hotkey bugs (modifier-only, right-hand mods, F13–F24, single-key on Linux, Fn on macOS) | Handy #1143/#1105/#1019/#966/#956/#917/#47; Whispering #491/#500/#484/#549 | **H** | Dedicated cross-platform hotkey layer; per-OS capability matrix; reject invalid combos in UI |
| `whisper-rs-sys` + `tokenizers` MSVC CRT conflict on Windows | Whispering v7.11.0 | **H** | Avoid `tokenizers` crate in the same binary as whisper-rs on Windows; or route text pre/post-proc via an IPC'd sidecar |
| Audio-capture init race (first press records nothing, mic double-init) | Handy #1143, #1101, #1063 | **H** | Warm CPAL stream at app start; debounce hotkey; serialise record/stop via state machine |
| Clipboard overwrite / not restored after paste | Handy #921 (fixed by PR #1040), #692 (direct-paste in terminals) | **H** | Snapshot clipboard, paste, restore on 200 ms timer on a background thread |
| Model download corrupted → crash on load | Buzz FAQ; Handy release notes | **M** | SHA checksum verify + resumable HTTP; keep raw audio on disk even if transcribe fails |
| Tauri `http://127.0.0.1:11434` blocked by scope allowlist | Vibe #438, #487 | **H** | Pre-approve localhost LLM endpoint in `tauri.conf.json` capabilities; never surface the raw error |
| Ollama discoverability / localhost binding | Scriberr #111, #144; Vibe #440, #438 | **H** | Auto-detect + "Test connection" button + prefilled defaults; visible status chip |
| VRAM contention between Whisper and LLM on one GPU | Scriberr #217 | **M** | Pipeline: finish+unload Whisper, then load LLM; never run both concurrently by default |
| AVX2 / old-CPU `illegal instruction` | whisper-rs #8, #117; Buzz FAQ | **M** | Detect CPU flags at first launch; ship non-AVX2 fallback build |
| Chunk-boundary hallucinations ("Thanks for watching", "字幕by…") | WhisperLive #185, #246; ufal #121 | **H** | Blocklist + `no_speech_prob`/`avg_logprob` gate + `condition_on_previous_text=false` on low-conf chunks |
| Buffer-bloat / latency cliff past 30 s | ufal #120, #102 | **H** | Aggressive buffer trim tied to commit points, not wall clock |
| Prompt-loop poisoning (repetition cascades) | ufal #161 | **M** | Detect repetition; reset context window; expose `repetition_penalty` |
| Cold-start first-chunk latency (~4–5 s) | ufal #96, #135 | **M** | Run a silent warm-up WAV on launch + after idle |
| Wayland vs X11 / ALSA / Pipewire | Handy #1105, PRs #1025/#1042; Whispering (X11-only AppImage) | **M** | Target Pipewire first, gate Wayland global-shortcuts behind feature flag |
| macOS App Nap silently stops recording | Whispering #549, #559 | **M** | Disable App Nap while recording (`NSProcessInfo` activity) |
| macOS code-sign / accessibility reprompt loops | Whispering PR #195, v4 hotfix | **M** | Notarise + entitlements; persist accessibility grant; document `xattr -cr` only as last resort |
| Windows DLL hell (libssl, vulkan-1.dll on CPU-only) | Buzz #1459; Whispering #840, #829 | **M** | Bundle required DLLs in installer; fall back cleanly if Vulkan runtime absent |
| Direct-paste duplicates/breaks in terminals (Codex, Claude Code) | Handy #692 | **M** | Detect terminal focus; switch paste mode to clipboard-only in those apps |
| Settings reset on update | Handy #602 | **L** | Versioned schema migration; never destructive upgrade |

---

## Killer features inventory

| Feature | Source repo(s) | Implementation complexity | Lumotia priority |
|---|---|---|---|
| Engine abstraction crate (Whisper / Parakeet / Moonshine behind one trait) | Handy, Whispering (both use `transcribe-rs`) | **M** | MVP — unblocks Windows fallback off whisper-rs |
| Vulkan backend as default Windows GPU path | whisper.cpp, Buzz, Vibe | **S** | MVP |
| GPU enumeration + auto-select UI with active-device indicator | Handy PR #1142 | **S** | MVP |
| VAD-gated chunking with Silero | whisper.cpp, Buzz v1.4.4, faster-whisper | **M** | MVP (already in streaming scope) |
| Hallucination blocklist + confidence gate | WhisperLive #185, ufal #121 | **S** | MVP |
| Warm-up WAV at launch | ufal (warm-up file PR) | **S** | MVP |
| LocalAgreement-n streaming commit policy | ufal | **M** | v1 (if Lumotia streaming currently naive) |
| Initial prompt / custom-vocab biasing | Whispering PR #1132, Buzz, Handy custom-words | **S** | MVP |
| Progressive audio save (crash-safe) | Whispering | **S** | MVP |
| Keep audio on disk when transcription fails, offer retry | Handy v0.8.0 | **S** | MVP |
| Named prompt presets (email / notes / code / summary) | Scriberr, Whispering, OpenWhispr | **S** | MVP |
| Chained "transformation" pipeline (LLM → find/replace → LLM) | Whispering | **M** | v1 |
| Dual LLM provider toggle (bundled local ↔ BYO cloud) | Vibe, OpenWhispr, Scriberr | **S** | v1 |
| "Test connection" button for LLM endpoint | Vibe (pattern; buggy impl) | **S** | MVP |
| Raw-transcript always preserved; diff/undo LLM output | implicit in Scriberr, Whispering system prompt | **S** | MVP |
| Speaker-aware prompt substitution | Scriberr PR #294 | **S** | v1 |
| Plain-text (not JSON) fed to LLM | Scriberr PR #288 | **S** | MVP |
| Streaming LLM output with cancel button | standard Ollama/llama.cpp | **S** | MVP |
| Sound cues on start/stop/complete | Handy | **S** | MVP |
| Pause-while-recording (mute other audio) | Handy PR #1028, #998 | **M** | v1 |
| Auto-start on system login | Whispering PR #1161 | **S** | v1 |
| Auto-update channel with safe rollback | Handy #883; Whispering | **M** | v1 |
| Subtitle / SRT / VTT I/O | Buzz #1423/#1426 | **M** | later |
| Folder-watcher batch mode | Scriberr, Buzz | **M** | later |
| MCP/CLI "run user command with STDIN/STDOUT" hook | Handy Discussion #211 | **M** | later |

---

## Streaming-specific findings

- **VAD is necessary but not sufficient.** Both WhisperLive and ufal ship Silero VAD and still produce "Thanks for watching!" / "字幕by…" artefacts at chunk edges. Layer a secondary defence: a phrase blocklist, a `no_speech_prob` / `avg_logprob` gate, and toggle `condition_on_previous_text=false` during low-confidence chunks.
- **Buffer management past the 30-second Whisper context is the top failure mode.** ufal #120 and #102 show naive rolling buffers degrade catastrophically at long-session scale. Trim must be aggressive and tied to a confirmed commit point, not clock time.
- **LocalAgreement-n is the de-facto streaming policy** for un-fine-tuned Whisper. Emission latency ≈ 2× chunk size, and every chunk is re-transcribed multiple times, which is costly but correct. Newer AlignAtt (ufal/SimulStreaming, IWSLT 2025 winner) is ~5× faster — flag for a later swap.
- **Prompt carry-over is a two-edged sword.** Helpful for proper nouns (ufal's `static_init_prompt`), lethal on repetition loops (#161) or when the model wasn't trained with prompt conditioning (#133). Expose `condition_on_previous_text` as a runtime toggle and reset context on repetition detection.
- **Cold-start latency is universal (~4–5 s on first chunk).** Run a short silent WAV at app launch and after any GPU/ANE idle.
- **Backend abstraction is mandatory for Lumotia's five-platform target.** WhisperLive runs faster-whisper / TensorRT-LLM / OpenVINO behind one socket; ufal swaps faster-whisper / whisper-timestamped / MLX / OpenAI API. Bake this in early.
- **Reconnect/resume logic is under-engineered in both reference projects** (WhisperLive #388). For mobile targets, design resumable streaming from day one — no good OSS reference exists.
- **First chunk triggers the full Whisper context window to allocate**, causing the latency cliff. Pre-allocate on warm-up.
- **Multi-client fan-out** (WhisperLive PR #174) is a clean pattern if Lumotia ever wants simultaneous transcribe + translate on one mic.

---

## LLM formatting layer findings

- **Auto-apply LLM cleanup is where "LLM changed my meaning" complaints originate.** None of Scriberr/Vibe/OpenWhispr have this class of issue in volume because they keep LLM post-processing explicitly opt-in. Lumotia auto-applies — make it one-keystroke revertable and always show the raw transcript.
- **Ollama connectivity is the #1 source of user-facing LLM bugs** — Scriberr #111/#144, Vibe #438/#487. Solve with auto-detect, "Test connection", pre-approved Tauri HTTP capability for `127.0.0.1:11434` (and whichever port bundled llama.cpp uses), and a visible status chip.
- **VRAM contention** (Scriberr #217): bundled LLM + Whisper on one consumer GPU evict each other. Default to sequential execution: finish Whisper, unload, run LLM.
- **Feed plain text to the LLM, not raw Whisper JSON with timestamps** — Scriberr PR #288 made this switch and materially improved quality.
- **Substitute speaker labels ("SPEAKER_00" → user-assigned name) before prompting** — Scriberr PR #294.
- **CUDA/cuDNN fragmentation pushes projects towards Vulkan** — Vibe migrated off CUDA-exe (300 MB) to Vulkan whisper.cpp precisely to escape version hell. Same logic applies to llama.cpp — prefer Vulkan backend on Windows.
- **Non-English transcripts are already weaker** (Vibe Vietnamese/Hebrew). LLM "cleanup" will compound errors. Always keep raw-transcript revert; never rewrite history in the paste buffer.
- **System-prompt framing matters.** Whispering's published baseline — *"translator from spoken to written form, not an editor trying to improve the content"* — directly mitigates overcorrection. Copy this framing.
- **Settings per task** (tiny model for titles, bigger for summaries) — Scriberr pattern. Lumotia can extend: faster model for paste-time cleanup, bigger for explicit summarise action.
- **Streaming LLM output with cancellation** — standard Ollama/llama.cpp capability but rarely shipped; users hit X on 30-second summaries.

---

## Atomic task backlog

### Pre-emptive patches

1. **Detect and surface active compute device.** Pain: silent CUDA→CPU fallback. Accept: settings shows "GPU: Vulkan RTX 3060" or "CPU (fallback: driver 545 < required 555)".
2. **Pre-approve `http://127.0.0.1:*` in Tauri capabilities for LLM endpoint.** Pain: Vibe #438 opaque scope error. Accept: localhost LLM HTTP calls never hit scope error in any default install.
3. **Add clipboard snapshot + restore-on-timer after paste.** Pain: Handy #921. Accept: user's prior clipboard content is restored within 300 ms of paste.
4. **Warm CPAL/WASAPI stream at app start; debounce hotkey trigger.** Pain: Handy #1143 first-press-fails, #1101 double-init. Accept: first hotkey press post-launch captures audio from t=0.
5. **Hotkey capability matrix per OS with UI rejection of invalid combos.** Pain: Handy #966/#956/#917/#1019/#1105. Accept: user cannot bind single-key on X11, right-mod on Windows, or Fn on macOS; UI explains why.
6. **Guard against `whisper-rs-sys` + `tokenizers` in same Windows binary.** Pain: Whispering v7.11.0. Accept: Windows build either omits `tokenizers` or isolates text pre-processing in a sidecar process.
7. **CPU feature detection at first launch with non-AVX2 fallback path.** Pain: whisper-rs #8/#117. Accept: app starts without "illegal instruction" on a pre-2013 CPU.
8. **Checksum-verify + resumable model downloads; retain audio when transcription fails.** Pain: Buzz FAQ; Handy v0.8.0 pattern. Accept: corrupted download is re-fetched on next launch, raw WAV is kept for manual retry.
9. **Disable macOS App Nap while recording and while LLM runs.** Pain: Whispering #549. Accept: 10-minute background recording completes unattended.
10. **Detect focused-app class; use clipboard-only paste in terminal emulators.** Pain: Handy #692. Accept: typing into Windows Terminal, iTerm2, Kitty, Alacritty does not duplicate characters.
11. **Versioned settings schema with forward-migration.** Pain: Handy #602. Accept: settings from v0.x survive upgrade to v1.y without loss.
12. **Bundle Vulkan loader and libssl DLLs in Windows installer with CPU-only fallback.** Pain: Whispering #840/#829, Buzz #1459. Accept: app launches cleanly on a VM with no GPU and on a fresh Windows install.

### Feature pinches

13. **Introduce engine-abstraction trait (`Transcriber`) with Whisper + Parakeet backends.** Pain/feature: Handy/Whispering `transcribe-rs` pattern; Windows whisper-rs CRT escape. Accept: engine swap at runtime via settings, no restart.
14. **GPU enumeration and explicit device selector in settings.** Feature: Handy PR #1142. Accept: dropdown lists all detected GPUs plus CPU; current active device highlighted.
15. **Named LLM prompt presets (Email, Meeting Notes, Code, Quick Clean).** Feature: Scriberr, Whispering. Accept: user picks preset from status-bar dropdown before dictating; prompts are user-editable.
16. **System-prompt baseline framed as "translator, not editor".** Feature: Whispering. Accept: default cleanup prompt is committed with that exact framing; overcorrection regression test passes.
17. **Raw-transcript-always-preserved with one-keystroke revert.** Feature: implicit in Scriberr/Whispering. Accept: after paste, ⌘/Ctrl+Z within 5 s replaces LLM output with raw transcript.
18. **Initial-prompt / custom-vocab field for domain terms.** Feature: Whispering PR #1132. Accept: user-supplied term list is passed as Whisper initial prompt and biases output.
19. **Progressive audio write to disk during capture.** Feature: Whispering. Accept: crash during transcription leaves a playable WAV in the session folder.
20. **Sound cues for start / stop / complete, user-toggleable.** Feature: Handy. Accept: three distinct short cues, volume slider, mute toggle.

### Streaming

21. **Silero-VAD-gated chunker with configurable threshold + hysteresis.** Pain: WhisperLive #185. Accept: sustained background noise at 0.4–0.5 VAD score does not trigger transcription.
22. **Hallucination blocklist + `avg_logprob`/`no_speech_prob` confidence gate.** Pain: WhisperLive #185/#246, ufal #121. Accept: chunks containing only blocklisted phrases or below confidence threshold are dropped, not emitted.
23. **Warm-up silent WAV on app launch and after 60 s idle.** Pain: ufal #96/#135 cold-start. Accept: first user chunk post-warm-up completes in ≤ 1.5× steady-state latency.
24. **LocalAgreement-n commit policy with configurable n.** Feature: ufal. Accept: partial text is emitted only once confirmed across n=2 consecutive passes; tentative tail is visually distinct.
25. **Aggressive buffer trim tied to commit points (not clock).** Pain: ufal #120/#102. Accept: 10-minute continuous session does not exhibit latency growth past chunk 30.
26. **Repetition detector that resets context window and drops the chunk.** Pain: ufal #161. Accept: three consecutive identical tokens trigger context reset within one chunk.

### LLM layer

27. **"Test connection" button with proper error classification.** Pain/feature: Vibe #438/#440. Accept: failure surfaces "Ollama not installed" / "port blocked" / "model not pulled" — never a raw URL scope error.
28. **Sequential Whisper-then-LLM execution; shared GPU guard.** Pain: Scriberr #217. Accept: on single-GPU systems, LLM does not load until Whisper has unloaded; configurable concurrent mode for users with ≥16 GB VRAM.
29. **Plain-text pre-formatter before LLM prompt.** Pain/feature: Scriberr PR #288. Accept: Whisper segments are joined into natural sentences before being sent to the LLM; timestamps stripped.
30. **Streaming LLM output with cancel button.** Feature: standard but underused. Accept: user can cancel mid-summary; partial output is kept or discarded per user pref.
31. **Visible LLM status chip (disconnected / warming / generating).** Pain: Ollama discoverability. Accept: chip reflects true state within 500 ms of change.

---

## What couldn't be verified

- **GitHub `/issues?q=...sort=reactions-%2B1-desc` URLs were blocked at the fetch layer for several repos.** Ordering of feature requests by raw reaction count is therefore inferred from comment volume, maintainer engagement, and release-note inclusion rather than numeric reaction tallies.
- **whisper-rs (GitHub) was archived on 30 July 2025; development continues at `codeberg.org/tazz4843/whisper-rs`.** Issue numbers cited post that date will not resolve on GitHub. Lumotia should track Codeberg or fork.
- **OpenWhispr issue tracker was not fully mined within budget** — included as a named reference for the bundled-llama.cpp architecture only. Pain-point claims for it are sourced from its README and a third-party dev.to writeup, not from its issues.
- **Whispering / EpicenterHQ issue tracker** was not fully mined — the repo was cited via its release notes and README; its issue base may contain further pain patterns worth a follow-up.
- **Scriberr, Vibe PR numbers (#288, #294, #438, #487, #217, #111, #144)** were sourced via search-result snippets where direct issue-page fetches were refused; titles and content are quoted but exact current status (open/closed/merged as of 21 Apr 2026) was not re-checked on each.
- **faster-whisper is named MIT** but its heavy Python + CUDA runtime footprint makes it a pattern source, not a recommended Lumotia dependency.
- **Scriberr** is **MIT, not AGPL** as the brief had hedged — full lifting is permitted; the "reference only" warning in the original task spec does not apply.
- **WhisperLive** is **MIT confirmed** — full lifting permitted.
- **`ufal/whisper_streaming` is maintenance-only**; upstream momentum has moved to `ufal/SimulStreaming` (also MIT). Consider tracking that repo for v1+.
- **Mobile (iOS, Android) pain surface** is under-represented in this survey — none of the ten desktop repos have a mature mobile story beyond whisper.cpp's XCFramework and WhisperLive's `ios-client`. Lumotia's mobile backlog will need a dedicated pass.

---

## Sources

https://github.com/ggerganov/whisper.cpp
https://github.com/ggml-org/whisper.cpp
https://github.com/ggml-org/whisper.cpp/releases
https://github.com/ggml-org/whisper.cpp/issues/2857
https://github.com/ggml-org/whisper.cpp/issues/2214
https://github.com/ggml-org/whisper.cpp/issues/2297
https://github.com/ggerganov/whisper.cpp/issues/1502
https://github.com/ggml-org/whisper.cpp/issues/2258
https://github.com/ggml-org/whisper.cpp/issues/3095
https://github.com/ggml-org/whisper.cpp/issues/3254
https://github.com/ggml-org/whisper.cpp/discussions/2275
https://github.com/tazz4843/whisper-rs
https://codeberg.org/tazz4843/whisper-rs
https://github.com/tazz4843/whisper-rs/blob/master/CHANGELOG.md
https://github.com/tazz4843/whisper-rs/issues/8
https://github.com/tazz4843/whisper-rs/issues/22
https://github.com/tazz4843/whisper-rs/issues/71
https://github.com/tazz4843/whisper-rs/issues/117
https://github.com/tazz4843/whisper-rs/issues/135
https://github.com/tazz4843/whisper-rs/discussions/93
https://github.com/cjpais/Handy
https://github.com/cjpais/Handy/releases
https://github.com/cjpais/Handy/pull/1028
https://github.com/cjpais/Handy/pull/1025
https://github.com/cjpais/Handy/pull/1042
https://github.com/cjpais/Handy/discussions/211
https://github.com/cjpais/Handy/discussions/599
https://github.com/cjpais/Handy/discussions/666
https://github.com/cjpais/Handy/discussions/1182
https://github.com/cjpais/Handy/issues/16
https://github.com/cjpais/Handy/issues/47
https://github.com/cjpais/Handy/issues/209
https://github.com/cjpais/Handy/issues/436
https://github.com/cjpais/Handy/issues/602
https://github.com/cjpais/Handy/issues/692
https://github.com/cjpais/Handy/issues/883
https://github.com/cjpais/Handy/issues/917
https://github.com/cjpais/Handy/issues/921
https://github.com/cjpais/Handy/issues/956
https://github.com/cjpais/Handy/issues/966
https://github.com/cjpais/Handy/issues/990
https://github.com/cjpais/Handy/issues/998
https://github.com/cjpais/Handy/issues/1005
https://github.com/cjpais/Handy/issues/1019
https://github.com/cjpais/Handy/issues/1063
https://github.com/cjpais/Handy/issues/1101
https://github.com/cjpais/Handy/issues/1105
https://github.com/cjpais/Handy/issues/1143
https://github.com/cjpais/Handy/issues/1165
https://github.com/chidiwilliams/buzz
https://github.com/chidiwilliams/buzz/releases
https://github.com/chidiwilliams/buzz/releases/tag/v1.4.4
https://github.com/chidiwilliams/buzz/issues/1386
https://github.com/chidiwilliams/buzz/issues/1399
https://github.com/chidiwilliams/buzz/issues/1422
https://github.com/chidiwilliams/buzz/issues/1423
https://github.com/chidiwilliams/buzz/issues/1426
https://github.com/chidiwilliams/buzz/issues/1429
https://github.com/chidiwilliams/buzz/issues/1438
https://github.com/chidiwilliams/buzz/issues/1441
https://github.com/chidiwilliams/buzz/issues/1442
https://github.com/chidiwilliams/buzz/issues/1452
https://github.com/chidiwilliams/buzz/issues/1459
https://chidiwilliams.github.io/buzz/docs/faq
https://chidiwilliams.github.io/buzz/docs/installation
https://github.com/braden-w/whispering
https://github.com/EpicenterHQ/epicenter
https://github.com/EpicenterHQ/epicenter/releases/tag/v7.11.0
https://github.com/EpicenterHQ/epicenter/pull/634
https://github.com/EpicenterHQ/epicenter/pull/686
https://github.com/EpicenterHQ/epicenter/pull/1132
https://github.com/EpicenterHQ/epicenter/pull/1157
https://github.com/EpicenterHQ/epicenter/pull/1161
https://github.com/braden-w/whispering/issues/4
https://github.com/braden-w/whispering/issues/829
https://github.com/braden-w/whispering/issues/840
https://github.com/braden-w/whispering/releases
https://github.com/EpicenterHQ/epicenter/tree/main/apps/whispering
https://github.com/SYSTRAN/faster-whisper
https://github.com/SYSTRAN/faster-whisper/issues/951
https://github.com/SYSTRAN/faster-whisper/issues/1025
https://github.com/SYSTRAN/faster-whisper/issues/1240
https://github.com/SYSTRAN/faster-whisper/issues/1337
https://github.com/SYSTRAN/faster-whisper/issues/1370
https://github.com/SYSTRAN/faster-whisper/issues/1388
https://github.com/SYSTRAN/faster-whisper/issues/1398
https://github.com/SYSTRAN/faster-whisper/issues/1416
https://github.com/SYSTRAN/faster-whisper/discussions/1296
https://huggingface.co/Systran/faster-whisper-large-v3
https://github.com/collabora/WhisperLive
https://github.com/collabora/WhisperLive/blob/main/LICENSE
https://github.com/collabora/WhisperLive/blob/main/whisper_live/vad.py
https://github.com/collabora/WhisperLive/releases
https://github.com/collabora/WhisperLive/issues/185
https://github.com/collabora/WhisperLive/issues/246
https://github.com/collabora/WhisperLive/issues/388
https://github.com/collabora/WhisperLive/pull/174
https://github.com/ufal/whisper_streaming
https://github.com/ufal/whisper_streaming/blob/main/whisper_online_server.py
https://github.com/ufal/whisper_streaming/issues/96
https://github.com/ufal/whisper_streaming/issues/102
https://github.com/ufal/whisper_streaming/issues/120
https://github.com/ufal/whisper_streaming/issues/121
https://github.com/ufal/whisper_streaming/issues/133
https://github.com/ufal/whisper_streaming/issues/135
https://github.com/ufal/whisper_streaming/issues/157
https://github.com/ufal/whisper_streaming/issues/161
https://github.com/ufal/SimulStreaming
https://arxiv.org/html/2506.12154v1
https://github.com/rishikanthc/Scriberr
https://github.com/rishikanthc/Scriberr/issues/111
https://github.com/rishikanthc/Scriberr/issues/144
https://github.com/rishikanthc/Scriberr/issues/217
https://github.com/rishikanthc/Scriberr/discussions/313
https://github.com/thewh1teagle/vibe
https://github.com/thewh1teagle/vibe/blob/main/LICENSE
https://github.com/thewh1teagle/vibe/issues/438
https://github.com/thewh1teagle/vibe/issues/440
https://github.com/thewh1teagle/vibe/issues/487
https://github.com/OpenWhispr/openwhispr
https://github.com/OpenWhispr/openwhispr/blob/main/LICENSE
