Skip to content

Releases: CrispStrobe/CrispTTS

v0.6.0 — Lazy registry, caching, 254 tests

Choose a tag to compare

@CrispStrobe CrispStrobe released this 04 Jul 18:56

What's New

Lazy Handler Registry (Phase 10)

The single biggest performance improvement: handlers now import only when first used, not at startup.

Before After
6+ min startup (loads all 21 handlers) Instant (loads only requested handler)
~2 GB RAM (torch + transformers + outetts) ~200 MB for crispasr-only use
350s test suite 60s test suite

Import Hang Fix (Phase 9)

Root causes identified and fixed:

  • config.py: OuteTTS import hangs indefinitely (protobuf compilation) — removed
  • utils.py: pygame/sounddevice block on headless machines — deferred to first use
  • decoder.py: SNAC model download at import — deferred to first use

New CLI Features

Flag Description
--backend NAME Shortcut for CrispASR backends (e.g., --backend kokoro)
--batch Split input at blank lines, produce numbered output files
--lexicon TSV Custom word→phoneme mappings for CrispASR
--list-models --check Probe backend availability
--cache-stats Show synthesis cache statistics
--cache-clear Clear cached synthesis results
--rate-limit N Max requests/min/IP for server (default 10)

Server Improvements

  • Threaded: Concurrent requests via ThreadingMixIn
  • Rate limiting: Token bucket per IP (429 on exceed)
  • Synthesis caching: Hash-based LRU, serves identical requests from cache
  • Enhanced /health: Reports loaded handlers, memory RSS, registered backends
  • Content-Disposition: Proper download filename headers

Performance Optimizations (Phase 8)

  • Reduced file I/O in watermark pipeline (4 ops → 3)
  • Lazy watermark model loading (~200MB deferred until first synthesis)
  • Streaming synthesis concurrency limit (Semaphore(4))
  • Subprocess stdout → DEVNULL (only stderr captured)

Test Coverage (Phase 11)

254 tests passing in ~60s:

  • 30 new tests for cache, crossfade, lazy registry, rate limiting, config validation, --backend shortcut
  • New test files: test_cache.py, test_server.py

Audio Utilities

  • crossfade_segments(): Linear crossfade for concatenating chunked audio
  • Config validation at startup with clear warnings
  • Batch error recovery (failed paragraphs skipped, summary at end)

v0.5.0 — 14 CrispASR backends, TADA inline cloning

Choose a tag to compare

@CrispStrobe CrispStrobe released this 04 Jul 11:07

What's New

4 New CrispASR TTS Backends

CrispTTS now exposes 14 native C++ TTS backends via CrispASR (up from 10):

Backend Type Sample Rate Voice Cloning
BananaMind-TTS Tacotron-lite + HiFi-GAN 22050 Hz No
Dots.TTS Qwen2.5 LLM + DiT + BigVGAN 48000 Hz Yes (CAM++)
CosyVoice3 Multi-GGUF (LLM+flow+CAM+++HiFT) 24000 Hz Yes
CSM/Sesame Llama-3.2 + Mimi codec 24000 Hz Yes

TADA Inline Voice Cloning

New --ref-text flag enables one-command voice cloning with TADA — no separate --make-ref step needed:

python main.py --model-id crispasr_dots_tts \
  --input-text "New speech" --german-voice-id ref.wav --ref-text "transcript of ref audio" \
  --i-have-rights --output-file cloned.wav

Expanded Model Parameters

12 new --model-params keys for per-request tuning: top_k, min_p, cfg_scale, do_sample, num_candidates, num_steps, noise_temp, noise_scale, noise_w, speaker_id, max_speech_tokens.

Performance Optimizations

  • Lazy watermark loading: Neural backends (WavMark/AudioSeal ~200MB) now load on first synthesis, not at CLI startup. --list-models and --help are instant.
  • Reduced file I/O: Post-synthesis watermark + metadata pipeline uses fewer read/write cycles.
  • Streaming concurrency limit: Semaphore(4) prevents unbounded thread growth.
  • Subprocess optimization: Stdout no longer buffered (only stderr captured for errors).
  • Server fixes: File handle leak fixed, Content-Disposition header added.

Other Changes

  • --no-spoken-disclaimer flag to skip AI disclosure prefix on cloned audio
  • Voice-cloning detection expanded for dots-tts, cosyvoice3, csm, tada backends
  • Release workflow fixed to handle pre-existing releases
  • 224 tests passing (py3.10/3.11/3.12 + ruff)

v0.4.0 — EU AI Act Art. 50 compliance

Choose a tag to compare

@CrispStrobe CrispStrobe released this 22 Jun 07:16

What's New

EU AI Act Article 50 Compliance (deadline: Aug 2, 2026)

Watermark embedding on all outputs — the critical gap where watermark functions existed but were never called is now closed. Every synthesized audio file gets:

  • Audio watermark: WavMark (MIT, preferred), AudioSeal, or spread-spectrum (always-on fallback)
  • File metadata: WAV LIST/INFO, MP3 ID3v2, FLAC Vorbis comments, Opus OGG tags — all declare AI_GENERATED=true
  • C2PA content credentials: cryptographically signed provenance manifests (when cert/key configured)

Voice Cloning Safety

  • Server API consent gate: POST /v1/audio/speech now requires "i_have_rights": true for cloning models; returns 403 with explanation otherwise
  • Expanded detection: CrispASR cloning backends (vibevoice, indextts, voxcpm2, qwen3-tts, f5-tts) now caught by keyword matching
  • Persistent audit log: consent attestations written to ~/.cache/crisptts/consent_audit.log (not just stderr)
  • Spoken disclaimer: uses CrispASR kokoro (local) first, Edge TTS fallback, beep marker last resort

New CrispASR TTS Backends

  • crispasr_f5_tts — F5-TTS flow-matching, voice cloning, 24 kHz (Apache 2.0)
  • crispasr_melotts — MeloTTS VITS2, 44.1 kHz (MIT)
  • crispasr_piper — Piper VITS via C++, 250+ community voices, 30+ langs

WavMark Neural Watermark (MIT license)

Added as the preferred neural watermark backend — fully MIT licensed (code + model weights), unlike AudioSeal (CC-BY-NC weights). Priority chain: WavMark → AudioSeal → CrispASR GGUF → spread-spectrum.

Tests

212 tests passing across Python 3.10–3.12. 13 new tests covering watermark embedding, voice cloning detection, audit logging, FLAC/Opus metadata, and multi-sample-rate dispatch.

Install optional features

pip install crisptts[watermark-mit]   # WavMark (MIT neural watermark)
pip install crisptts[metadata]        # FLAC/Opus metadata via mutagen
pip install crisptts[provenance]      # C2PA content credentials

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 30 May 19:30
c8fc4e4

What's Changed

  • fix(ci): unblock Dependabot dependency-graph submission by @CrispStrobe in #1
  • chore(release): prep v0.3.0 — dependency triage + release workflow by @CrispStrobe in #9

New Contributors

Full Changelog: https://github.com/CrispStrobe/CrispTTS/commits/v0.3.0