DEV Community

Cover image for Vaniq-Edge: A 34MB Local TTS Engine (~8.5M Params, 2.94% WER)
Abhi
Abhi

Posted on

Vaniq-Edge: A 34MB Local TTS Engine (~8.5M Params, 2.94% WER)

Building local conversational voice agents usually comes with a frustrating trade-off: multi-gigabyte models sound great but add 1–2 seconds of latency, while tiny micro-models often suffer from terrible Word Error Rates (skipping words or mumbling consonants).

To see how much quality could fit into a micro footprint, I built Vaniq-Edge—an end-to-end, ~8.5M parameter standalone local TTS engine.

Text goes in, 24kHz mono audio comes out. No external vocoders or second-stage models running in the background.

🛠️ Model Overview

  • Total Parameters: ~8.5M
  • Model Size: 34.3 MB (FP32)
  • Audio Output: 24 kHz high-fidelity mono
  • License: Open weights

📊 Benchmarks & Performance

My main goal was keeping the Word Error Rate low so the output stays clear and understandable across long sentences:

  • Word Error Rate (Whisper WER): 2.94%
  • Predicted Quality (UTMOS22): 4.35 / 5.0
  • GPU Latency (CUDA): < 110ms initial generation (0.064x RTF)
  • CPU Speed (1-Core): 0.262x RTF (approx. 3.8x faster than real-time)

⚠️ Known Limitations

I want to be upfront about the trade-offs:

  1. Single Voice: English-only, single fixed voice. No voice cloning or speaker switching.
  2. Text Normalization: Complex numbers, unusual abbreviations, or unpunctuated walls of text will still trip it up.
  3. High-Frequency Artifacts: You might occasionally notice subtle high-frequency clipping on sharp s or z sounds.

💻 Quick Start

You can test it locally in Python:

pip install torch torchaudio phonemizer espeakng-loader==0.2.4 num2words scipy huggingface_hub Unidecode
import sys
import torch
import scipy.io.wavfile as wavfile
from huggingface_hub import snapshot_download

# Download model weights from Hugging Face
model_path = snapshot_download(repo_id="Abiray/Vaniq-Edge")
if model_path not in sys.path:
    sys.path.insert(0, model_path)

from inference import VaniqTTS

# Initialize
device = "cuda" if torch.cuda.is_available() else "cpu"
tts = VaniqTTS(model_path, device=device)

# Synthesize 24kHz Audio
sample_rate, wav_array = tts.synthesize("Hello world! Vaniq-Edge is running locally.")
wavfile.write("output.wav", sample_rate, wav_array)
Enter fullscreen mode Exit fullscreen mode

🔗 Try the Demo / Links

Hugging Face Model Repo: Abiray/Vaniq-Edge

Abiray/Vaniq-Edge · Hugging Face

We’re on a journey to advance and democratize artificial intelligence through open source and open science.

huggingface.co



Interactive Playground (ZeroGPU): Vaniq-Edge Demo Space

If you test it out, try throwing some difficult text at it—unusual names, numbers, or tongue twisters—and let me know how it handles edge cases in the comments!

Top comments (0)