Skip to main content

Fast, on-device neural TTS by Lamapi

Project description


license: openrail language:

  • tr
  • bg
  • el
  • fr
  • ko
  • ja
  • ar
  • de
  • da
  • cs
  • es
  • et
  • fi
  • hr
  • hu
  • id
  • it
  • lt
  • lv
  • nl
  • pl
  • pt
  • ro
  • ru
  • sk
  • sl
  • sv
  • uk
  • vi
  • na tags:
  • text
  • speech
  • tts
  • neuvoice
  • supertonic

Neuvoice — Fast, On-Device Neural TTS by Lamapi

Neuvoice is a lightweight, on-device text-to-speech library that runs entirely via ONNX Runtime — no cloud calls, no latency surprises. Built by Lamapi, it ships with a curated voice library and supports 31 languages out of the box.

Quick Start

pip install neuvoice
from neuvoice import TTS

tts = TTS(auto_download=True)
style = tts.get_voice_style("Alina")

text = "Hello! Welcome to Neuvoice — fast, private, on-device speech synthesis."
wav, duration = tts.synthesize(text, voice_style=style, lang="en")

tts.save_audio(wav, "output.wav")
print(f"Generated {duration:.2f}s of audio")

On first run, model assets are downloaded and cached automatically under ~/.cache/neuvoice.

Highlights

31 supported languages. Covers a wide range of scripts and regions, from European languages to Arabic, Hindi, Japanese, Korean, Vietnamese, and more.

Runs entirely on-device. ONNX Runtime powers inference — no API keys, no network dependency after the initial model download. CPU is sufficient; GPU acceleration is supported when available.

Rich voice library. Ships with voices including Alina, Cem, Cole, Giray, Leon, Lina, Linda, Mustafa, Sarp, Selin, Sema, and Soras. Each voice is a compact style embedding — load any of them by name in a single call.

Inline expression tags. Embed <happy>, <laugh>, <breath>, <sad>, and other tags directly in your text to shape the delivery without any extra parameters.

Long-form synthesis. Inputs are automatically chunked, synthesized, and rejoined with configurable silence — no manual splitting required.

Supported Languages

Code Language Code Language Code Language Code Language
en English ko Korean ja Japanese ar Arabic
bg Bulgarian cs Czech da Danish de German
el Greek es Spanish et Estonian fi Finnish
fr French hi Hindi hr Croatian hu Hungarian
id Indonesian it Italian lt Lithuanian lv Latvian
nl Dutch pl Polish pt Portuguese ro Romanian
ru Russian sk Slovak sl Slovenian sv Swedish
tr Turkish uk Ukrainian vi Vietnamese na (fallback)

Available Voices

tts = TTS()
print(tts.voice_style_names)
# ['Alina', 'Cem', 'Cole', 'Giray', 'Leon', 'Lina', 'Linda',
#  'Mustafa', 'Sarp', 'Selin', 'Sema', 'Soras']

Load any voice by name:

style = tts.get_voice_style("Selin")

Or from a custom style file:

style = tts.get_voice_style_from_path("/path/to/my_voice.json")

synthesize() Parameters

Parameter Type Default Description
text str Input text. Supports inline tags like <happy>.
voice_style VoiceStyle Voice loaded via get_voice_style().
total_steps int 5 Flow-matching denoising steps. Higher = better quality, slower inference. Range: 1–100.
speed float 1.05 Playback speed multiplier. Range: 0.7–2.0.
lang str "en" ISO 639-1 language code, or "na" for unknown languages.
max_chunk_length int 300 Max characters per synthesis chunk (120 for Korean).
silence_duration float 0.3 Seconds of silence inserted between chunks.
verbose bool False Print per-chunk progress to stdout.

Returns: (waveform, duration) — waveform as a (1, samples) NumPy array, duration in seconds.

Examples

Multilingual synthesis:

tts = TTS()
style = tts.get_voice_style("Leon")

pairs = [
    ("Merhaba! Bugün hava çok güzel.", "tr"),
    ("Bonjour! Il fait beau aujourd'hui.", "fr"),
    ("こんにちは!今日はいい天気ですね。", "ja"),
]
for text, lang in pairs:
    wav, dur = tts.synthesize(text, voice_style=style, lang=lang)
    tts.save_audio(wav, f"output_{lang}.wav")

Expression tags:

style = tts.get_voice_style("Lina")
text = "Good news! <happy> We just shipped the feature. <laugh> Don't tell anyone yet."
wav, dur = tts.synthesize(text, voice_style=style, lang="en")

Higher quality with more steps:

wav, dur = tts.synthesize(
    text="A slow, deliberate reading for maximum clarity.",
    voice_style=style,
    total_steps=30,
    speed=0.9,
    lang="en",
)

Configuration

Model cache location and thread counts can be controlled via environment variables:

Variable Description
NEUVOICE_CACHE_DIR Override the default cache directory (~/.cache/neuvoice).
NEUVOICE_MODEL_REPO Override the Hugging Face model repository.
NEUVOICE_REVISION Model revision/branch to use (default: main).
NEUVOICE_INTRA_THREADS ONNX intra-op thread count (default: auto).
NEUVOICE_INTER_THREADS ONNX inter-op thread count (default: auto).

License

Neuvoice is released under the MIT License. See LICENSE for details.

The bundled ONNX model is released under the OpenRAIL-M License.

Copyright © 2026 Lamapi

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

neuvoice-1.0.0.tar.gz (13.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

neuvoice-1.0.0-py3-none-any.whl (16.8 kB view details)

Uploaded Python 3

File details

Details for the file neuvoice-1.0.0.tar.gz.

File metadata

  • Download URL: neuvoice-1.0.0.tar.gz
  • Upload date:
  • Size: 13.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.13

File hashes

Hashes for neuvoice-1.0.0.tar.gz
Algorithm Hash digest
SHA256 0009ab2e2f081c16a9836f705fad5d8e8fb8f0b3b2338291c9f7f09fdb24c2c3
MD5 16b7bd688d820ca09d3aee616bc28c1d
BLAKE2b-256 c821c56e57e80e54bd2020826ba0edf3c608c519f01c699c12ee63065a5d8d7b

See more details on using hashes here.

File details

Details for the file neuvoice-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: neuvoice-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 16.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.13

File hashes

Hashes for neuvoice-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a933db515ff99c41d672e5426a9bfeaa92b3c0285e6ef27f61d18ba14124d317
MD5 797da17cff17984afbfb5d29b304cde7
BLAKE2b-256 a8c88fb24773997fa9566e96acb35b8e758ac02e087cd8b8764b225beebc13b0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page