Skip to content

Releases: cyanxxy/Local-TTS-studio

Open TTS v1.7.5

Choose a tag to compare

@github-actions github-actions released this 30 Jul 22:44
1e5b5bc

Open TTS v1.7.5

This release makes long-form Reader playback feel faster and more predictable,
reduces the memory retained by local models, and hardens the native Qwen bridge.

Faster Qwen playback

  • Qwen3 CustomVoice and VoiceDesign now start delivering audio while the
    current sentence is still being generated. Voice cloning, CustomVoice, and
    VoiceDesign now share the same incremental generate/decode path.
  • Stopping Qwen generation cancels the active request without discarding the
    loaded model. A subsequent generation can reuse the warm worker instead of
    paying the full load cost again.
  • The Reader keeps sentence highlighting live while Qwen streams, but waits for
    the sentence duration to stabilize before estimating the active word. This
    prevents the word marker from moving backward as more audio arrives.
  • Empty decoder lookahead batches are handled as buffered state, missing audio
    is reported with its section number, and long-running stream diagnostics can
    no longer overflow the bridge's bounded output buffer.

Reader navigation and imports

  • Reader chapter navigation is now one compact running head with destination
    labels, accessible chapter ordinals, grouped page turns, in-chapter position
    dots, and a Contents shortcut that opens the correct library tab.
  • Studio and Reader share a measured sliding tab indicator and cross-fade when
    switching pages. Spoken sentences use a quieter paper wash, leaving the accent
    color for the active word.
  • Auto-follow now reacts to word changes within long wrapped sentences.
  • Article import from a URL works again in Electron. The DNS-pinned request
    lookup now supports Node's automatic address-family selection instead of
    failing with ERR_INVALID_IP_ADDRESS: undefined.
  • PDF, Office/OpenDocument, and image extraction now runs in a bounded one-shot
    worker, which is terminated on completion, failure, shutdown, or timeout.

Memory and streaming efficiency

  • Inactive browser Kokoro and Supertonic workers are evicted after a short grace
    period, Qwen's large MLX worker uses a one-minute idle window, and inactive
    desktop runtime pages release their model and audio state.
  • Supertonic 3 downloads and initializes its ONNX models sequentially, reducing
    peak memory during startup.
  • Streamed playback extends its timeline incrementally instead of rebuilding it
    for each chunk, and local runtime playback no longer repeatedly rescans all
    preceding chunks.
  • Reader cache snapshots, preload persistence, and restored playback avoid
    redundant PCM copies. A single chapter larger than the renderer's memory
    budget can still be persisted without being pinned in memory.

Native bridge reliability and security

  • WebSocket connection attempts now use the complete remaining startup budget,
    avoiding a race that could close the bridge's one accepted connection.
  • The bridge reports write timeouts, unattributed protocol errors, and empty
    text-unit output directly instead of replacing them with generic disconnects.
  • Browser-originated WebSocket upgrades are rejected, handshakes are handled
    concurrently with a strict cap, and the first authenticated client
    atomically owns the resident process.

Distribution

This is a source-only GitHub Release. GitHub provides the repository source as
ZIP and tarball archives; unsigned DMG, ZIP app bundles, and Windows installers
are not published. Developers can still build and package the Electron app
locally with the documented desktop build commands.

Open TTS v1.7.4

Choose a tag to compare

@github-actions github-actions released this 29 Jul 14:53

Open TTS v1.7.4

This release improves the Reader’s navigation, library accessibility, search
performance, and playback feedback while fixing several subtle interaction and
state-management issues.

Reader navigation and playback

  • Manual scrolling now reliably pauses auto-follow, including when a preceding
    programmatic jump did not change the scroll position.
  • Cross-section jump offsets no longer affect unrelated later navigation when
    no navigation handler is available.
  • Arrow-key page turns are limited to the reading pane and no longer repeat
    while a key is held.
  • Double-click-to-listen no longer flashes the selected-passage note control.
  • Empty sections now offer a direct way to enter editing and add text.
  • Spoken text remains legible in focus mode, and its breathing animation stops
    while playback is paused.

Reader library

  • The library drawer is now a modal, click-away-dismissible dialog with trapped
    keyboard focus.
  • Its five sections use accessible tab semantics with roving focus and Arrow,
    Home, and End navigation.
  • Document-specific tabs explain when no document is open instead of showing a
    blank panel.
  • Delete confirmations reset safely across drawer and tab changes.
  • Bookmark labels include their relative chapter position so nearby bookmarks
    remain distinguishable.
  • Pending title and author edits are flushed before closing or changing tabs,
    preventing the debounce window from discarding recent metadata.

Performance and polish

  • Full-text search debounces input and caches Unicode-folded document text,
    avoiding repeated book-sized scans during typing and playback updates.
  • Library rows use stable callbacks and render independently, reducing work
    caused by frequent progress updates.
  • Reading content no longer creates redundant spans at audio chunk boundaries.
  • Open popovers respond to content-size changes and keep their viewport
    placement current.
  • Relative “opened” timestamps refresh while the library is visible.

Desktop downloads

Desktop downloads include unsigned DMG and ZIP builds for Apple Silicon Macs
running macOS 26 or newer. They are not notarized, so macOS may require
Control-clicking the app and choosing Open on first launch. Model weights
download on first use and are not bundled. Windows packages are not included in
this release.

Open TTS v1.7.3

Choose a tag to compare

@github-actions github-actions released this 26 Jul 09:04
db5c29d

Open TTS v1.7.3

This release makes the desktop Reader library substantially more durable,
improves Qwen3-TTS generation reliability, and adds broad regression coverage
across the Electron persistence and IPC layers.

Desktop Reader persistence

  • Electron now stores the Reader library in the public-domain SQLite engine
    bundled with its Node.js runtime; no native database dependency is required.
  • A dedicated worker owns the SQLite connection and uses WAL mode,
    transactional schema setup, stale-write protection, foreign keys, and indexed
    LRU pruning.
  • Generated section audio crosses process boundaries as bounded PCM chunks with
    backpressure instead of one large IPC payload.
  • Existing desktop documents and the active selection migrate from the previous
    IndexedDB backend on first use. The original IndexedDB data is retained, and
    cached audio is regenerated on demand.
  • Debounced Reader edits are flushed during page teardown and through a bounded
    Electron quit handshake so the last progress, bookmark, note, or metadata
    change is not silently lost.

Reader and library behavior

  • Added full-text document search with Unicode-safe source offsets.
  • Refined the five-tab library drawer, search focus, and non-modal keyboard
    behavior.
  • Reader writes now use monotonic timestamps and distinguish expected shutdown
    cancellation from actionable worker failures.
  • Persistent and in-memory audio caches retain their existing entry and byte
    limits, including protection for the entry currently being written.

Qwen3-TTS

  • Increased the generation budget from 1,536 to 8,192 tokens end to end.
  • Generation that exhausts the token budget without an end-of-speech token now
    fails clearly instead of returning truncated audio as a success.
  • CustomVoice sends consistent Aiden/English defaults through the renderer,
    sanitized IPC payload, and Rust runtime.
  • Speaker choices now show native-language guidance and place the two
    English-native voices first.
  • Updated the vendored patch, CLI, resident worker, and provenance notes to
    reflect the runtime changes.

Reliability, tests, and documentation

  • Extracted large cache-directory scanning into a bounded-concurrency module.
  • Added focused tests for the SQLite database, worker protocol, worker client,
    preload bridge, main-process handlers, desktop library adapter, shutdown
    flushing, directory sizing, sidebar behavior, and Qwen speaker options.
  • Added a top-level Electron-aware typecheck command and test TypeScript
    configuration.
  • Expanded the README, architecture guide, local-runtime guide, and new storage
    guide to document the complete web/desktop behavior and operational limits.

Desktop downloads

Desktop downloads include unsigned DMG and ZIP builds for Apple Silicon Macs
running macOS 26 or newer. They are not notarized, so macOS may require
Control-clicking the app and choosing Open on first launch. Model weights
download on first use and are not bundled. Windows packages are not included in
this release.

Open TTS v1.7.2

Choose a tag to compare

@github-actions github-actions released this 24 Jul 22:29
0ee51d8

Desktop downloads include unsigned DMG and ZIP builds for Apple Silicon Macs running macOS 26 or newer. These artifacts are not notarized, so macOS may require Control-clicking the app and choosing Open on first launch. Model weights download on first use and are not bundled. Windows packages are not included in this release.

What's Changed

  • chore: remove launch plan and disable Dependabot updates by @cyanxxy in #13
  • release: Open TTS v1.7.2 by @cyanxxy in #14

Full Changelog: v1.7.1...v1.7.2

Open TTS v1.7.1

Choose a tag to compare

@github-actions github-actions released this 23 Jul 11:37

Desktop downloads include unsigned DMG and ZIP builds for Apple Silicon Macs running macOS 26 or newer. These artifacts are not notarized, so macOS may require Control-clicking the app and choosing Open on first launch. Model weights download on first use and are not bundled. Windows packages are not included in this release.

Full Changelog: v1.7.0...v1.7.1

Open TTS v1.7.0

Choose a tag to compare

@github-actions github-actions released this 22 Jul 17:23

Desktop downloads include unsigned DMG and ZIP builds for Apple Silicon Macs running macOS 26 or newer. These artifacts are not notarized, so macOS may require Control-clicking the app and choosing Open on first launch. Model weights download on first use and are not bundled. Windows packages are not included in this release.

Full Changelog: v1.6.0...v1.7.0

Open TTS v1.6.0

Choose a tag to compare

@cyanxxy cyanxxy released this 17 Jul 15:51

Open TTS v1.6.0 makes the desktop TTS stack production-grade for long local Qwen jobs, dynamic hardware selection, and reliable Reader playback.

Highlights

  • Resolves the native Qwen device at runtime instead of hard-coding a target: MLX selects Metal or CPU on Apple Silicon, while the experimental Windows x64 build selects LibTorch CUDA or CPU according to the actual machine
  • Runs Qwen3-TTS entirely in the resident Rust bridge with pinned qwen3-tts-rs; no Python process, cloud inference path, or alternate Qwen backend is involved
  • Splits long Studio and Reader text into ordered, sentence-aware requests of at most 6,000 trimmed Unicode scalar values while preserving one continuous playback timeline
  • Allows only the exact next section of the same job through the inter-request cooldown, while preserving concurrency and unrelated-request limits
  • Preserves natural silence between native request sections and keeps completed audio playable when a later section fails
  • Uploads Base voice-clone reference audio once per worker session, reuses prepared features by a short-lived job key, and automatically re-seeds a replacement worker after a cache miss
  • Adds stronger Reader/player synchronization, progress restoration, section highlighting, seekable partial results, and failed-section audio rollback

Runtime and security hardening

  • Keeps the WebSocket bridge loopback-only and protects each resident process with a random, memory-only capability passed through OPEN_TTS_WS_AUTH_TOKEN, not command-line arguments or user authentication
  • Makes cancellation authoritative across worker acquisition, activation, transport send, and sender ownership races
  • Adds bounded text, base64, WebSocket frame, audio output, chunk-count, idle, and progress limits at the Electron and Rust boundaries
  • Pins Qwen model profiles and downloads by architecture/revision, verifies the NeuCodec encoder by size and SHA-256, and strengthens cancellation-safe model downloads
  • Pins Kokoro model, tokenizer, cache, and voice requests to its immutable Hugging Face revision across supported URL shapes
  • Adds provider-aware inference benchmark options and machine-readable output for Electron/native comparisons

Fixes

  • Prevents the 500 ms main-process limiter from aborting fast multi-section Reader and Studio jobs
  • Reports cancellation as cancellation instead of a WebSocket transport failure at the acquire/activate boundary
  • Restores the 0.2-second pause at Qwen section joins
  • Prevents a Reader resume point from being overwritten while persisted audio state is restoring
  • Removes audio chunks from a failed section so duration, statistics, seeking, and partial results agree
  • Counts request length after outer whitespace is trimmed and uses Unicode scalar semantics consistently
  • Avoids repeatedly transferring and validating large voice-clone WAV payloads for every section

Verification

  • 506/506 JavaScript tests passed
  • 39/39 Rust tests passed
  • ESLint passed
  • TypeScript and production Vite build passed
  • Electron main/preload and optimized Rust desktop bridge builds passed
  • MLX Metal kernels and native macOS libraries bundled successfully
  • Live Electron probe reported qwen3-tts-rs 0.2.2, provider mlx, device metal (accelerated)
  • Live native Qwen smoke test generated 3.76 seconds of 24 kHz audio in 2.12 seconds with no page or console errors

Qwen remains local-only. Apple Silicon macOS is supported through MLX; Windows x64 remains experimental through LibTorch. Intel macOS, Windows on Arm, and Linux do not package a native Qwen provider in this release, while Kokoro and Supertonic remain available according to browser support.

Open TTS v1.5.0

Choose a tag to compare

@cyanxxy cyanxxy released this 15 Jul 14:03

Open TTS v1.5.0 expands the app into a more polished local reading and speech workspace, with an open elevenreader-style focus on study, listening, and private on-device use.

Highlights

  • Adds universal app settings for system/light/dark themes, four accent colors, interface scaling, and accessibility preferences
  • Adds separate interface and Reader font choices, including Literata, Inter, Outfit, Georgia, and the system font
  • Adds a dedicated Settings shortcut reference with macOS and Windows/Linux controls
  • Adds keyboard navigation, generation, stop, playback, and 10-second seeking shortcuts across Studio, Reader, Qwen, and NeuTTS
  • Makes Studio, Reader, settings, playback, and desktop runtime pages more responsive at compact Electron window sizes
  • Redesigns Qwen model setup with a prominent download/repair action, overall progress, current-file details, useful errors, validation, and an optional existing-folder flow
  • Keeps Qwen available inside Studio and Reader when its dedicated navigation tab is hidden
  • Refreshes the README with current capabilities and five new Electron screenshots

Fixes

  • Makes dark mode and optional-model preferences apply consistently
  • Prevents Space playback shortcuts from hijacking text entry
  • Removes duplicate Qwen download actions and places setup above generation controls
  • Preserves inline Qwen selections when its setup tab is toggled off
  • Improves settings focus trapping, compact navigation, touch targets, overflow, and long-form Reader layouts

Verification

  • 445/445 JavaScript tests passed
  • 28/28 Rust tests passed
  • ESLint passed
  • TypeScript and production Vite build passed
  • Live Electron checks passed at 1100×750 and the 800×600 minimum window size
  • macOS Command and Windows/Linux Ctrl shortcut paths were exercised in Electron

Open TTS v1.4.1

Choose a tag to compare

@cyanxxy cyanxxy released this 15 Jul 12:07

Open TTS v1.4.1 makes the Reader's Qwen experience reliably local and removes the long-document generation limit that blocked real chapters.

Fixes

  • Bundles the Electron preload into a single sandbox-compatible file so the local Qwen bridge is always exposed in Reader
  • Keeps Qwen on the native local MLX/LibTorch runtime; no cloud generation path is used
  • Allows Qwen CustomVoice to accept Reader documents up to the Reader's 1.5 million-character import limit
  • Preserves the 6,000-character safety cap for NeuTTS and Qwen voice cloning
  • Retains exact 400-character Qwen text-unit ranges for highlighting, captions, progress, and click-to-seek

Verification

  • 432/432 JavaScript tests passed
  • 28/28 Rust tests passed
  • ESLint and TypeScript checks passed
  • Production web and Electron/Rust packaging builds passed
  • Local 0.6B MLX model download and revision verification passed
  • Native MLX synthesis passed
  • A real 9,001-character Reader generation started locally without the former length error and cancelled cleanly

Open TTS v1.4.0

Choose a tag to compare

@cyanxxy cyanxxy released this 14 Jul 06:29

Open TTS v1.4.0 makes Reader the complete desktop Qwen experience, with setup and voice controls available where users actually read.

Highlights

Qwen directly in Reader

  • Defaults the desktop Reader to Qwen3-TTS without requiring a tab switch
  • Adds inline shared profile, speaker, language, instruction, and advanced generation controls
  • Maps streamed Qwen audio back to exact source-text ranges so highlighting, progress, captions, and click-to-seek stay correct
  • Groups transport chunks by semantic text unit for stable Reader playback and captions

Reader library and imports

  • Adds a persistent Reader library with chapters, bookmarks, notes, reading progress, and resumable cached audio
  • Adds structured EPUB parsing plus file and URL import flows
  • Hardens Electron EPUB transfer handling for zero-byte files, missing/out-of-order bytes, ArrayBuffer chunks, and premature completion
  • Keeps URL imports bounded and protected against private-address redirects

Reliable Qwen setup

  • Pins Hugging Face model revisions and verifies downloaded files before marking a cache ready
  • Falls back to a bundled Hugging Face Xet downloader when safetensors HTTPS downloads return 403
  • Adds inactivity termination with SIGKILL escalation for a stuck Xet helper
  • Ships no model weights; model files remain on-demand and user-controlled

Verification

  • ESLint passed
  • 431/431 JavaScript tests passed
  • 28/28 Rust tests passed
  • Production web build passed
  • Electron main and optimized Rust/MLX packaging build passed
  • Pinned Hugging Face Xet metadata check passed without downloading or writing model weights