Skip to content

TTS and Voices

reitenji edited this page Jul 17, 2026 · 1 revision

TTS and Voices

Jarvis Line can use Kokoro, platform system speech, macOS say, or a custom command/API wrapper. Choose the backend that supports the language you ask the agent to write.

Backend Guide

Backend Best fit Important limit
Kokoro Recommended local English voice Bundled defaults are English-focused; model files are separate
System TTS Lowest-friction fallback and OS-managed languages Voice quality and availability depend on the operating system
macOS say Explicit macOS voice and rate selection Some newer Read & Speak voices may not appear in say -v '?'
Custom command Edge TTS, OpenAI TTS, ElevenLabs, local models, or your API wrapper You own provider credentials, privacy, and output compatibility

Inspect the active backend and supported settings:

jarvis-line config get tts
jarvis-line tts capabilities

Kokoro

Jarvis Line's default Kokoro profile is lang=en-gb with an English voice mix. It does not automatically switch model, voices, phonemizer, or language when you generate an instruction in another language.

jarvis-line kokoro status
jarvis-line kokoro download --accept-license
jarvis-line kokoro verify
jarvis-line kokoro install-deps
jarvis-line tts use kokoro

The model download is explicit because the files are large and have their own upstream Apache-2.0 license. Downloads use pinned upstream metadata and are verified by size and SHA-256 before replacement.

Default model locations:

~/.jarvis-line/tts/kokoro-models/kokoro-v1.0.onnx
~/.jarvis-line/tts/kokoro-models/voices-v1.0.bin

Configure trusted custom files:

jarvis-line kokoro configure \
  --model-path ~/.jarvis-line/tts/kokoro-models/kokoro-v1.0.onnx \
  --voices-path ~/.jarvis-line/tts/kokoro-models/voices-v1.0.bin

Kokoro supports voice, lang, speed, volume, model paths, and playback mode. Temporary-file playback is the reliability default and deletes generated audio after playback. Advanced users can choose streaming for lower latency.

For non-English Kokoro, you must provide a mutually compatible model, voices, language setting, and phonemizer support. Jarvis Line does not claim that an arbitrary Kokoro model supports an arbitrary language.

System TTS

jarvis-line tts use system

Platform implementation:

  • macOS: system speech through say
  • Windows: PowerShell System.Speech.Synthesis.SpeechSynthesizer
  • Linux: spd-say, espeak-ng, or espeak

For the best macOS fallback, let the OS choose its configured voice:

jarvis-line config set system_voice null
jarvis-line config set system_rate null
jarvis-line tts use system

macOS Read & Speak

When system_voice is null, Jarvis Line follows the default speech language and voice selected by macOS.

  1. Open System Settings.
  2. Go to Accessibility.
  3. Open Read & Speak.
  4. Choose System speech language.
  5. Choose a natural System voice for that language.
  6. Keep Jarvis Line on system TTS with no explicit voice override.
  7. Generate and paste Jarvis Line instructions in the same language.

Example for Turkish:

jarvis-line tts use system
jarvis-line config set system_voice null
jarvis-line config set system_rate null
jarvis-line instructions print agents --language "Turkish"

Your macOS interface language can remain English. Read & Speak language, voice, and Jarvis Line instruction language are separate choices and should match one another for natural pronunciation. Prefer downloaded Siri or premium voices when available; an English voice reading Turkish text is expected to sound robotic or mispronounced.

macOS say

Use this preset only when you specifically want explicit say voice/rate controls:

jarvis-line tts use macos

Supported settings are macos_voice and macos_rate.

Custom Command Or API

Direct-speech command:

jarvis-line tts use command --command 'my-tts --text {text_json}'

File-producing command:

jarvis-line tts use command \
  --mode file \
  --command 'my-tts --text {text_json} --output {output}' \
  --player 'ffplay -nodisp -autoexit -loglevel quiet {output}'

Placeholders:

  • {text}: raw text
  • {text_json}: JSON-escaped text
  • {output}: generated file path in file mode

Advanced custom fields must begin with custom_ or backend_:

jarvis-line config set custom_voice_id abc123
jarvis-line config set backend_region eu

Keep API keys in environment variables or your credential store, not in the Jarvis Line config, spoken line, logs, or issue report. A network-backed wrapper sends text according to that provider's behavior and privacy policy.

For exact backend fields and public-library notices, see the versioned TTS reference and third-party notices.

Clone this wiki locally