Highlights
Precision Syncing & Stability Overhaul. This release introduces the "XPath" sync engine, allowing for character-perfect position syncing with KOReader (/text().offset support). It also includes a complete rewrite of the Logging UI, a hardened Transcriber (fixing "screeching" audio bugs), and smarter Hardcover.app integration.
🚀 Added
Precision XPath Engine: Implemented lxml alongside BeautifulSoup to generate and resolve exact KOReader XPaths, eliminating "off-by-a-paragraph" sync errors.
Hybrid Resolver: New sync logic prioritizing "Perfect XPaths" when ABS leads, while maintaining fuzzy match fallbacks for older clients.
Live Logging Dashboard: Replaced the static log dump with a real-time, dark-mode dashboard (/logs) featuring search, filtering (DEBUG/INFO/ERROR), and live polling.
Manual Hardcover Linking: Added a UI tool to manually link books using a Hardcover URL, slug, or numeric ID.
Background Processing: Transcription and book matching now run in a non-blocking background thread, preventing the web UI from freezing during large imports.
Memory Logging: Captures startup logs occurring before the web server initializes for better debugging.
🛠 Changed
Transcriber Normalization: All audio is now pre-converted to 16kHz Mono 16-bit WAV using FFmpeg before processing. This resolves codec incompatibility and hallucinations in faster-whisper.
Hardcover "Started At" Logic: The started_at date is now only set when progress exceeds 2%, preventing accidental "start" dates for books merely opened for testing.
Contextual Matching: Increased transcript match context window to ~800 characters for higher accuracy.
Dependencies: Added lxml for XPath support.
Timestamp Logic: Removed arbitrary 10s/60s padding in Storyteller sync updates in favor of safer max(current, time) logic.
🐛 Fixed
KoSync Client Crash: Fixed a critical bug where get_progress returned a single float instead of the expected (percentage, xpath) tuple, causing sync loops to crash.
Cross-Platform Locking: Rewrote json_db.py to support Windows (via msvcrt) and Unix (via fcntl) file locking, preventing crashes on non-Linux hosts.
Storyteller Initialization: Wrapped Storyteller DB connection in a try/except block with a dummy fallback, ensuring the bridge stays online even if the Storyteller database is locked or corrupt.
Hardcover Resolver: Fixed regex/parsing logic to correctly extract book IDs from full URLs and slugs