feat(caption): stream live captions and polish finished lines in context

Replaces the fixed six-second batches with a streaming track per audio
source: the uncommitted audio is re-recognised every second and sent as a
partial with its agreed (stable) prefix, a short pause finalises the line,
and long unbroken speech is committed at Whisper segment boundaries. Idle
audio is trimmed so silence cannot produce invented sentences.

Finished lines are corrected by the local model against the previous lines
and replaced in place; edits that change too much are rejected. The
behaviour can be switched off in Settings.
This commit is contained in:
Yun Chan 2026-09-24 20:22:21 +09:00
parent db8d9448a3
commit 39b8e7448e
28 changed files with 827 additions and 217 deletions

View file

@ -7,6 +7,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
### Added
- **Live captions stream as you listen.** Words appear about a second after they are
spoken and keep updating while the sentence is in progress; the part that is no
longer changing is shown solid and the rest dimmed. A pause finishes the line, and
long unbroken speech is split at natural boundaries instead of waiting six seconds.
- **Captions are polished in context.** Each finished line is corrected by the local
model using the lines before it (spacing, punctuation, misheard words); rewrites
that change too much are ignored. It can be turned off in Settings.
### Planned
- macOS / Linux support
- Additional Whisper model management UI