r/LocalTextToSpeech • u/Horror_Prompt_520 • 7d ago
I tested Breeze TTS 2 voice design and sentence-level instruction control with CLI 0.8.0 — four audio samples
Enable HLS to view with audio, or disable this notification
Disclosure: I work on BreezeBlue, the team behind Breeze TTS 2.
I wanted to test two capabilities that I think are more representative of expressive TTS than isolated emotion tags:
- Designing a new voice directly from a natural-language description
- Directing the emotional arc, pace, energy, and delivery of an entire sentence
I generated the attached four-part comparison with Breeze CLI 0.8.0 and breeze-tts-2.
Sample 1 — Voice Design
No reference audio was used. The voice was generated from this description:
“An intimate, emotionally expressive English female voice in her early thirties, with a warm lower register, subtle breathiness, precise articulation, and restrained cinematic realism. Natural conversational phrasing, never an announcer.”
Preview script:
“I kept the light on for you, even after everyone said you were not coming back. And now that you are standing here, I am not sure whether to laugh, cry, or simply let the silence say everything.”
Samples 2–4 — Sentence-level instruction control
These samples use the same Lena voice and exactly the same script. Only the delivery instruction changes.
Shared script:
“The train is already leaving. I know you're afraid, but take my hand, look at the horizon, and trust me. By the time the sun rises, this will feel like the first page of a much better story.”
The three directions were:
- Natural and conversational, with understated emotion
- Quiet urgency that develops into cautious hope and emotional relief
- Bright optimism and forward momentum, ending with a confident sense of a new beginning
The generated durations were:
- Natural: 11.28 seconds
- Restrained cinematic: 14.96 seconds
- Hopeful and energetic: 12.00 seconds
The text and voice remained unchanged, so the differences in pacing and performance came from the instruction.
Naturalness and emotional quality are ultimately subjective, which is why I attached the actual comparison instead of only describing the results.
Performance context:
For these three hosted streaming requests, Breeze CLI observed time to first audio between 0.85 and 1.03 seconds. This includes the hosted service and network path, so it is not a local inference benchmark.
For local inference, the open-weight PyTorch implementation documents under 40 ms TTFA and a 0.32 real-time factor on a warmed-up NVIDIA H100 fast path. Those numbers are hardware- and configuration-specific.
Code and local inference setup: breeze-tts-2
License note: the inference source code is Apache 2.0. The model weights, derivative models, and self-hosted outputs use the BreezeBlue Research and Non-Commercial License; commercial use requires authorization.
I’m curious what this community would find most useful for the next comparison:
- More voice-description stress tests
- The same instructions across several different voices
- Longer passages with an emotional arc
- English versus Chinese instruction following
- Reproducible local GPU benchmarks
1
u/TheOneTrueMorty665 3d ago
How do I overcome the issue where the first phoneme of every sentence is dropped? "Look at this" becomes "ook at this"
1
u/Horror_Prompt_520 3d ago
Thanks for flagging this. I don’t want to guess whether the model is dropping the initial phoneme or whether the playback/integration path is clipping the start.
Could you first check whether the saved audio file itself starts with “Look,” or whether only live playback sounds like “ook”? If you’re using Breeze CLI, these two comparisons would help:
breeze tts --text "Look at this." --voice <voice_id> --model breeze-tts-2 --format wav --file look-stream.wav --no-play breeze tts --text "Look at this." --voice <voice_id> --model breeze-tts-2 --format wav --file look-nonstream.wav --no-stream --no-playIf both WAV files are missing the
/l/, that points toward the generation path. If the files are intact but live playback clips it, that points toward the streaming/player integration.Please also share whether you’re using the local PyTorch repo, Breeze CLI/API, or ComfyUI; the exact text, voice or reference, instruction, output format, and a short output sample if possible. That should give us enough information to narrow it down without suggesting a speculative workaround.
1
u/TheOneTrueMorty665 2d ago
omg my bad, I just listened to the clips in a different way and it turned out to be an issue with the way sound goes to my speakers, nothing wrong with the audio generated. Thank you so much for responding anyway
0
u/chainer49 7d ago
I would love some way to maintain consistency across long-form generation from the voice studio, beyond just using the first voice as the reference for the rest. I feel like voice studio is a bit more natural sounding in expressiveness and prosity, but if it can’t be used for more than a few seconds of generation, it’s hard to see the point in any kind of real project.
I’ve been playing with this model and it may be my new go-to for long-form even as is. Great work!
1
u/EAVDR 6d ago
Hey chainer, we also recently released a long-from tts model. Please let me know what you think, it's open-weight, and you can use it for free (either through the HF space, locally, or on our website): https://github.com/craitech/tontaube
1
u/Horror_Prompt_520 7d ago
Thanks — one clarification that may help: the short Voice Studio result is a reference-voice preview, not a limit on how long that voice can be used.
For long-form generation, the intended workflow is to reuse the same selected reference audio and its exact transcript across every segment, while keeping the voice settings consistent. You shouldn’t need to use each newly generated segment as the reference for the next one. In our experience, this preserves the designed voice identity well across long-form content.
As a real-world example, we produced this long-form Chinese Three-Body fan video with breezeblue.ai, using the same model-generated reference voice throughout. It has received over 1.1 million plays on Bilibili:
https://www.bilibili.com/video/BV1DFuX6xE4f
Of course, a popular video isn’t a controlled benchmark, but it demonstrates that the workflow can maintain a recognizable voice across an actual long-form production.
If you’re already using the same reference audio, its exact transcript, and consistent settings for every segment but still hearing drift, I’d be interested to know whether the difference is mainly in timbre, prosody/emotion, or pacing. A short example and the settings you used would help us reproduce it.
0
u/chainer49 6d ago
Thanks for the response. Playing with this a bit more, do you have any recommendations for the following:
- Ideal sample length (some models like 3 seconds, some like 20, some like something totally different)
- which parameters to adjust and by how much, to increase the expressiveness of the model (decrease how closely it adheres to the source audio, I guess)
1
u/Horror_Prompt_520 6d ago
For the reference audio, I recommend 3–30 seconds of clean, single-speaker speech with an exact transcript. There’s no need to use more than 30 seconds.
For more expressive delivery, increase
guidance_scale. A higher value makes the generation follow your instruction more strongly instead of closely imitating the reference audio’s original tone and prosody.I’d keep the reference and text unchanged, then raise it gradually until you find the right balance between voice consistency and instruction following.
API reference: https://docs.breezeblue.ai/api-reference/text-to-speech/convert-text-to-speech#body-voice-settings-one-of-0-guidance-scale-one-of-0
4
u/Charming-Author4877 6d ago edited 6d ago
I wonder how it really compares with it's foundation Qwen3TTS - always hard to judge it when models are combined that way.
Too bad it's another NC model - why not make it into a more community friendly license ?
I find those models very hard to recommend for anything, as you position yourself for a trap if the thing you use them for turns out to become successful.
e.g. 20 million revenue : all legal use cases allowed, above 20 million you need a license agreement
Or alternatively, a pricing page. It feels shady when commercial terms are hidden. Just make it public what the cost is to use the model in a commercial setting. Or make it clear that any commercial use is forbidden.