Using Coqui-TTS on Neon and OVOS

Neon.AI and OpenVoice OS (OVOS) both offer out-of-the-box smart speaker/voice assistant platforms, using a combination of their own aggregated text-to-speech (TTS) and speech-to-text (STT) hosted options as well as low-power open source engines in case the internet is not available. While both companies go out of their way to be as privacy-respecting as possible, ultimately I don’t want my voice assistant to be sending my voice to a server somewhere else on the internet or sharing the text that will be spoken aloud. I want it to be as private as possible, and I want to be able to use it even if my internet is down.

Coqui-TTS is my favorite current open-source TTS option. It has the capability to train your own voice models or use pre-trained models that balance quality and size. It’s fast enough on a CPU, with certain models, to use in a voice assistant. So, how do we get it working on Neon and OVOS?

Prerequisites

This post assumes you already have a Coqui-TTS server running somewhere locally. If you don’t, check out this post on how to get it running on an M1/M2 Mac. You can also run it on an x86 Linux machine with a systemd service, or even on WSL.

If you have a server running on Linux but no systemd service yet, here’s an example service file:

[Unit]
Description=Coqui-TTS

[Service]
ExecStart=tts-server --model_name tts_models/en/ljspeech/vits
Restart=always

[Install]
WantedBy=multi-user.target

You’ll also need to have an existing Neon or OVOS setup, either on specialized smart speaker hardware or some custom hardware like a Raspberry Pi or x86 Mini PC.

Required plugins

If you’re running Neon, the plugin is pre-installed (as of May 2023). However, if you’re running OVOS or just want to be sure with Neon, SSH to your device and run pip install neon-tts-plugin-mozilla-remote. This will install the plugin that allows Neon to use a remote TTS server, as opposed to on-device Coqui-TTS. On a containerized setup, add neon-tts-plugin-mozilla-remote to your docker/config/neon.yaml file (Neon) or ~/ovos/config/mycroft.conf file (OVOS).

Configuring Neon/OVOS

Neon

If you’re running Neon, you’ll need to edit your ~/.config/neon/neon.yaml file.

tts:
  module: mozilla_remote
  mozilla_remote: { "api_url": "http://YOUR_SERVER_IP:5002/api/tts" }

OVOS

If you’re running OVOS, you’ll need to edit your ~/.config/mycroft/mycroft.conf file and add this to the root of the object.

{
  "tts": {
    "module": "mozilla_remote",
    "mozilla_remote": { "api_url": "http://YOUR_SERVER_IP:5002/api/tts" }
  }
}

Feedback

Questions? Comments? Feedback? Let me know on the Mycroft Community Forums or Neon OS public chat on Matrix.