tiny-tts-rlx / README.md
eugenehp's picture
Upload README.md with huggingface_hub
b814c0b verified
|
Raw
History Blame Contribute Delete
5.74 kB
---
license: mit
pipeline_tag: text-to-speech
library_name: rlx
tags:
- tts
- melotts
- vits2
- rlx
- rlxp
---
# TinyTTS / MeloTTS RLX bundle
MeloTTS/VITS2 English nested `.rlxp` subgraphs + frontend for RLX TinyTTS and MeloTTS. CPU / Metal / MLX / CUDA / wgpu.
| Field | Value |
|---|---|
| **Hub id** | [`eugenehp/tiny-tts-rlx`](https://huggingface.co/eugenehp/tiny-tts-rlx) |
| **Kind** | RLX-native weight bundle (graphs + sidecars ready for `rlx-*` crates). |
| **RLX crate** | [`rlx-tiny-tts`](https://github.com/MIT-RLX/rlx-models/tree/main/crates/rlx-tiny-tts) |
| **Upstream** | https://github.com/tronghieuit/tiny-tts |
## Quick start
```bash
just fetch-tiny-tts # or: hf download eugenehp/tiny-tts-rlx tiny-tts.rlxp --local-dir weights/tts/tiny-tts-rlx
just fetch-tiny-tts && cargo run -p rlx-tiny-tts --release --features apple-silicon -- --data weights/tts/tiny-tts-rlx --text "Hi." --device metal --out /tmp/tiny.wav
```
## Primary files (use these)
- `tiny-tts.rlxp` β€” 29.4 MiB
## Contents
Hub ships `tiny-tts.rlxp` only (nested graph packs + frontend). Also used by `rlx-melotts` / `just fetch-melotts`. Runtime does **not** load `.onnx` from Hub.
## Pack layout (`.rlxp`)
Outer RLXPFLAT bundle: nested native subgraph packs under `graphs/` (hot weight tensors + graph IR sidecars) plus English frontend assets. No `.onnx` on Hub. `rlx-tiny-tts` materializes the outer pack, then lowers each nested pack to HIR for the utterance length.
Official RLX package format (`RLXPFLAT`, container v2).
```text
[0..8) magic RLXPFLAT
[8..12) version u32 LE (= 2)
[12..16) flags u32 LE (hybrid hot/warm/cold)
[16..24) toc_len u64 LE
[24..) TOC JSON table of contents
data region 64-byte aligned payloads
```
The TOC lists **tensors** (named weight blobs) and/or **sidecars** (files: ONNX,
tokenizers, manifests, …). Sidecars are usually **cold + zstd**; model weights in
tensor packs are **hot + uncompressed** for mmap. Runtime crates open the pack
directly (or materialize sidecars to a temp dir for asset-only packs).
### This pack
| Field | Value |
|---|---|
| **File** | `tiny-tts.rlxp` (29.4 MiB) |
| **Manifest name** | `tiny-tts` |
| **Producer** | `rlx-assets` |
| **Container** | RLXPFLAT v2, flags=0x1 |
| **Tensors** | 0 |
| **Sidecars** | 16 |
### Sidecars (file assets)
Outer TOC is file sidecars only. Neural weights live **inside** each `graphs/<name>.rlxp` as hot mmap tensors (not safetensors).
Paths below are logical ids inside the pack (`__flat__/sidecar/<id>`).
Cold sidecars are zstd-compressed; sizes show raw β†’ stored.
| Sidecar | Raw | Stored | Role |
|---|---:|---:|---|
| `config.json` | 325 B | 220 B | Model / sample-rate config (44.1 kHz) |
| `frontend/bert/tokenizer.json` | 694.7 KiB | 214.5 KiB | BERT WordPiece tokenizer |
| `frontend/bert/tokenizer_config.json` | 351 B | 218 B | Tokenizer config |
| `frontend/cmudict_rep.txt` | 3.9 MiB | 1.0 MiB | CMUdict repair / variants |
| `frontend/g2p_checkpoint.safetensors` | 3.2 MiB | 3.0 MiB | G2P checkpoint |
| `frontend/g2p_cmudict.txt` | 3.3 MiB | 995.6 KiB | CMUdict for G2P |
| `frontend/homographs.en` | 18.3 KiB | 5.0 KiB | Homograph list |
| `frontend/perceptron_tagger.json` | 5.4 MiB | 1.5 MiB | POS tagger |
| `frontend/symbols.json` | 2.1 KiB | 726 B | Symbol table |
| `graphs/decoder.rlxp` | 13.7 MiB | 12.5 MiB | Nested pack: hot tensors + graph.json |
| `graphs/duration_predictor.rlxp` | 1.0 MiB | 598.8 KiB | Nested pack: hot tensors + graph.json |
| `graphs/flow.rlxp` | 13.7 MiB | 8.0 MiB | Nested pack: hot tensors + graph.json |
| `graphs/text_encoder.rlxp` | 2.9 MiB | 1.7 MiB | Nested pack: hot tensors + graph.json |
### Architecture
**Pipeline:** text β†’ English frontend (G2P) β†’ `text_encoder` β†’ `duration_predictor` β†’ monotonic alignment + latent sample (Rust) β†’ `flow` β†’ `decoder` β†’ 44.1 kHz mono WAV.
| Module | Role | Typical dtype | Notes |
|---|---|---|---|
| `text_encoder` | phone/tone/lang β†’ latent | f32 | length = phoneme count `T` |
| `duration_predictor` | per-phone duration | f32 | |
| `flow` | prior / flow | f32 | |
| `decoder` | HiFi-GAN-style vocoder | f32 | ConvTranspose upsample Γ—512 |
| frontend | G2P + BERT tokenizer + CMUdict | β€” | file sidecars |
### Logical tree
```text
tiny-tts.rlxp
β”œβ”€β”€ graphs/
β”‚ β”œβ”€β”€ text_encoder.rlxp # hot f32/i64 + graph.json
β”‚ β”œβ”€β”€ duration_predictor.rlxp
β”‚ β”œβ”€β”€ flow.rlxp
β”‚ └── decoder.rlxp
β”œβ”€β”€ config.json
└── frontend/ # G2P / tokenizer (not neural)
```
### How it is packed
`just export-tiny-tts-rlxp` / `pack_rlxp` example: ONNX pack-time source β†’ nested `graphs/*.rlxp` via `rlx-assets` native-pack, then outer bundle. Hub artifact has zero `.onnx`.
## Note
MeloTTS (`rlx-melotts`) loads this same bundle β€” locally `weights/tts/melotts` is a symlink.
## Note
Hub ships **no ONNX**. Nested `graphs/*.rlxp` hold hot f32/i64 tensors + `graph.json`; the crate lowers to HIR per utterance length.
## Run with RLX
Clone [rlx-models](https://github.com/MIT-RLX/rlx-models), place this repo under `weights/tts/tiny-tts-rlx` (or pass the path explicitly), then:
```bash
just fetch-tiny-tts && cargo run -p rlx-tiny-tts --release --features apple-silicon -- --data weights/tts/tiny-tts-rlx --text "Hi." --device metal --out /tmp/tiny.wav
```
## License
MIT β€” see `LICENSE`. Inherit upstream terms when redistributing.
Original weights and authorship: https://github.com/tronghieuit/tiny-tts
## Maintenance
Cards and LFS attrs are regenerated from the local `weights/` tree in [rlx-models](https://github.com/MIT-RLX/rlx-models) via `python3 scripts/prepare_weights_hf.py`.