Skip to main content
Documentation menu

Features

Voice input

Dictate a prompt instead of typing it. In the TUI press ctrl+space (or run /voice): the footer shows a red recording indicator with the elapsed time. Press ctrl+space again, or just stop talking for two seconds, and the transcript is inserted into the prompt for you to review and edit; it is never sent on its own. esc discards the recording. (On macOS, ctrl+space may be bound to "Select the previous input source" in System Settings → Keyboard → Keyboard Shortcuts; turn that off or use /voice.)

Recording uses ffmpeg (AVFoundation on macOS, PulseAudio or ALSA on Linux, DirectShow on Windows), or sox's rec; install one (brew install ffmpeg). Your terminal needs microphone access (macOS asks the first time). Recordings are 16 kHz mono WAV temp files, readable only by you and deleted as soon as they are transcribed.

Transcription is local by default: whisper.cpp (brew install whisper-cpp, which provides whisper-cli) with a model in ~/.chanto/voice/:

sh
mkdir -p ~/.chanto/voice
curl -L -o ~/.chanto/voice/ggml-base.en.bin \
  https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-base.en.bin

OpenAI's Python whisper command works too (whisper_bin = "whisper"; whisper_model is then a model name such as base).

Audio is sent to a hosted service only if you configure one: any OpenAI-compatible /audio/transcriptions endpoint, with the credentials Chanto already uses for that provider (chanto login, or its key variable):

toml
[voice]
backend = "auto"        # auto: whisper.cpp if installed, else the hosted endpoint below (if set)
                        # local | hosted | off
provider = "groq"       # or "openai", or a [providers.<name>] entry
# base_url = "https://api.example.com/v1"   # any OpenAI-compatible server
# api_key = "..."
# model = "whisper-large-v3-turbo"          # default: whisper-1 (OpenAI), whisper-large-v3-turbo (Groq)
language = "en"         # default: detected
# whisper_bin = "/opt/homebrew/bin/whisper-cli"
# whisper_model = "~/.chanto/voice/ggml-small.en.bin"
# device = ":1"         # ffmpeg input (macOS ":default", Linux "default", Windows: the DirectShow name)
silence_secs = 2.0      # stop after this much silence following speech; 0 = only on the key
max_secs = 120

[voice] is read only from your own config (and trusted projects): a repository can't redirect your audio. The server's GET /voice reports whether dictation is available and POST /voice/transcribe (bearer token; the body is the audio, any format ffmpeg reads) returns {"text": ...}.

Edit this page on GitHub Report a problem

Commands, settings, errors: type a few words.