MagicFrog supports voice input and spoken replies on both the desktop app and the web app. The speech chain never leaves your infrastructure: recognition and synthesis run on-device or on self-hosted endpoints you configure — no third-party speech cloud is involved.
Voice input (dictation)
Dictation captures your microphone and turns it into text in the composer.
- Two capture modes.
holdrecords until you stop it;endpointends the utterance automatically after a quiet gap (about 1.2 seconds) measured on the page. - Your own recognizer. Audio is sent to a self-hosted transcription endpoint speaking the OpenAI-audio request shape — local servers such as whisper.cpp server, faster-whisper, or LocalAI work as-is. The default endpoint is loopback (
http://127.0.0.1:8080). - Language and model hints. You can set a primary language subtag (for example
zhoren); omit the model to let the endpoint use its default. - Cancellable. Requests have a timeout cap, so a stuck endpoint cannot hang the composer.
Browser cloud recognition is not supported — it would send your audio to the browser vendor's cloud.

The screenshot shows the real Voice section of the web app's Settings → Preferences page: speech engine selection, the transcription endpoint, and the dictation language.
Spoken replies (text-to-speech)
Agent replies can be read aloud, with a global switch and a per-session override (a per-session recorded value wins over the global one).
Two synthesis engines, both inside the same boundary:
- System voices — the local voices built into your device.
- Self-hosted endpoint — a synthesis server you run, also speaking the OpenAI-audio shape (default loopback
http://127.0.0.1:8000).
Long replies are spoken in chunks so playback starts fast, a caption shows what is being read, and each message is announced at most once — streaming updates or restoring a tab never cause double speech.
Desktop and web
The same feature works on desktop and in the browser:
| Capability | Desktop (Electron) | Web (browser) |
|---|---|---|
| Microphone capture | Yes | Yes |
| System-voice playback | Yes | Yes |
Loopback http:// endpoints |
Allowed | Allowed on http:// origins; rejected up front on https:// pages (mixed content) |
The web app checks up front and refuses an http loopback endpoint on a secure page before you record, instead of failing mid-recording.
Hands-free conversation
A voice session is a continuous conversation — listening, thinking, speaking — with a mute control and a running exchange transcript.
The microphone stays closed while a reply plays and reopens about 0.6 seconds after it ends — the assistant never hears itself.
Privacy boundary
Nothing in the voice chain names a third-party speech cloud. The engines may only reach your own loopback or self-hosted endpoints and the on-device speech stack.
Voice settings persist locally per app install: dictation language, both endpoints and models, the synthesis engine, the global speak-replies switch, and per-session overrides.