CLI tool
andimarafioti/faster-qwen3-tts avatar
andimarafioti/faster-qwen3-tts

faster-qwen3-tts: Streaming Qwen3-TTS on Torch and GGML

Real-time text-to-speech with Qwen3-TTS

1,413 stars198 forksPythonMIT

At a glance

What is it?
faster-qwen3-tts is a Python inference package for streaming and full Qwen3-TTS generation, with CUDA graph acceleration on NVIDIA and AMD GPUs or a GGML backend for Metal and CUDA. Its main cost is a demanding hardware and runtime setup.
Who is it for?
Adopt faster-qwen3-tts when Qwen3-TTS voice cloning, voice design or custom voice generation is required on supported NVIDIA, AMD or Apple Silicon hardware. Do not adopt it for Intel Macs, older ROCm GPUs or environments without a compatible PyTorch wheel.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 29 days ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on November 7, 2026, and from our analysis. They are not legal advice.

From daily snapshots

Star history

  • andimarafioti/faster-qwen3-tts1,413 ★ · +27
Star history
Repository2026-10-172026-11-07
andimarafioti/faster-qwen3-tts1.4k1.4k

27 Stars in the last 21 days, measured from the daily GitHub snapshot. Compare with other projects

Editorial analysis

faster-qwen3-tts targets local Qwen3-TTS generation

faster-qwen3-tts addresses the inference layer around Qwen3-TTS. It provides streaming generation that yields audio chunks during synthesis and non-streaming generation for callers that want the completed waveform. The documented model coverage includes 0.6B and 1.7B Base models for voice cloning, 1.7B CustomVoice, and 1.7B VoiceDesign. Voice cloning supports both ICL and xvec references in the stated validation matrix.

The package is intended for Python developers building local or application-level speech systems. That includes applications that need Qwen3-TTS without implementing backend selection, CUDA graph capture or the GGML adapter themselves. It is not a model training framework. The README focuses on loading pretrained models, selecting a backend and producing audio.

The default Python dependency is `qwen-tts-hf`, described as a temporary PyPI compatibility build of Qwen3-TTS with Transformers 5 support. It supplies the same `qwen_tts` Python package as upstream `qwen-tts`, but the README explicitly says not to install both distributions in the same environment. This packaging choice is convenient, though it adds a compatibility constraint to environment planning.

Torch CUDA graphs and GGML form separate acceleration paths

The Torch backend uses `torch.cuda.CUDAGraph` in its fast path on NVIDIA CUDA and AMD ROCm. CUDA graphs reduce repeated launch overhead by allowing captured GPU work to be replayed through a prepared execution path. The documentation does not expose a user-facing graph toggle, so selection happens inside the package's Torch path rather than through a documented command-line option.

ROCm uses the same backend and device strings as CUDA: callers retain `backend="torch"` and `device="cuda"`. According to the README, ROCm PyTorch reuses the `torch.cuda` API, device names and graph APIs used by this project. That removes a separate ROCm-specific configuration branch, although it does not make every AMD GPU supported. Validation names AMD Instinct MI300X VF (`gfx942`) with ROCm 7.2.4, while other AMD GPUs are explicitly untested.

The experimental GGML backend adapts Pascal's `qwentts.cpp` runtime. The CLI selects Torch when CUDA is available and GGML otherwise, while `--backend` can force either path. Published native runtime targets include Apple Silicon Metal, NVIDIA CUDA and a source-built HIP runtime. GGML can use quantization such as BF16 or Q4_K_M in the documented AMD testing, but availability depends on the selected wheel or native build.

The two backends also have different reference handling. GGML caches raw clone references as `.spk` speaker latents and `.rvq` acoustic latents after the first request. Precomputed files can bypass reference audio encoding on later requests. That is a concrete GGML optimization, not merely a lower-level log setting.

Install faster-qwen3-tts on a compatible Python environment

The base package requires Python 3.10 or newer and PyTorch 2.5.1 or newer. On a system whose default PyTorch wheel matches the installed accelerator and driver, installation begins with:

bash
pip install faster-qwen3-tts

On native Apple Silicon Python running macOS 14 or newer, the default installation includes the GGML Metal runtime, and the CLI selects it automatically. Intel Macs and Rosetta Python are not supported by that Metal wheel.

NVIDIA RTX 50xx and Blackwell systems may require CUDA 12.8 PyTorch wheels. Hosts with an older driver can also reject a wheel built for a newer CUDA toolkit. The README specifically calls out CUDA 12.4 environments, including T4 and A10G hosts, where an explicit compatible installation is:

bash
pip install "torch==2.5.1" "torchaudio==2.5.1" --index-url https://download.pytorch.org/whl/cu124

The driver and wheel must agree. The README identifies `nvidia-smi` as the place to inspect the driver's displayed CUDA Version before choosing a wheel.

AMD environments with ROCm PyTorch already present need a Transformers pin associated with the verified setup:

bash
pip install faster-qwen3-tts "transformers==5.15.1"
python -c 'import torch; assert torch.version.hip and torch.cuda.is_available(); print(torch.cuda.get_device_name(0))'

The assertion should confirm a ROCm build with an available CUDA-compatible device, and the final line prints its device name. The documented verified combination includes PyTorch 2.9.1, `qwen-tts-hf==0.1.1.post1`, `transformers==5.15.1`, SDPA attention and bfloat16.

Generate the first VoiceDesign waveform with GGML

The following first use selects GGML and BF16 explicitly, so it is useful when automatic backend selection would not match the intended path. It generates from the Qwen3-TTS-12Hz-1.7B-VoiceDesign model and writes `out.wav`:

bash
pip install "faster-qwen3-tts[ggml]"

faster-qwen3-tts --backend ggml --quant BF16 design \
  --model Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign \
  --instruct "Warm, confident narrator" \
  --text "Welcome to the show." \
  --language English \
  --output out.wav

The first command adds the native GGML dependency. The CLI then loads the named model, applies the instruction and text, and writes the result to the selected output path. On supported Linux systems, the release provides CUDA 12.8 wheels. Other Linux runtimes may need the documented `qwentts-cpp-python==0.5.0+cu128` or `qwentts-cpp-python==0.5.0+cu130` wrapper from the specified wheelhouse before installing the extra.

Routine native diagnostics are hidden by default in Python and the CLI because GGML uses `log_level="warning"`. Warnings, errors, download progress and the final `Wrote ...` line remain visible. Native debug diagnostics require `--verbose` before the CLI subcommand or `qwentts_log_level="debug"` in `FasterQwen3TTS.from_pretrained(..., backend="ggml")`.

First-use initialization may be much slower than warm generation. The README therefore advises warming the system with complete utterances before measuring latency and separating reference extraction time from generation time.

GGML reference caching avoids repeated clone encoding

For repeated cloning requests, GGML can consume reference files that it has already produced. The documented invocation passes speaker and acoustic latent files directly:

bash
faster-qwen3-tts --backend ggml --quant BF16 clone \
  --model Qwen/Qwen3-TTS-12Hz-1.7B-Base \
  --ref-spk freeman.spk \
  --ref-rvq freeman.rvq \
  --ref-text "$(cat freeman.txt)" \
  --text "Cached references skip reference audio encoding on every request." \
  --language English \
  --output out.wav

Here, `--ref-spk` identifies the cached speaker latent, `--ref-rvq` identifies the cached acoustic latent and `--ref-text` supplies the matching reference transcript. The output text is separate from that transcript.

This mechanism is specific to the documented GGML cache behavior. It is useful when the same speaker reference is reused and the original audio encoding cost matters. It also introduces a state-management question that the package cannot remove: the cached `.spk` and `.rvq` files must correspond to the reference text and intended speaker. The README does not document cache invalidation, versioning or migration between backend versions, so those checks remain outside its stated guarantees.

The Torch and GGML backends should not be treated as interchangeable without checking their model, quantization and runtime constraints. The project explicitly labels GGML experimental and says the CLI chooses it when CUDA is unavailable unless `--backend` overrides the selection.

Compatibility gaps rule out several GPU environments

The largest practical limitation is hardware compatibility. The Metal wheel excludes Intel Macs and any Rosetta Python environment. The README requires native Apple Silicon Python on macOS 14 or newer. On AMD, only MI300X VF (`gfx942`) with ROCm 7.2.4 is named as validated. Other AMD GPUs have not been tested, so successful installation on them would not establish that the documented path works.

CUDA graph capture is also sensitive to software versions. The project says CUDA graph capture is not reliable on `torch<=2.5.0`, with a possible `operation not permitted when stream is capturing` error. PyTorch 2.5.1 is therefore the minimum supported version for this fast path. A mismatch between the installed PyTorch wheel and the host driver can prevent CUDA initialization entirely.

The validation record includes a specific unresolved generation case. The Torch suite passed 89 of 90 tests, and one greedy bfloat16 ICL case reached its token limit without emitting EOS. This is direct evidence that model mode, numerical format and decoding behavior can affect termination. It should not be dismissed as a general quality measure, but it is relevant to deterministic or bounded-output integrations.

A conventional managed TTS API is a different approach. Such a service moves model selection, driver compatibility, CUDA graph capture and audio generation to the provider. faster-qwen3-tts instead gives the application direct control over local models and accelerator execution, at the cost of managing hardware, runtime versions and reference caches.

Recent releases raise the cost of pinning the stack

The repository is not archived, and its last push was on 2026-10-09. Releases v0.5.4, v0.5.3 and v0.5.2 were published on 2026-10-05, 2026-09-29 and 2026-09-25. The package metadata identifies version 0.5.4 and classifies the project as `Development Status :: 4 - Beta`. These facts indicate recent development activity, but the README does not provide a compatibility policy for upgrades.

The dependency ranges already constrain upgrades. `transformers` is restricted to `>=5.15.1,<6`, while `qwen-tts-hf` is restricted to `>=0.1.1.post1,<0.2`. The README also records that newer Transformers versions produced a `MimiConfig.rope_theta` error in the verified AMD setup. That is a concrete reason to retain the documented pin rather than assume that a later release of every component remains compatible.

The MIT license permits use, modification, distribution and sublicensing under its terms, but applications still need to comply with the license text and separately account for model and dependency terms. The repository contains an MIT `LICENSE` file. It does not state the licenses or redistribution conditions for the downloaded Qwen3-TTS model weights.

Upgrade planning should therefore cover the Python package, `qwen-tts-hf`, Transformers, PyTorch and the selected native runtime. Cached GGML reference files also deserve explicit compatibility review because the README does not describe a cache migration or invalidation policy.

Editorial conclusion

Adopt faster-qwen3-tts when Qwen3-TTS voice cloning, voice design or custom voice generation is required on supported NVIDIA, AMD or Apple Silicon hardware. Do not adopt it for Intel Macs, older ROCm GPUs or environments without a compatible PyTorch wheel. Verify the GPU, driver, PyTorch build, selected backend and first-use warmup behavior before integrating it into a latency-sensitive service.

Frequently asked questions

Does faster-qwen3-tts support Apple Silicon and Intel Macs?

The GGML Metal runtime supports native Apple Silicon Macs running macOS 14 or newer. Intel Macs and Rosetta Python are not supported by the Metal wheel.

What are the PyTorch requirements for faster-qwen3-tts?

The project requires PyTorch 2.5.1 or newer because CUDA graph capture is not reliable on `torch<=2.5.0`. RTX 50xx systems may also require CUDA 12.8 PyTorch wheels, and the wheel must match the host driver.

Can faster-qwen3-tts run on AMD GPUs?

Torch and GGML AMD paths are documented, but the verified hardware is MI300X VF (`gfx942`) with ROCm 7.2.4. The README says other AMD GPUs have not been tested.

How does faster-qwen3-tts handle voice cloning references in GGML?

GGML caches raw clone references as `.spk` speaker latents and `.rvq` acoustic latents. Precomputed files can be supplied with `--ref-spk` and `--ref-rvq` to skip reference audio encoding on later requests.

Official sources

  1. andimarafioti/faster-qwen3-tts on GitHub
  2. Issues
  3. License: MIT
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/andimarafioti-faster-qwen3-tts.svg)](https://hysenlabs.com/projects/andimarafioti-faster-qwen3-tts)

Star history chart for your README

markdown
[![Star history](https://hysenlabs.com/chart/andimarafioti-faster-qwen3-tts.svg)](https://hysenlabs.com/projects/andimarafioti-faster-qwen3-tts)

Was this useful?