Skip to content

Tags: 9bow/OST

Tags

v0.0.3

Toggle v0.0.3's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
v0.0.3: Split overlay mode, live translation, and stability fixes (#1)

* fix: eliminate duplicate translations and add sentence-based segmentation

- Remove translateWithContext which caused duplicate translations by
  including context translations in the output when Apple Translation
  didn't preserve newline structure
- Add extractCompleteSentences() that detects sentence boundaries via
  linguistic analysis and creates subtitle entries immediately on
  punctuation (. ! ?) instead of waiting for pause timer
- Simplify handlePartialTextStabilized() to consume remaining liveText
  directly as a fallback for unpunctuated speech
- Remove dead translateWithContext method from TranslationService

* feat: add persistent subtle background to overlay for visibility

Add a very low-opacity background (5% black fill + 8% white border)
to the full overlay area so users can always see where the overlay
is positioned, even when no subtitles are displayed.

* fix: prevent overlay window auto-resize and improve lock state controls

Wrap NSHostingView in NSView container to decouple window size from
content, add lock toggle and reset button in Settings > Display, and
fix click-through behavior so locked overlay passes clicks through
while unlocked overlay allows move/resize but blocks underlying clicks.

* fix: resolve duplicate subtitles, race conditions, and improve scroll tracking

- Fix duplicate subtitle entries caused by recognizer text reformulation:
  find longest common prefix instead of resetting consumed state entirely,
  add deduplication check (last 2 entries within 2s) before adding entries
- Fix race condition in stopCapture: set isCapturing=false before
  stopRecognition to prevent phantom entries from Combine sink
- Fix SystemAudioCapture: finish continuation before awaiting stopCapture
  to prevent dangling yields; remove force-unwrap on re-entry
- Fix SpeechRecognizer: handle partial result + error simultaneously
  to prevent recognition task from silently dying
- Fix scroll tracking: replace unreliable onAppear/onDisappear on
  zero-height view with onScrollGeometryChange for reliable bottom detection
- Fix handlePartialTextStabilized: use stored sink value instead of
  reading speechRecognizer.currentText directly (timing consistency)
- Fix lastConsumedTail: unconditionally clear after first use to prevent
  stale overlap stripping in subsequent recognition sessions
- Fix detectLanguageIfNeeded: check isCapturing before language change
- Fix LanguagePickerView: add defensive guard and correct swap announcement
- Fix MenuBarView: show "Auto" when source language is auto-detect
- Update README with comprehensive setup guide and feature documentation

* feat: add split overlay mode, live translation, and overlay stability fixes

- Add dual display mode (combined/split) with independent recognition and translation windows
- Add live translation that shows translations as text is being recognized
- Fix invisible overlay blocking clicks by setting explicit hosting view frame
- Add screen boundary clamping to prevent overlay windows from appearing off-screen
- Add "Reset All Overlay Windows" button in Settings > Display Mode
- Add duplicate text filtering, punctuation-only entry removal
- Improve auto-scroll to always follow latest text
- Sync lock/unlock state across both overlay windows
- Update README with comprehensive setup guide, usage instructions, and troubleshooting

v0.0.2

Toggle v0.0.2's commit message
fix: prevent text loss on speech recognizer restart

Handle empty currentText (recognizer restart) before updating liveText,
so remaining partial text is consumed into subtitle entries before reset.

v0.0.1

Toggle v0.0.1's commit message
feat: initial release v0.0.1

Real-time speech recognition and translation overlay for macOS.
Captures system audio via ScreenCaptureKit, transcribes with
SFSpeechRecognizer, translates using Apple Translation framework,
and displays subtitles in a floating overlay window.