The final AI voice conversational system all running in your terminal! vtmate is a Powerful terminal-based voice ai toolkit with many realistic voices, extremely low latency, 41 languages supported. Allows you to voice conversate with local ai models (or cloud based), pipe data and save into files.
Homepage https://github.com/DavidValin/vtmate
curl -fsSL https://raw.githubusercontent.com/DavidValin/vtmate/main/installer.sh | sh
The program self-contains all TTS models and voices and necessary files to recognize speech and speak with voice with no external installations ensuring maximum portability.
- โฌ๏ธ Download (โญ MacOS โญ Linux and โญ Windows supported)
- ๐ค Quicksheet (PDF) (๐จ๏ธ print ready for easy access)
- ๐ฅ Video Overview
(๐ฌ๐ง English) Conversation mode demo
conversation.mp4
(๐ฌ๐ง English) Debate mode demo
debate.mp4
(๐ฌ๐ง English) Reading mode demo
read_mode.mp4
(๐ฌ๐ง English) Background mode (--daemon)
background_mode.mp4
- Features
- How it works
- LLM integration
- TTS engine support
- Installation
- Configure agents
- How to use it
- Language support
- Acceleration support
- Build vtmate from source code
- ๐ Continuous Voice chat (LIVE conversation) with voice interruption
- ๐ AI agents debates (2 agents talking to each other; use can also participate in between)
- ๐ Realtime agent swap
- ๐ Mid interrupt response via keyboard
- ๐ Mid interrupt response via voice
- ๐ Reset session (fresh history)
- ๐ "Undo" last response (remove last response from history)
- ๐ Recording Pause / Resume via keyboard in LIVE conversation mode
- ๐ Push to Talk mode (PTT)
- ๐ Save conversation as audio and text
- ๐ Read a text file with voice, phrase by phrase, with keyboard navigation and pause/resume
- ๐ Read text with voice from STDIN, phrase by phrase, with keyboard navigation and pause/resume
- ๐ Save audio speech of a text file or STDIN content
- ๐ Load separate settings file with different agents
- ๐ Integrated
whisperspeech recognition system (no external intallation required) - ๐ Integrated
kokoro TTS,supertonic2 TTSandsupertonic3 TTSsystems (no external intallation required) - ๐ Interface with
OpenTTSsystem (requires external docker service) - ๐ Source code in the replies (text inside ``` blocks) is shown on screen but never spoken
- ๐ Use any gguf model from huggingface.com (using llama-server), any ollama model, or a hosted provider (OpenAI, Anthropic, Google, Groq, Mistral, OpenRouter, DeepSeek, xAI)
- ๐ Run in background mode and chat with llm via voice, ask about selection, read selected text or turn your speech into text pasted into screen
- Background mode features can be used to assist your daily routine with ai powered voice responses while you use other apps, voice read your favourite books or articles, write emails via voice and even replace paid tools like Superwhisper
- You start the program and start talking
- Once audio is detected (based on sound-threshold-peak option) it will start recording
- As soon as there is a time of silence (based on end_silence_ms option), it will transcribe the recorded audio using speech to text system (whisper). In ptt mode, this option is ignored, the program will wait for SPACE key to be released to submit the audio
- The transcribed text will be sent to the ai model
- The ai model will reply with text
- The text converted to audio using text to speech system
- You can interrupt the ai agent at any moment by start speaking, this will cause the response and audio to stop and you can continue talking.
- In debate mode, the agents reply to each other automatically, playing the audio in each turn
Local servers (no api key needed):
- โ ollama (default, version 0.13 or newer)
- โ llama-server
- โ
any OpenAI-compatible server such as LM Studio or vLLM (
provider = openai-compatible)
Hosted providers (api key needed, set api_key in the agent or the provider's environment variable):
- โ openai, anthropic, google, groq, mistral, openrouter, deepseek, xai
You can run the models locally (by default) or remotely by configuring the base url of each agent. Thinking / reasoning is disabled on local servers so replies start speaking right away.
- โ Kokoro (integrated)
- โ Supertonic 2 (integrated)
- โ Supertonic 3 (integrated)
- โ OpenTTS (requires external docker service)
Single interactive network installer (works for fresh installs or upgrades):
curl -fsSL https://raw.githubusercontent.com/DavidValin/vtmate/main/installer.sh | sh
Or download a release by hand from https://github.com/DavidValin/vtmate/releases.
Option A- ollama (the default)
- Install
https://ollama.com/download. - Pull the model you want to use with vtmate, for instance:
ollama pull llama3.2:3b.
Option B- llama-server support.
- Install llama.cpp:
https://github.com/ggml-org/llama.cpp. - Download a gguf model:
https://huggingface.co/QuantFactory/Meta-Llama-3-8B-Instruct-GGUF/resolve/main/Meta-Llama-3-8B-Instruct.Q8_0.gguf?download=true.
Option C- hosted provider (no local install).
vtmate works with all major cloud providers, both api and cli options. You can configure your agents by running vtmate and pressing Control+s or manually editing ~/.vtmate/agents file.
vtmate allows you to configure as many agents as you want, each with its personality (model, voice and system prompt). Example:
vmate
โ
โโโโโโโโโโผโโโโโโโโโ
โ โ โ
Scientist Lawyer Programmer
It comes with a predefined list of agents.
The quickest way is to press Control+S while vtmate is running: a popup opens with the list of your agents, and everything you change there is written to the settings file when you save it.
Agent settings live in ~/.vtmate/agents file, which you can edit manually too (see vtmate --help).
- By default all agents are set in
PTTmode, you have to keepSPACEpressed to talk. If you want to useLIVEmode, make sure you adjust your microphone levels correctly and adjustsound_threshold_peakandend_silence_mssettings to your need - Source code in an agent's reply is not spoken: anything wrapped in ``` fences is shown but skipped. Reading a file with
-rdoes speak it, since the code is part of what you asked to have read. - Voice mixing is supported for kokoro TTS system only, you can create a voice by mixing 2 kokoro voices by percentage. Example mixing 50% of bm_daniel and 50% of am_puck: set voice name to
bm_daniel.5+am_puck.5
A long system prompt is easier to write and to share between agents in its own [system_prompt] section, in ~/.vtmate/agents. The block has a name and then the prompt body fenced between two lines of three or more dashes, and agents pull it in with @<name>:
[system_prompt]
name = planner
---
You assist the user in the creation of a plan based on the user's goal.
When defining the plan follow these format standards:
1. The plan is composed by tasks and subtasks.
2. Each task has the format: "[ ] <task name>".
3. Subtasks are indented with 2 spaces below the parent task.
4. Before defining a plan, make sure you have the relevant
information from the user.
---
[agent]
name = planner
...
system_prompt = @planner
- The body is taken exactly as written: blank lines, indentation, quotes and lines starting with
[are all kept. Because it already has real new lines,\ninside a block is left alone. - Close a body that itself contains a
---line with a longer fence (----), the same way as markdown code fences. - Define as many blocks as you want, in any order, and reference one from as many agents as you want.
- Inline prompts keep working exactly as before:
system_prompt = "You are a nice ai agent\nreply nicely"turns\ninto a new line. Start an inline prompt with@@if you need it to begin with a literal@. - The
Control+Spopup picks between the two forms for you: a prompt of more than 5 lines is saved as a[system_prompt]block, a shorter one inline. A prompt that came from a block keeps that block's name, so agents sharing one go on sharing it.
Start vtmate and press SPACE while you talk and then release (PTT mode):
vtmate
See Quicksheet (PDF) to learn how to use it.
Start conversation with default agent and save it as audio and text (waits for user voice input and respond)
vtmate -s
or save it as html with playable turns
vtmate -s-html
This writes a folder per conversation in ~/.vtmate/conversations:
2026-09-09_18-42-10_ab12cd34/
index.html the player: the whole conversation, turn by turn
turn-001-user.wav what you said on that turn
turn-002-nova.wav what the agent answered on that turn
...
Here is how it looks exported as html:
Open index.html in a browser and press play: it plays every turn in order,
highlights the one being spoken and scrolls to it. Playback can be paused and
resumed, each turn has its own play button to jump to it, and the page has a
light / dark theme switch. It is rewritten after every turn, so the folder can
be opened while the conversation is still going.
-s and -s-html are independent and can be combined: -s writes one .txt
plus a single .wav for the whole session, -s-html writes the folder above.
Start conversation with a specific agent (waits for user voice input and respond)
vtmate -a "main agent"
Start conversation with an initial text prompt
vtmate -p "Are we alone in the galaxy?"
Start conversation with an initial prompt from file
vtmate -i myprompt.txt
Get a single response from STDIN text and exit
echo "How to fly without wings?" | vtmate -i -
- When running in LIVE mode just talk. You can also pause/resume recording by pressing
SPACEonce - When running in PTT mode: keep
SPACEpushed while talking, and then release - Press
SCAPEonce during a mid response to cancel it - Press
SCAPEtwice for resetting the session - Press double
uto undo last response - You can switch agents in realtime by pressing
ARROW_LEFT/ARROW_RIGHTkeyword arrows (you need at least 2 agents defined in~/vtmate/settings). - You can change the voice speed by pressing
ARROW_UP/ARROW_DOWN - Press
Control+Sto add, edit or remove agents without leaving the conversation (see Configure agents) - Press
Control+Eto start (or stop) saving the running conversation without leaving it or restarting it: pick.txt+.wav, the html player, or both, from a popup. While a save is running, the same popup shows the folder it is writing to and a "Stop recording" button - Be able to save the conversation in a wav and text file by adding
-soption. It will save it in~/.vtmate/conversationsfolder - Be able to save the debate as an html player with one audio file per turn by adding
-s-htmloption. Each agent gets its own colour, and the whole debate can be played back from the browser - Save the conversation / debate as .html with playable blocks using
--save-html. It will save it in~/.vtmate/conversationsfolder - For quick reference get the printable Quicksheet (PDF)
Initialize a debate between two agents and be able to participate in the debate by speaking at any time. To create a good debate adjust the system prompts of each agent and give a detailed initial input.
There are two ways to initialize a debate, using a cli command or from vtmate tui itself by pressing Control+D, which open the next popup:

In debate mode is good idea to set --ptt <true/false> option so that the ptt value is not switched on each agent turn.
The debate's initial subject and -p/-i's initial prompt are the same thing: whichever one you give becomes turn 0. Give only one - a trailing <subject> together with -p/-i is rejected, since they would both be trying to set the same message.
Start a debate with an initial subject (with forced ptt mode)
vtmate --debate "God" "Devil" "How to succeed in life?" --ptt true
Start a debate with an initial prompt from file (with forced live mode)
vtmate --debate "God" "Devil" -i myprompt.txt --ptt false
Start a debate with an initial file prompt (with forced ptt mode)
cat "Lets discuss the permissions of this files: \n\n $(ls -la)" > prompt.txt
vtmate --debate "Unix administrator" "Security Expert" -i prompt.txt --ptt true
Start a debate that ends by itself after 10 turns and export the audio session as a playable html in ~/.vtmate/conversations
vtmate --debate "God" "Devil" "How to succeed in life?" --ptt true --max-turns 10 --s-html
- When running in LIVE mode just talk. You can also pause/resume recording by pressing
SPACEonce - When running in PTT mode: keep
SPACEpushed while talking, and then release - Press
SCAPEonce during a mid response to cancel it and stop the debate - Press
SCAPEtwice for resetting the session - Press double
uto undo last response - You can also start/stop a debate from conversation mode by pressing
Control+Dand picking the debate agents. The popup also has a text field for the initial subject (the same role as the trailing<subject>argument above) - leave it blank to provide the topic by voice instead. - Be able to save the conversation in a wav and text file by adding
-soption. It will save it in~/.vtmate/conversationsfolder - Add
--max-turns <N>to end the program by itself after N turns, where one agent reply is one turn. The debate stops after that reply is spoken and saved, so nothing is cut mid sentence. TheControl+Dpopup has its own "Max turns" field too (blank for no limit, or 2-1000000000000, prefilled with whatever limit is already in effect) - but reaching it there switches back to conversation mode instead of exiting, so you can keep going and start a new debate withControl+Dright away - Here is an example on how to create automated audio debates from youtube videos using vtmate in combination with other tools
- For quick reference get the printable Quicksheet (PDF)
This mode process a text input, responds (text and audio) and exits
Get a single response from prompt
vtmate -q -p "Explain me the Zettelkasten Method"
Get a single response from prompt from file
vtmate -q -i myprompt.txt
Get a single response from prompt from STDIN and exit
echo "Is $(date) a national holiday day in Spain?" | vtmate -q -i -
Get a single response and save it as audio file and text file
echo "Can you find any suspicious processes in the next list? If so, why?\n\n $(ps aux | head -20)" | vtmate -q -i - -s
vtmate can run in the background with no terminal, driven by global shortcuts from any application: select some text in your browser or editor, hold a shortcut, talk, release it. Replies are spoken only.
There are 4 features you can use in daemon mode:
- Talk with an agent via voice (and reset the conversation context)
- Ask a question to an agent regarding the selected text and get a voice response
- Read a selected text using voice
- Transform a voice recording into text and paste it as text
Here is how to use it:
vtmate --daemon # start it (models load once, then it waits for shortcuts)
vtmate # attach: the normal terminal view of the daemon conversation
vtmate --daemon-status # is it running? which shortcuts?
vtmate --daemon-stop # stop it
Shortcuts (change them in the [daemon] section of ~/.vtmate/settings):
| setting | default | what it does |
|---|---|---|
llm_background_ptt_combo |
ctrl+alt+a |
hold to talk. On release your speech is transcribed and, if some text is selected anywhere on the desktop, the selection is appended after the speech (speech first, blank line, selection). The whole thing is sent to the agent as one message and the reply is spoken. Pressing it while a reply is playing interrupts the reply. The selection is sent once: what you selected since your previous message. Select the text again to send it a second time, and nothing is appended when nothing is selected. |
tts_background_combo |
ctrl+alt+r |
read the selected text aloud (no LLM), including any code in it. Press again while it is speaking to stop. Reading uses the selection up, so it is not appended to your next message as well. |
stt_and_paste_background_ptt_combo |
ctrl+alt+s |
hold to talk. On release your speech is transcribed and written at the cursor of the application you are in. On Linux it is typed out, so it works in terminals too (where Ctrl+V is not the paste shortcut) and your clipboard is left alone; on Windows and macOS it is pasted through the clipboard, whose previous text is put back afterwards. No LLM, nothing spoken. |
llm_background_reset |
ctrl+q |
like ESCAPE in the terminal: press once to stop the speech, twice within a second to also reset the conversation (history cleared). A desktop notification "Conversation restarted!" confirms the reset. |
Shortcuts are written as modifiers joined by +: ctrl, alt (or option), shift, cmd (or super), cmdorctrl, plus a key: letters, digits, f1..f12, escape, space, tab, arrows... e.g. ctrl+alt+a, shift+f5, cmd+alt+r.
- When starting, the daemon grabs all four shortcuts. If any is already taken by another application (some desktops bind
ctrl+qorctrl+altcombinations, for example) the daemon does not start andvtmate --daemonlists the taken shortcuts so you can change them. - The agent that replies is the daemon's selected agent: run
vtmateto attach, pressARROW_LEFT/ARROW_RIGHTto switch (this is remembered inselected_agent), thenCtrl+Cto detach. Attaching withvtmate -a <agent_name>switches straight to that agent instead (same effect as arrowing to it - conversation reset included);vtmate -c <agents_file>reloads the daemon's agents from that file live (picking up edits to the running agent without resetting the conversation, unless it switches to a different agent because the previous one no longer exists in the file), and both can be combined. Attached you get the full terminal view: the live transcript, the status bar and the usual keys (SPACEpush-to-talk,ESCAPE,u, arrows,Ctrl+D,Ctrl+S,Ctrl+E).Ctrl+Conly detaches; the daemon keeps running untilvtmate --daemon-stop. - Only one daemon runs at a time. Its files live in
~/.vtmate:daemon.pid,daemon.sock(Linux/macOS) anddaemon.log(diagnostics only, never the conversation). - The daemon always works in push-to-talk mode: the microphone is only open while a shortcut is held.
Platform notes:
- Linux: X11 only (Wayland has no global shortcuts nor a readable selection; under Wayland run vtmate in an X11 session). The selection is the primary selection (whatever is highlighted), no
Ctrl+Cneeded. - Windows / macOS: the selection is read by simulating
Ctrl+C/Cmd+Cand the clipboard is restored afterwards (text only). On macOS the vtmate binary needs the Accessibility permission (System Settings โ Privacy & Security โ Accessibility) to simulate keys. On Windows,ctrl+altis the same asAltGron some keyboard layouts: rebind those if the daemon reports them as taken. vtmate --daemondetaches from the terminal. To start it at login use your session autostart, a systemd user unit, a launchd agent or the Task Scheduler runningvtmate --daemon.
Read a text file or STDIN text phrase by phrase using an agent voice. Ensure the agent you choose has correct language and voice for your text. In this mode, only the next agent settings are used: "tts", "voice" and "language".
read from a txt file (and save it in ~/.vtmate/read-files)
vtmate -r myfile.txt -a reader
read from STDIN text, get a response and exit
echo "First phrase. Second phrase" | vtmate -r -
In this mode you can:
- Move to previous phrase by pressing
ARROW_UP - Move to next phrase by pressing
ARROW_DOWN - Stop / Resume playback by pressing
SPACE - For quick reference get the printable Quicksheet (PDF)
-r-stdout is the headless, pipeable version: same text splitting and voice, but no on-screen text/navigation and no audio device - the synthesized speech streams to STDOUT as a wav instead of playing out loud, so it can be redirected to a file or piped into another program:
vtmate -r-stdout myfile.txt -a reader > myfile.wav
echo "First phrase. Second phrase" | vtmate -r-stdout - | aplay -
By default vtmate uses the ~/.vtmate/agents file.
You can create separate agents files for different agent groups, each holding its own [agent] (and [system_prompt]) sections, example:
philosophers.txt
scientists.txt
employees.txt
And then load each as you need with -c:
vtmate -c philosophers.txt --debate "Aristoteles" "Ptahhotep" "how to achieve harmony?"
supertonic3 and supertonic2 read their voices from one JSON file per voice:
~/.vtmate/tts/supertonic3-model/voice_styles/M1.json
~/.vtmate/tts/supertonic2-model/voice_styles/F3.json
(on Windows %USERPROFILE%\.vtmate\..., on macOS ~/.vtmate/... as well)
Drop a new <name>.json in that directory and the voice becomes available under that name: vtmate --list-voices shows it, voice = <name> in an agent passes validation, and the agent speaks with it. Remove the file and it is gone again. --list-voices prints the exact directory for each engine.
The other engines (kokoro, opentts) have fixed voice lists.
Clone a new supertonic3 voice from a short recording, or refine an existing clone further with another one - both run fully offline, no model training knowledge needed.
Clone a new voice from a WAV reference and its transcript:
vtmate --clone-voice <voice_name> <language> <wav_file> <ref_text>
voice_name: letters, digits and_only, and must not already exist.language: one of the languagessupertonic3supports (seevtmate --list-voices) - only used to train the clone (matchesref_textagainst it, picks built-in probe sentences foren/es/fr/de/it/pt); it does not lock the resulting voice to that language.wav_file: the reference recording (mono or stereo WAV, ~2-30s, any common sample rate).ref_text: the exact words spoken in the recording, quoted - the closer the match, the better the clone. It also sets the tempo: the clone is fitted to say this text in the time the recording takes, so no speed has to be given.
On success it prints Voice "<voice_name>" ready in supertonic3! and saves it to ~/.vtmate/tts/supertonic3-model/voice_styles/<voice_name>.json, immediately usable like any other voice: voice = <voice_name> in an agent, or --voice <voice_name> elsewhere. Like the built-in M1-F5 voices, a cloned voice is multilingual - one file, usable with any of the 31 supported languages regardless of which language it was cloned with.
Refine an existing voice further with another recording, without touching the original:
vtmate --refine-voice <voice_name> <language> <wav_file> <ref_text>
Same arguments, but voice_name must already exist (from a previous --clone-voice). It warm-starts from that voice's current style and never overwrites it: the result is saved as a new version, <voice_name>v<n> (v1, v2, v3, ...) - the base voice and every earlier version stay untouched and usable. Run it again on the same name to keep improving it: each call picks up from the latest version and produces the next one.
Both commands show a progress popup (current stage, iteration and overall progress) while training, which typically takes a few minutes on CPU.
What to expect from a clone
Cloning does not train a model on the speaker: it searches for the supertonic3 style vector that best matches the recording, guided mainly by a speaker-embedding similarity. That sets what a clone can and cannot pick up:
- Length: 10-20 s of one or two natural sentences is the sweet spot. Speaker embeddings saturate at around 5-10 s of clean speech, and the transcript is synthesized as a single utterance, so windows over ~15 s trigger a warning. A longer clip adds little; a cleaner one adds a lot.
- Quality over quantity: a quiet room, no music or reverb, a single speaker, and a
ref_textthat matches the audio word for word matter more than extra seconds. - Timbre, pitch range and rhythm transfer well - this is what the search fits.
- Tempo is detected, not configured: the speech in the recording is measured and the clone is fitted to speak
ref_textat that pace (which is whyref_textis needed). That pace becomes the voice'svoice_speed = 1.0; the setting andARROW_UP/ARROW_DOWNscale from there. - Accent transfers only partly.
supertonic3reads raw text with no phoneme layer, so pronunciation (vowel quality,r,th, ...) comes from the model's own rendering of each language and cannot be changed by the style. The speaker's melody and pacing carry over; their individual sounds do not. Clone from a recording in the language you will mostly synthesize, and the prosody will fit that language best. - Expressive range comes from coverage, not length: one clip pins down one delivery. Use
--refine-voicewith a different sentence (a question, an emphatic line) to widen it.
vtmate self contains (no need for manual installation) the whisper tiny & small models, kokoro model and voices, supertonic2 model and voices and supertonic3 (Supertonic 3) model and voices which will be autoextracted from the binary when running vtmate if they are not found in next locations:
whisper models:
- `~/.whisper-models/ggml-tiny.bin`
- `~/.whisper-models/ggml-small-q5_1.bin`
kokoro model files:
~/.cache/k/0.onnx
~/.cache/k/0.bin
supertonic2 files:
~/.vtmate/tts/supertonic2-model/onnx/duration_predictor.onnx
~/.vtmate/tts/supertonic2-model/onnx/text_encoder.onnx
~/.vtmate/tts/supertonic2-model/onnx/tts.json
~/.vtmate/tts/supertonic2-model/onnx/unicode_indexer.json
~/.vtmate/tts/supertonic2-model/onnx/vector_estimator.onnx
~/.vtmate/tts/supertonic2-model/onnx/vocoder.onnx
~/.vtmate/tts/supertonic2-model/voice_styles/M1.json
~/.vtmate/tts/supertonic2-model/voice_styles/M2.json
~/.vtmate/tts/supertonic2-model/voice_styles/M3.json
~/.vtmate/tts/supertonic2-model/voice_styles/M4.json
~/.vtmate/tts/supertonic2-model/voice_styles/M5.json
~/.vtmate/tts/supertonic2-model/voice_styles/F1.json
~/.vtmate/tts/supertonic2-model/voice_styles/F2.json
~/.vtmate/tts/supertonic2-model/voice_styles/F3.json
~/.vtmate/tts/supertonic2-model/voice_styles/F4.json
~/.vtmate/tts/supertonic2-model/voice_styles/F5.json
supertonic3 files (Supertonic 3, https://huggingface.co/Supertone/supertonic-3):
~/.vtmate/tts/supertonic3-model/onnx/duration_predictor.onnx
~/.vtmate/tts/supertonic3-model/onnx/text_encoder.onnx
~/.vtmate/tts/supertonic3-model/onnx/tts.json
~/.vtmate/tts/supertonic3-model/onnx/unicode_indexer.json
~/.vtmate/tts/supertonic3-model/onnx/vector_estimator.onnx
~/.vtmate/tts/supertonic3-model/onnx/vocoder.onnx
~/.vtmate/tts/supertonic3-model/voice_styles/M1.json
~/.vtmate/tts/supertonic3-model/voice_styles/M2.json
~/.vtmate/tts/supertonic3-model/voice_styles/M3.json
~/.vtmate/tts/supertonic3-model/voice_styles/M4.json
~/.vtmate/tts/supertonic3-model/voice_styles/M5.json
~/.vtmate/tts/supertonic3-model/voice_styles/F1.json
~/.vtmate/tts/supertonic3-model/voice_styles/F2.json
~/.vtmate/tts/supertonic3-model/voice_styles/F3.json
~/.vtmate/tts/supertonic3-model/voice_styles/F4.json
~/.vtmate/tts/supertonic3-model/voice_styles/F5.json
- If you want to avoid sound interruptions you can use
pttmode or increase thesound_threshold_peakfor your microphone levels. - If you want to use OpenTTS, start the docker service first:
docker run --rm --platform=linux/amd64 -p 5500:5500 synesthesiam/opentts:all(it will pull the image the first time). Adjust the platform as needed depending on your hardware. - If you have problems starting vtmate you can remove
~/vtmate/settingsso it recreates the default configuration - By default whisper tiny is used (
~/.whisper-models/ggml-tiny.bin). For better speech recognition point thewhisper_model_pathsetting to the bundled 5-bit quantized small model~/.whisper-models/ggml-small-q5_1.bin, or download a bigger whisper model and point to it.
If you need help:
vtmate --help
Engines: ST2 Supertonic 2 (5 languages, 10 voices: M1-M5, F1-F5), ST3 Supertonic 3 (31 languages, its own 10 voices: M1-M5, F1-F5, usable in every one of its languages), KK Kokoro (8 languages), OpenTTS (external docker service). Total languages: 41.
| ID | Language | Support | TTS supported | Number of voices |
|---|---|---|---|---|
| en | ๐ฌ๐ง English | ๐ Best support | โ ST2 โ ST3 โ KK โ OpenTTS | > 48 voices |
| es | ๐ช๐ธ Spanish | ๐ Best support | โ ST2 โ ST3 โ KK โ OpenTTS | > 24 voices |
| fr | ๐ซ๐ท French | ๐ Best support | โ ST2 โ ST3 โ KK โ OpenTTS | > 22 voices |
| ja | ๐ฏ๐ต Japanese | ๐ Best support | โ ST2 โ ST3 โ KK โ OpenTTS | > 16 voices |
| pt | ๐ต๐น Portuguese | ๐ Best support | โ ST2 โ ST3 โ KK โ OpenTTS | > 23 voices |
| ko | ๐ฐ๐ท Korean | ๐ Best support | โ ST2 โ ST3 โ KK โ OpenTTS | 21 voices |
| it | ๐ฎ๐น Italian | ๐ Best support | โ ST2 โ ST3 โ KK โ OpenTTS | > 13 voices |
| hi | ๐ฎ๐ณ Hindi | ๐ Best support | โ ST2 โ ST3 โ KK โ OpenTTS | > 14 voices |
| zh | ๐จ๐ณ Mandarin Chinese | ๐ฅ Good support | โ ST2 โ ST3 โ KK โ OpenTTS | > 9 voices |
| ar | ๐ธ๐ฆ Arabic | ๐ฅ Good support | โ ST2 โ ST3 โ KK โ OpenTTS | 11 voices |
| cs | ๐จ๐ฟ Czech | ๐ฅ Good support | โ ST2 โ ST3 โ KK โ OpenTTS | 11 voices |
| de | ๐ฉ๐ช German | ๐ฅ Good support | โ ST2 โ ST3 โ KK โ OpenTTS | 11 voices |
| el | ๐ฌ๐ท Greek | ๐ฅ Good support | โ ST2 โ ST3 โ KK โ OpenTTS | 11 voices |
| fi | ๐ซ๐ฎ Finnish | ๐ฅ Good support | โ ST2 โ ST3 โ KK โ OpenTTS | 11 voices |
| hu | ๐ญ๐บ Hungarian | ๐ฅ Good support | โ ST2 โ ST3 โ KK โ OpenTTS | 11 voices |
| nl | ๐ณ๐ฑ Dutch | ๐ฅ Good support | โ ST2 โ ST3 โ KK โ OpenTTS | 11 voices |
| ru | ๐ท๐บ Russian | ๐ฅ Good support | โ ST2 โ ST3 โ KK โ OpenTTS | 11 voices |
| sv | ๐ธ๐ช Swedish | ๐ฅ Good support | โ ST2 โ ST3 โ KK โ OpenTTS | 11 voices |
| tr | ๐น๐ท Turkish | ๐ฅ Good support | โ ST2 โ ST3 โ KK โ OpenTTS | 11 voices |
| bg | ๐ง๐ฌ Bulgarian | Supported | โ ST2 โ ST3 โ KK โ OpenTTS | 10 voices |
| hr | ๐ญ๐ท Croatian | Supported | โ ST2 โ ST3 โ KK โ OpenTTS | 10 voices |
| da | ๐ฉ๐ฐ Danish | Supported | โ ST2 โ ST3 โ KK โ OpenTTS | 10 voices |
| et | ๐ช๐ช Estonian | Supported | โ ST2 โ ST3 โ KK โ OpenTTS | 10 voices |
| id | ๐ฎ๐ฉ Indonesian | Supported | โ ST2 โ ST3 โ KK โ OpenTTS | 10 voices |
| lv | ๐ฑ๐ป Latvian | Supported | โ ST2 โ ST3 โ KK โ OpenTTS | 10 voices |
| lt | ๐ฑ๐น Lithuanian | Supported | โ ST2 โ ST3 โ KK โ OpenTTS | 10 voices |
| pl | ๐ต๐ฑ Polish | Supported | โ ST2 โ ST3 โ KK โ OpenTTS | 10 voices |
| ro | ๐ท๐ด Romanian | Supported | โ ST2 โ ST3 โ KK โ OpenTTS | 10 voices |
| sk | ๐ธ๐ฐ Slovak | Supported | โ ST2 โ ST3 โ KK โ OpenTTS | 10 voices |
| sl | ๐ธ๐ฎ Slovenian | Supported | โ ST2 โ ST3 โ KK โ OpenTTS | 10 voices |
| uk | ๐บ๐ฆ Ukrainian | Supported | โ ST2 โ ST3 โ KK โ OpenTTS | 10 voices |
| vi | ๐ป๐ณ Vietnamese | Supported | โ ST2 โ ST3 โ KK โ OpenTTS | 10 voices |
| bn | ๐ง๐ฉ Bengali | Supported | โ ST2 โ ST3 โ KK โ OpenTTS | 1 voice |
| ca | ๐ช๐ธ Catalan | Supported | โ ST2 โ ST3 โ KK โ OpenTTS | 1 voice |
| gu | ๐ฎ๐ณ Gujarati | Supported | โ ST2 โ ST3 โ KK โ OpenTTS | 1 voice |
| kn | ๐ฎ๐ณ Kannada | Supported | โ ST2 โ ST3 โ KK โ OpenTTS | 1 voice |
| mr | ๐ฎ๐ณ Marathi | Supported | โ ST2 โ ST3 โ KK โ OpenTTS | 1 voice |
| pa | ๐ฎ๐ณ Punjabi | Supported | โ ST2 โ ST3 โ KK โ OpenTTS | 1 voice |
| sw | ๐ฐ๐ช Swahili | Supported | โ ST2 โ ST3 โ KK โ OpenTTS | 1 voice |
| ta | ๐ฎ๐ณ Tamil | Supported | โ ST2 โ ST3 โ KK โ OpenTTS | 1 voice |
| te | ๐ฎ๐ณ Telugu | Supported | โ ST2 โ ST3 โ KK โ OpenTTS | 1 voice |
Run vtmate --list-voices to print every voice for every language and TTS system.
Do you have GPU? (nvidia? an apple computer?) Great! then vtmate speed is at lighting speed =)
- To be able to use acceleration, pick the built version for your hardware from Releases list
- For CUDA install the CUDA Toolkit (12.x or 13.x) and cuDNN 9 (on Windows, put cuDNN's
bin\<cuda major>.xdirectory on PATH, or copy its DLLs next to the other vtmate libraries).installer.shchecks both are reachable and falls back to the Vulkan/CPU build otherwise. For Vulkan install VULKAN SDK
macOS: โ
CPU โ
Metal
Linux (amd64): โ
CPU โ
CUDA โ
Vulkan
Linux (arm64): โ
CPU โ CUDA โ
Vulkan
Windows (x86_64) โ
CPU โ
CUDA โ
Vulkan
Full configurable builds (OS, arch and GPU acceleration)
see:
build_linux.sh
build_macos.sh
build_windows.ps1
Have fun o:)





