| ---
|
| base_model: BreezeBlue/Breeze-TTS-2
|
| language:
|
| - en
|
| - zh
|
| library_name: gguf
|
| license: other
|
| license_name: breezeblue-research-and-non-commercial
|
| license_link: https://huggingface.co/BreezeBlue/Breeze-TTS-2
|
| pipeline_tag: text-to-speech
|
| tags:
|
| - text-to-speech
|
| - tts
|
| - gguf
|
| - ggml
|
| - vulkan
|
| - voice-cloning
|
| - voice-conversion
|
| ---
|
|
|
| # Breeze-TTS-2 GGUF
|
|
|
| GGUF conversions of [BreezeBlue/Breeze-TTS-2](https://huggingface.co/BreezeBlue/Breeze-TTS-2) for
|
| [**Breeze-TTS-2.cpp**](https://github.com/HoppouAI/Breeze-TTS-2.cpp), a C++ reimplementation running on
|
| ggml with a Vulkan backend, so it works on NVIDIA, AMD and Intel GPUs and falls back to CPU.
|
|
|
| Bilingual English and Mandarin, 24 kHz, around 1.2x realtime at Q8_0 on an RTX 3060.
|
|
|
| These files will not load in llama.cpp. They need the Breeze-TTS-2.cpp runtime, which implements all
|
| four stages of the model: the T5Gemma2 text encoder, the Qwen3 backbone, the 15 step depth decoder and
|
| the vocoder.
|
|
|
| ## Files
|
|
|
| | File | Size | Notes |
|
| | --- | --- | --- |
|
| | `breeze-tts-2-f16.gguf` | 5.9 GB | Reference quality, unquantized |
|
| | `breeze-tts-2-q8_0.gguf` | 3.3 GB | **Recommended.** No audible loss against F16 |
|
| | `breeze-tts-2-q6_k.gguf` | 2.9 GB | |
|
| | `breeze-tts-2-q4_k.gguf` | 2.4 GB | Smallest safe choice, holds up well |
|
| | `breeze-tts-2-q8_0-dd4.gguf` | 3.2 GB | Experimental, Q8_0 base with a Q4_K depth decoder |
|
| | `breeze-tts-2-q8_0-dd2.gguf` | 3.1 GB | Experimental, Q8_0 base with a Q2_K depth decoder |
|
| | `breeze-tts-2-q4_k-dd2.gguf` | 2.3 GB | Experimental, Q4_K base with a Q2_K depth decoder |
|
|
|
| Approximate VRAM is about 1 GB above the file size.
|
|
|
| ### About the `-dd` variants
|
|
|
| Everything except the `-dd` files keeps the depth decoder at higher precision than the rest of the
|
| model. The `-dd` variants quantize it too, which is why they are smaller.
|
|
|
| The depth decoder runs **15 sequential steps for every single frame of audio**, so on hardware where
|
| that is the bottleneck rather than memory bandwidth, shrinking it can speed generation up noticeably.
|
| That is the reason these exist and it is worth benchmarking on your own card.
|
|
|
| The tradeoff is that depth codes feed back into the backbone every frame, so quantization error
|
| compounds as generation continues. Output holds up early and then drifts progressively muffled and
|
| thin past **roughly 45 seconds of continuous generation**. Short lines and dialogue are fine. Long
|
| narration is not, and the failure is gradual rather than obvious, so it is easy to miss on quick tests.
|
|
|
| Treat them as experimental. If in doubt, use `q8_0` or `q4_k`.
|
|
|
| ## Usage
|
|
|
| ```bash
|
| git clone --recursive https://github.com/HoppouAI/Breeze-TTS-2.cpp
|
| cd Breeze-TTS-2.cpp
|
| cmake -B build -DCMAKE_BUILD_TYPE=Release
|
| cmake --build build -j
|
| ```
|
|
|
| ```bash
|
| # invent a voice from a description
|
| build/breeze-cli breeze-tts-2-q8_0.gguf \
|
| --text "Welcome aboard. Your journey begins now." \
|
| --instruction "A warm, thoughtful young woman with a clear, calm delivery." \
|
| --output design.wav
|
|
|
| # clone a voice from a clip
|
| build/breeze-cli breeze-tts-2-q8_0.gguf \
|
| --text "It is good to hear your voice again." \
|
| --ref-audio ref_voice.wav --ref-text "The harbour lights came on one by one as the evening tide began to turn." \
|
| --output clone.wav
|
| ```
|
|
|
| Or run the server, which has a web UI built in plus HTTP and WebSocket streaming:
|
|
|
| ```bash
|
| build/breeze-server breeze-tts-2-q8_0.gguf --host 127.0.0.1 --port 8080 --webui
|
| ```
|
|
|
| `ref_voice.wav` in this repo is a sample reference clip. Its transcript is
|
| "The harbour lights came on one by one as the evening tide began to turn."
|
|
|
| ## Vocal events
|
|
|
| Inline tags in round brackets produce non speech sounds: `(laugh)`, `(sigh)`, `(cough)`,
|
| `(clears throat)`, and `[笑]` or `[叹气]` in Chinese. The vocabulary is free form rather than a fixed
|
| token list, so descriptive tags like `(nervous chuckle)` often work.
|
|
|
| They usually need `--cfg-scale 2` to `3` to actually fire. At the default of 1.0 the model treats a tag
|
| as a suggestion and tends to read straight past anything outside the common set.
|
|
|
| ## Voice conversion
|
|
|
| The runtime can also respeak an existing recording in a different voice, keeping the original timing,
|
| phrasing and emphasis while changing only the speaker. This is not part of the upstream model, it falls
|
| out of how the codec separates semantic content from acoustic detail.
|
|
|
| It is experimental. Pitch is regenerated rather than copied, so a converted vocal is re-sung in the
|
| target voice's own register instead of at the source's. Whether a tune survives varies clip to clip,
|
| and `keep_acoustic 1` or `2` copies the lowest acoustic codebooks from the source to pull more of the
|
| original contour through. Judge it by ear, and leave `keep_acoustic` at 0 for ordinary speech.
|
|
|
| ## Conversion
|
|
|
| Produced with `scripts/convert_hf_to_gguf.py` and `breeze-quantize` from the repo. The source download
|
| must include the `audio_tokenizer/` directory, which holds the vocoder that the model actually uses at
|
| inference time.
|
|
|
| ## License
|
|
|
| Weights are governed by the **BreezeBlue Research and Non-Commercial License** from the
|
| [original model](https://huggingface.co/BreezeBlue/Breeze-TTS-2). Converting to GGUF does not change
|
| that. The Breeze-TTS-2.cpp source code is Apache 2.0.
|
|
|
| You are responsible for complying with the weight license and for obtaining consent for any reference
|
| audio or voices you use.
|
|
|