> ## Documentation Index
> Fetch the complete documentation index at: https://docs.getbased.health/llms.txt
> Use this file to discover all available pages before exploring further.

# Use voice in AI chat

> Dictate chat messages and listen to AI replies with on-device models, a compatible server, an existing AI-provider connection, xAI, or ElevenLabs.

Voice lets you speak into the chat composer and hear assistant replies read aloud. Voice processing is a separate operation from generating the chat answer, but **Same as chat** can reuse a supported OpenRouter, PPQ, or Venice connection for both dictation and speech.

You can keep voice processing in this browser after a one-time model download, connect an OpenAI-compatible voice server you control, reuse a supported AI-provider account, or use xAI or ElevenLabs with a separate voice key.

## Choose where voice is processed

Open **Settings → Voice**, then choose one service for dictation and spoken replies.

| Voice service | Dictation | Spoken replies | What leaves this browser device |
| - | -: | -: | - |
| **Same as chat** | Yes | Yes | Uses OpenRouter, PPQ, or Venice directly when that active AI provider is connected; otherwise falls back to **On this device** |
| **On this device** | Yes | Yes | Nothing for the voice operation after the model files are downloaded |
| **Local voice server** | Yes | Yes | The recording or reply text goes directly to the server URL you configure |
| **OpenRouter / PPQ / Venice** | Yes | Yes | The requested recording or reply text goes directly to that provider using the account key already saved in **Settings → AI** |
| **xAI** | Yes | Yes | The requested recording or reply text and voice credential go directly from your browser to xAI |
| **ElevenLabs** | Yes | Yes | The requested recording or reply text and voice credential go directly from your browser to ElevenLabs |

<Note>
  Voice processing and AI chat are two separate steps. Dictation first places a transcript in the composer so you can review it. When you send that message, your configured AI provider receives it together with the enabled chat context described in [AI chat](/guides/ai-chat#what-the-ai-knows).
</Note>

## Set up on-device voice

On-device voice is the most private explicit option and the fallback when **Same as chat** cannot use the active AI provider. Models run in a browser worker and are downloaded only when you explicitly request them.

<Steps>
  <Step title="Open Voice settings">
    Open **Settings → Voice** and choose **On this device** under **Where voice is processed**.
  </Step>

  <Step title="Choose transcription quality">
    **Whisper Small** is the recommended balance of speed and accuracy and downloads about 260 MB. **Whisper Large v3 Turbo** may be more accurate, but downloads about 770 MB and needs more memory.
  </Step>

  <Step title="Choose processing hardware">
    Keep **Automatic** unless you are troubleshooting. getbased can use your main processor or WebGPU-capable graphics processor and remembers measured performance after use.
  </Step>

  <Step title="Download the models you need">
    Under **Built-in local models**, click **Download** for transcription, speech, or both. The Kokoro speech model is about 95 MB for main-processor use; its graphics-processor assets are larger.
  </Step>

  <Step title="Choose a voice">
    Select an American or British English voice and adjust the speaking speed. On-device spoken replies currently support English. On-device Whisper supports multilingual dictation.
  </Step>
</Steps>

Model files are stored as rebuildable browser caches. They are not included in sync or backups, and your browser may remove them when storage is scarce. If that happens, getbased asks you to download the model again before the next voice action.

## Dictate a message

<Steps>
  <Step title="Start recording">
    Open chat and click or tap the **microphone** beside the composer. The first use asks for browser microphone permission.
  </Step>

  <Step title="Speak, then stop">
    Tap the microphone again when you are finished. A recording can run for up to five minutes; getbased stops and transcribes it automatically at that limit.
  </Step>

  <Step title="Review before sending">
    The transcript is inserted at the cursor in the composer. Edit it as needed, then send it like any typed message.
  </Step>
</Steps>

The microphone recording is held only for the active transcription operation. getbased does not add the raw recording to chat history or profile storage.

## Listen to replies

Choose **Listen** under an assistant reply to generate and play speech. Choose **Stop** to end playback.

To hear every new reply while chat is open, enable **Read new replies automatically** in **Settings → Voice**. Browsers normally require one direct playback action before allowing automatic audio, so tap **Listen** once after enabling it.

Closing chat, changing threads, leaving the page, starting a recording, or choosing another reply stops stale playback. A reply is read only in the thread where the request started.

## Use different services for dictation and listening

Enable **Use different services for dictation and listening** in **Settings → Voice** when one service does not fit both jobs. For example, you can keep dictation on-device while using a cloud voice for spoken replies.

Each operation follows its own privacy boundary:

* the dictation service receives the microphone recording;
* the spoken-replies service receives only the assistant reply being read;
* neither voice operation automatically receives your full profile or complete chat history.

## Connect a compatible voice server

Choose **Local voice server** to connect directly from the browser to a server you control. Compatible servers need these OpenAI-style endpoints:

* `POST /v1/audio/transcriptions` for dictation;
* `POST /v1/audio/speech` for spoken replies;
* `GET /v1/models` for the connection test.

In **Settings → Voice → Connections → OpenAI-compatible local server**, enter the base URL, optional API key, model names, and voice identifier expected by your server. Examples include Whisper.cpp, LocalAI, and Speaches when configured with the required endpoints.

<Warning>
  “Local voice server” means a direct compatible connection, not necessarily inference on this browser device. A LAN or remote URL receives the recording or reply text. Use HTTPS or a trusted encrypted tunnel for any connection that leaves your device, and make sure the server allows browser requests from the getbased origin.
</Warning>

## Reuse an AI provider or connect xAI or ElevenLabs

Choose **Same as chat** to reuse OpenRouter, PPQ, or Venice when the active provider is connected in **Settings → AI**. You can also select one of those providers explicitly for voice. OpenRouter exposes compatible transcription and speech model choices; PPQ and Venice use their supported audio endpoints and voice catalogs.

Routstr, Custom API, Local AI, and **CLI agents** do not currently supply the automatic voice path. **Same as chat** falls back to the browser models for those providers, even if a different cloud AI account is saved. CLI image support does not imply audio support. To send audio to another provider or compatible endpoint, choose that voice service explicitly; to use your own endpoint, select **Local voice server** separately.

Expand the provider under **Settings → Voice → Connections**, paste a voice API key, then click **Save key** and **Test connection**. Refresh the voice list before choosing a hosted voice.

Cloud voice requests go directly from your browser to OpenRouter, PPQ, Venice, xAI, or ElevenLabs. The provider must permit the browser request and applies its own pricing, retention, and account policies; getbased does not retry a failed direct request through its servers. A provider's private or TEE chat mode does not automatically protect its separate voice endpoint.

Before the first request to a cloud voice recipient, getbased asks for explicit, provider-specific approval. If you decline, no request is sent. The approval covers later cloud AI and voice actions you initiate with that recipient; withdraw it at any time in **Settings → Privacy**.

Voice credentials are never deliberately stored as plaintext. With passphrase protection off, getbased wraps supported keys with a non-exportable key held by that browser. With passphrase protection on, it protects them with the passphrase-derived key. If device protection is unavailable, getbased keeps a new key in memory for the session instead of persisting it unprotected.

Sync carries the sync-scoped voice preferences plus the supported OpenRouter, PPQ, Venice, xAI, and ElevenLabs keys inside its end-to-end encrypted payload. On the receiving browser, synced keys are wrapped again by that browser's current device or passphrase protection. The compatible-server URL and optional key are device-scoped and are not synced. Full database and folder backups are different: they omit device-key-wrapped credentials when passphrase protection is off, and include supported credentials only as passphrase-encrypted values when it is on. See [Voice privacy and storage](/guides/privacy#voice-processing) for the full boundary.

## Troubleshooting

<AccordionGroup>
  <Accordion title="The browser denied microphone access">
    Allow microphone access for the getbased site in your browser's site settings, then try the microphone again. Voice capture requires a secure browser context, such as the hosted HTTPS app or `localhost` during development.
  </Accordion>

  <Accordion title="On-device Voice asks for a model download">
    Open **Settings → Voice → Built-in local models** and download the model for the action you want. Browser storage cleanup can remove cached model files even when the previous installation marker still exists; getbased verifies the cache before use.
  </Accordion>

  <Accordion title="Graphics processing is unavailable or unreliable">
    Set **Processing** to **Automatic** or **Main processor (CPU)**. WebGPU availability depends on the browser, operating system, graphics driver, and device.
  </Accordion>

  <Accordion title="Automatic reading does not start">
    Tap **Listen** on one assistant reply to grant playback activation in that browser. Automatic reading works only while chat is open.
  </Accordion>

  <Accordion title="A cloud voice is missing">
    Open its connection card in **Settings → Voice**, test the key, then click **Refresh voices**. ElevenLabs requires a selected voice before it can read replies.
  </Accordion>

  <Accordion title="A compatible server does not connect">
    Confirm the base URL, optional bearer key, and the three supported endpoints. Also check HTTPS mixed-content rules and the server's CORS configuration.
  </Accordion>
</AccordionGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.