Voice
Two independent halves: dictating into the composer, and hearing replies read out. Each one depends on what the machine running the core actually has installed, and each control tells you when it is missing something.
Dictating
The microphone button sits in the composer's toolbar, next to 📎.
- Press it. It turns red and shows
RECwith the elapsed time. - Say what you want.
- Press it again. It reads
transcribing…while the backend works. - The transcript lands in the composer, appended to whatever you had already typed.
It is never sent for you. Read it, fix it, press Enter — dictation writes the message, you send it.
Where the recording happens
If the core's machine has a recorder (arecord, sox, and friends), the core records. If it does not, this window records with the browser's own microphone API and posts the audio to the core to be transcribed. You do not choose; the app asks audio.capabilities and takes whichever is available. The second case asks for microphone permission the first time.
Either way, the microphone is released as soon as you stop.
When the button is greyed out
A disabled mic still tells you why — hover it. There are two reasons it can give:
- "This core was built without audio support." The core itself has no voice features at all. Nothing on this page will work; you need a newer core.
- A missing backend, usually transcription: the core needs something like
whisperorfaster-whisperon the machine it runs on. Install one, restart the core, and the button lights up.
Note that it is transcription that gates the button, not recording. A machine with no recorder can still dictate, because this window can record instead — and if the core's microphone disappears between launch and your click, the recording quietly happens here rather than failing.
When a backend turns out to be gone, the app re-checks what is available and disables the control with the reason attached, so a button never keeps offering something that will fail again.
Hearing replies
The speaker button in the thread header toggles spoken replies. While it is on, every finished assistant message is read aloud. A Stop button appears next to it while something is being synthesised or played.
The same split applies: when the core's machine has a player it plays the audio itself, and otherwise the audio comes back to this window and plays here. As with the mic, a disabled speaker says why it is disabled — usually a missing speech backend.
Switching the toggle off stops whatever is playing.
Settings
Settings has an Audio card with the choices that persist:
| Field | What it does |
|---|---|
| Transcription | Which speech-to-text backend to use |
| Speech | Which text-to-speech backend to use |
| Voice | The voice id, which depends on the backend |
| Speak replies automatically | New threads open with the speaker already on |
Both provider selects start with core's choice, which means "do not pin anything — use whatever the core prefers". The current preference is named in brackets so you can see what that is. Test voice speaks one short line so you can hear a voice before committing to it.
These settings are global, not per project: which backends are installed and which voice you like do not change when you open a different repository.