Paradee-8M Opens Brazilian Portuguese Edge TTS

Introduction
Paradee-8M Pt-BR just landed on Hugging Face: eraldohug/Paradee-8M-PtBr (created 2026-11-05 ~13:09 UTC). It is an ultra-light Brazilian Portuguese text-to-speech distill — not another Whisper fine-tune — aimed at CPU, browser, mobile, and even ESP32-class edge boxes.
The companion fork and zero-heap G2P live at github.com/astrowar/paradee_pt (Apache-2.0).
What Shipped
- Vendor / product: eraldohug / astrowar — Paradee-8M Pt-BR
- Modality: open-weight text-to-speech (pt-BR)
- Open vs closed: Apache-2.0 weights + ONNX/PyTorch checkpoints; ungated
- Runnable today: download the repo →
onnxruntime+ phonemizer (misaki[pt],espeak-ng, orphonemas_ptbr) → write 24 kHz WAV - Concrete fact: 7.88M parameters; quantized int8 ONNX ~8.46 MB per voice (vs >325 MB Kokoro teacher); ~25–50× realtime on a single CPU thread (~20–40 ms per second of speech)
Two built-in voices are distilled from Kokoro-82M’s Brazilian pair:
- Dora (
pf_dora) — feminine —onnx/paradee_dora_int8.onnx - Alex (
pm_alex) — masculine —onnx/paradee_alex_int8.onnx
fp32 ONNX (~34.7 MB) and split PyTorch text_side_*.pt / decoder_*.pt checkpoints ship alongside sample WAVs that compare Paradee vs the Kokoro teacher on the same sentences.
Run It
pip install onnxruntime soundfile numpy "misaki[pt]"
huggingface-cli download eraldohug/Paradee-8M-PtBr --local-dir paradee-ptbr
cd paradee-ptbrimport json
import numpy as np
import onnxruntime as ort
import soundfile as sf
from misaki.espeak import EspeakG2P
with open("config.json", encoding="utf-8") as f:
vocab = json.load(f)["vocab"]
session = ort.InferenceSession(
"onnx/paradee_dora_int8.onnx",
providers=["CPUExecutionProvider"],
)
g2p = EspeakG2P(language="pt-br")
phonemes, _ = g2p(
"Olá! Eu sou o Paradee, um modelo de síntese de voz ultra compacto."
)
tokens = [0] + [vocab[c] for c in phonemes if c in vocab][:510] + [0]
waveform = session.run(
None,
{
"input_ids": np.array([tokens], dtype=np.int64),
"speed": np.array([1.0], dtype=np.float32),
},
)[0][0]
sf.write("saida_paradee.wav", waveform, 24000)ONNX interface: input_ids int64 [1, T] (pad 0 on both ends, T ≤ 512), speed float32 [1], output mono PCM at 24 kHz. Swap the path to paradee_alex_int8.onnx for Alex.
For microcontrollers, astrowar/paradee_pt ships phonemas_ptbr — a zero-heap C/C++ G2P with static Flash LUTs (~24 µs per sentence) so ESP32/FreeRTOS stacks do not need Python or espeak.
Notes for makers
- Lineage is Paradee-8M v1.2 (Sahil Mahendrakar) distilled from Kokoro-82M Brazilian voices — TextStudent (4.23M) + VDecoder v2 (3.65M), then per-channel int8 with sensitive residual scales kept in fp16
- Prefer int8 ONNX for edge; keep fp32 or PyTorch halves if you are finetuning or A/B’ing fidelity
- Phoneme vocab is the 114-token pt-BR set in
config.json/tokenizer.json(web/JS-friendly) - Side-by-side WAVs in
samples/are the fastest quality check before you commit a product voice - No Gen CTA: edge TTS does not map to the Flux / Grok / MiniMax-H3 / Seedream / Seedance Gen loop
Conclusion
If you need Brazilian Portuguese speech on a laptop CPU, phone, or ESP32 without hauling Kokoro’s 325 MB teacher, Paradee-8M Pt-BR is today’s zero-day: Apache-2.0, 8.46 MB int8 per voice, paste-ready ONNX path.
—Anabel ♡
