github OHF-Voice/wyoming-piper v2.4.0

7 hours ago
  • Add experimental --backend omnivoice for OmniVoice TTS via onnxruntime
    • --omnivoice-steps to configure MaskGIT decode steps (default: 32)
    • --omnivoice-ref-dir for custom voices: a directory of voices organized
      as <language>/<voice_name>/, loaded at startup and advertised as voices.
      Each voice directory is either a cloning voice (ref.{wav,txt}) or a
      voice-design voice (instruct.txt, whose text describes the desired voice
      style). A default voice is also advertised for every supported language;
      it (or an empty/unknown voice name) uses the built-in speaker.
    • --omnivoice-language to set the default synthesis language (default:
      English); per-request language codes (en_US, en-US) are also honored.
      The default voice is advertised for the ~128 languages with an ISO 639-1
      tag (plus Cantonese, Standard Arabic and Odia) rather than all 646 codes
      OmniVoice lists; the rest are still reachable, just not advertised
    • --omnivoice-onnx-repo to override the HuggingFace repo for the ONNX graph
    • block-wise int4 quantization is hardcoded for now (clean audio at low step
      counts, e.g. --omnivoice-steps 10); reproduce with
      script/quantize_omnivoice.py
    • the ONNX model is used from a --data-dir if present there, otherwise
      downloaded into --download-dir (used as the HuggingFace cache)
    • install with the omnivoice optional dependencies. For Docker, this is a
      separate rhasspy/wyoming-piper:omnivoice image (amd64 only) so the
      default image doesn't grow a torch/transformers dependency.
  • Require Python 3.10 or later (the omnivoice dependencies need it)
  • Add --local-files-only to run the HuggingFace loader in offline mode
  • Add --web-server for a web UI (runs alongside the Wyoming server) to manage
    custom and cloned voices. Custom Piper voices are managed across every
    --data-dir, not just --download-dir (where uploads still land). Missing
    dependencies and an unavailable port are reported at startup, before the
    backend loads its model.
  • Fix voices added or removed while the server runs being ignored until the
    process restarted. The voice list was built once at startup, so a voice added
    through the web UI was never advertised, and requesting it silently fell back
    to the OmniVoice built-in speaker. Voices are now rescanned per Describe and
    when an unknown voice is requested.
  • Fix custom voices being advertised under their dataset name instead of their
    file name, which made them impossible to synthesize when the two disagreed.
    The dataset name is still accepted as an alias, including as --voice.
  • Fix a custom voice with missing or unreadable files (a leftover .onnx with no
    .onnx.json, for example) stopping the server from starting. It is now skipped
    with a warning; a broken --voice is still an error.

Don't miss a new wyoming-piper release

NewReleases is sending notifications on new releases.