You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
|**CrispTTS**| This repo — Python TTS CLI with 31+ handlers |
12
12
|**[CrisperWeaver](https://github.com/CrispStrobe/CrisperWeaver)**| Flutter transcription app — desktop + mobile |
13
13
14
14
NOTE: This is in experimental / work in progress state. Some Python-only models may be broken due to dependency conflicts. The CrispASR-based handlers (`crispasr_*`) are the most reliable — they use native C++ inference with no Python ML dependencies.
15
15
16
16
## Features
17
17
18
-
-**28+ TTS Engine Support**:
19
-
-**CrispASR native C++ engines** (7 backends, auto-download, no Python ML deps):
18
+
-**31+ TTS Engine Support**:
19
+
-**CrispASR native C++ engines** (10 backends, auto-download, no Python ML deps):
20
20
- Kokoro (multilingual, Apache 2.0)
21
21
- Orpheus + Kartoffel-Orpheus DE (19 German speakers, llama3.2 license)
> **Note**: Some libraries like PyTorch, NeMo, LlamaCPP, and `mlx-audio` can have specific installation needs depending on your OS and hardware (e.g., CUDA for Nvidia GPUs, Metal for Apple Silicon). Please refer to their official documentation if you encounter issues.
134
155
> Ensure you have `ffmpeg` installed and available in your system's PATH if you encounter issues with audio file format conversions or direct playback (some underlying libraries might need it).
@@ -303,6 +338,9 @@ Refer to the output of `python main.py --list-models` for the currently configur
303
338
- Orpheus "Kartoffel" (Transformers-based)
304
339
- LLaSA Hybrid (Experimental MLX + PyTorch)
305
340
- mlx-audio (e.g., Bark for Apple Silicon)
341
+
- F5-TTS (MLX/PyTorch)
342
+
- Zonos (acoustic conditioning)
343
+
- Chatterbox/Kartoffelbox (Python)
306
344
307
345
## Adding New TTS Handlers
308
346
@@ -359,32 +397,48 @@ CrispASR/CrisperWeaver native runtime), see
359
397
360
398
## Audio Watermarking & Provenance (EU AI Act Art. 50)
361
399
362
-
CrispTTS automatically marks all synthesized audio as AI-generated using a multi-layered provenance system ported from [CrispASR](https://github.com/CrispStrobe/CrispASR). Article 50 transparency obligations take effect **2 August 2026**.
400
+
CrispTTS automatically marks all synthesized audio as AI-generated using a multi-layered provenance system. Article 50 transparency obligations take effect **2 August 2026**.
401
+
402
+
All outputs are watermarked — CLI, `--test-all`, and API server responses. CrispASR C++ backends watermark at the binary level; all other handlers are watermarked in Python post-synthesis.
Voice-cloning models require explicit consent attestation before synthesis is allowed:
421
+
422
+
- **CLI**: `--i-have-rights` flag required (synthesis blocked without it)
423
+
- **API**: `"i_have_rights": true`in request body (returns 403 without it)
424
+
- **Detection**: triggered by handler key, model ID keywords (`clone`, `xtts`, `zeroshot`, `vibevoice`, `indextts`, `voxcpm2`, `qwen3_tts`, `f5_tts`, `zonos`, `chatterbox`), or `.wav` voice path
425
+
- **Audit log**: written to stderr AND `~/.cache/crisptts/consent_audit.log`
426
+
- **Spoken disclaimer**: "This audio was generated by artificial intelligence." prepended to cloned output (generated via CrispASR kokoro, Edge TTS fallback, beep marker last resort)
375
427
376
428
### Compliance comparison across the Crisp ecosystem
Response: audio bytes with appropriate Content-Type header. All output is automatically watermarked.
518
+
The `i_have_rights` field is required (and must be `true`) for voice-cloning models. Omit it or set to `false`for non-cloning models.
519
+
520
+
Response: audio bytes with appropriate Content-Type header. All output is automatically watermarked. Response includes `X-CrispTTS-Watermarked: true` header.
**RAM Usage**: Local GGUF and large Transformer models can be memory-intensive. Ensure your system has sufficient RAM.
494
551
495
-
**Paths**: When providing paths for `--input-file`, `--output-file`, or speaker WAV files (`--german-voice-id`), use appropriate relative or absolute paths.
552
+
**Paths**: When providing paths for `--input-file`, `--output-file`, or speaker WAV files (`--german-voice-id`), use appropriate relative or absolute paths.
0 commit comments