Tags: 9bow/OST
Tags
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
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.