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, or phonemas_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-ptbr

import 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 ♡