> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.jambonz.org/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.jambonz.org/_mcp/server.

# KugelAudio

KugelAudio tuning is passed in `synthesizer.options`.

```json
{
  "verb": "say",
  "text": "Thanks for calling, how can I help you today?",
  "synthesizer": {
    "vendor": "kugelaudio",
    "language": "en-US",
    "voice": "1071",
    "options": {
      "speed": 1.0,
      "cfg_scale": 2.0,
      "normalize": true
    }
  }
}
```

You can also set these in the portal under **Extra Options** on the speech credential. Credential settings apply to streamed TTS, such as an [agent](/verbs/verbs/agent)'s replies, with settings on the verb taking precedence; a `say` verb uses only the options on the verb.

The `voice` value is a KugelAudio voice id, which is numeric (for example `1071`). The model defaults to `kugel-3`.

## Options

**`speed`** `number`

Speaking rate. Defaults to `1.0`. Values above `1.0` are faster, below are slower.

---

**`cfg_scale`** `number`

Guidance scale — how closely the read follows the voice. Defaults to `2.0`.

---

**`temperature`** `number`

Sampling temperature. Lower values give a more consistent read; higher values more variation between renders of the same text.

---

**`normalize`** `boolean`

Expand numbers, dates and abbreviations before synthesis. Defaults to `true`. Normalization follows the request language.

---

**`project_id`** `number`

KugelAudio project the request is billed and filed under.

---

**`dictionary_ids`** `array`

Ids of the pronunciation dictionaries to apply, as an array of numbers. An empty array `[]` means "no dictionaries", which is different from leaving the field out.

---

## Language

jambonz sends only the primary subtag of `language` (`de-DE` is sent as `de`), and only when KugelAudio supports it. An unsupported or empty language is left out, so the voice's own language applies.

## Endpoint override

Set `api_uri` in `options` (on the credential's **Extra Options** it applies to streamed TTS only) to use a different KugelAudio host, for example `api.eu.kugelaudio.com` to pin the EU region. Leave it out to use `api.kugelaudio.com`.

## Streaming

KugelAudio supports [TTS streaming](/guides/features/tts-streaming). It returns word timestamps, so when a caller barges in on an [agent](/verbs/verbs/agent), the assistant turn is trimmed to what the caller actually heard.