Skip to content

[Proposal] Consider VieNeu-TTS as the backend for the tts() pipeline (CPU-friendly, Apache-2.0, emotion cues) #1043

Description

@pnnbao97

Disclosure

I'm the author of VieNeu-TTS. I want to be upfront about that — this is a proposal with an obvious conflict of interest, so please weigh it on the technical merits and feel free to push back. I'm not trying to advertise; I genuinely think it could be a good fit for underthesea's tts() pipeline and I'm happy to do the integration work myself.

Context

underthesea exposes tts(text) as a first-class Vietnamese NLP pipeline, currently backed by viettts. I'd like to propose VieNeu-TTS as an alternative (or additional) backend, and discuss whether it's something the maintainers would be open to.

Why VieNeu-TTS might be a good fit for underthesea users

  • CPU-first, torch-free path. The minimal install runs entirely on ONNX Runtime — PyTorch is never imported. A lot of underthesea users run in CPU-only / lightweight environments (servers, notebooks, edge), so a high-quality TTS that doesn't require a GPU or a heavy torch stack matters here. On a CUDA machine it auto-switches to a PyTorch engine.
  • Natural prosody. v2 is trained on 10,000+ hours of bilingual (Vi-En) data; the latest v3 Turbo is a from-scratch 48 kHz architecture with built-in default voices (no reference clip needed).
  • Emotion / non-verbal cues (experimental): inline tags like [cười], [thở dài], [hắng giọng] directly in the text.
  • Bilingual Vi-En code-switching via sea-g2p.
  • Instant voice cloning from 3–5s of reference audio.
  • License: Apache-2.0 — both the code and the model weights. This matches underthesea's recent switch to Apache-2.0, so there's no licensing blocker.

Minimal usage

pip install vieneu   # torch-free; runs v3 Turbo on CPU via ONNX Runtime
from vieneu import Vieneu

tts = Vieneu()                          # default = v3 Turbo, 48 kHz
audio = tts.infer("Xin chào, đây là VieNeu-TTS.")
tts.save(audio, "output.wav")

The API surface is small and could sit behind the existing tts(text) signature without changing it.

What I'm proposing

  1. Discuss whether the maintainers are open to VieNeu-TTS as a backend for tts() (as a replacement for, or option alongside, viettts).
  2. If yes, I'm happy to open the PR myself — an adapter that keeps the public tts(text) API identical, with VieNeu as an optional/selectable backend so existing users aren't broken.

Open questions for maintainers

  • Replace the existing viettts backend, or add VieNeu as an opt-in backend (e.g. tts(text, backend="vieneu"))?
  • Any constraints on dependency footprint for the default pip install underthesea? (VieNeu can install fully torch-free, which helps here.)
  • Preference for a benchmark before deciding — CPU latency / RTF / sample audio, viettts vs VieNeu? I can put one together.

Thanks for considering, and thanks for underthesea — happy to adjust the scope however works best for the project.

Links: GitHub · Hugging Face

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions