--- 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/.rlxp` as hot mmap tensors (not safetensors). Paths below are logical ids inside the pack (`__flat__/sidecar/`). 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`.