Metadata-Version: 2.5
Name: fireredtts3-onnx
Version: 0.2.1
Summary: FireRedTTS3 zero-shot TTS on ONNX Runtime (CPU, torch-free)
License: Apache-2.0
Requires-Python: >=3.10
Requires-Dist: huggingface-hub
Requires-Dist: numpy
Requires-Dist: onnxruntime
Requires-Dist: tokenizers
Description-Content-Type: text/markdown

# fireredtts3-onnx

FireRedTTS3（零样本语音克隆 / 多语言 TTS）的 ONNX Runtime 部署，纯 CPU、无 torch 依赖。

## 一键运行（uvx）

```sh
uvx fireredtts3-onnx
```

首次运行自动从 Hugging Face 下载 tokenizer（~11MB）与 ONNX 产物（~16GB），
然后启动 HTTP TTS 服务：

```
POST /tts
{
  "text": "今天天气很好，我们一起去公园散步吧。",
  "prompt_text": "参考音频对应的文本",
  "prompt_audio_b64": "<参考音频 wav 的 base64>",
  "prompt_audio_sr": 16000,
  "language": "Chinese"        # 可选，默认 Chinese
}
-> {"audio_b64": "<合成 wav base64>", "sample_rate": 24000}

GET /health
```

单次合成（不启动服务）：

```sh
uvx fireredtts3-onnx --text "你好世界" --prompt-wav ref.wav --prompt-text "参考文本" --out gen.wav
```

## 模型目录

默认缓存到 `~/.cache/fireredtts3-onnx`：
- `weights/` 文本 tokenizer（来自 `FireRedTeam/FireRedTTS3`，运行时为纯 numpy，无需原始权重）
- `onnx/` 转换产物（19 个分段 ONNX：campp / redae 编解码 / patch_encoder / dit / 线性头 / embed / norm / prefill_seg1-4 / step_seg1-4，backbone 8.5GB 拆 8 段内联单文件）

产物仓库默认 `yunfengwang/fireredtts3-onnx`，可用环境变量覆盖：

```sh
export FIREREDTTS3_ONNX_REPO="your-hf-account/fireredtts3-onnx"
export HF_ENDPOINT=https://hf-mirror.com   # 国内镜像
```

## 说明

- 语言标签支持 README 所列 24 种语言与 21 种中文方言（如 `ZH_Sichuan`）
- 未提供参考音频时使用静音 prompt（语音克隆效果依赖参考音频质量）
- 文本规范化（TN）请自行在调用前完成

## 精度验证

- 全部 19 个分段与 torch fp32 逐算子对齐（encoder latents 偏差 ~1e-4，prefill/step/dit/decoder 1e-5 量级）
- 端到端与 torch 同种子（seed=1234）轨迹完全一致：同一停止步（第 30 步），生成 4.80s 音频

## 性能实测

4 线程 Intel Xeon Platinum（AVX-512，无 VNNI/fp16 硬件），纯生成耗时（不含模型加载）：

| 版本 | RTF（越小越好） |
|---|---|
| torch fp32 原版 | 86.6 |
| ONNX fp32（本包） | 117 |
| MNN fp16+w8（fireredtts3-mnn） | 112 |

结论：在没有 VNNI / fp16 硬件加速的 CPU 上，转换版比 torch/MKL 慢约 30%；
MNN 的 int8(w8)/fp16 在此类 CPU 上只省体积不提速，真正加速需要 VNNI(x86) 或 i8mm(ARM) 硬件。
