eugenehp/tiny-tts-rlx
TinyTTS / MeloTTS RLX bundle
MeloTTS/VITS2 English nested .rlxp subgraphs + frontend for RLX TinyTTS and MeloTTS. CPU / Metal / MLX / CUDA / wgpu.
Quick start
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.wavPrimary 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).
[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 payloadsThe 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
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.
Architecture
Pipeline: text → English frontend (G2P) → text_encoder → duration_predictor → monotonic alignment + latent sample (Rust) → flow → decoder → 44.1 kHz mono WAV.
Logical tree
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, place this repo under weights/tts/tiny-tts-rlx (or pass the path explicitly), then:
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.wavLicense
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 via python3 scripts/prepare_weights_hf.py.
