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

# Languages and Voices

> Supported `language` and `voice` values for `generation_config`.

## Supported Languages

Pass any of these BCP-47 codes as the `language` field in `generation_config`. Default is `en-US`.

<Accordion title="53 language codes">
  | Code     | Language                 |
  | -------- | ------------------------ |
  | `en-US`  | English (US)             |
  | `en-GB`  | English (UK)             |
  | `en-AU`  | English (Australia)      |
  | `en-IN`  | English (India)          |
  | `es-US`  | Spanish (US)             |
  | `es-ES`  | Spanish (Spain)          |
  | `fr-FR`  | French (France)          |
  | `fr-CA`  | French (Canada)          |
  | `de-DE`  | German                   |
  | `it-IT`  | Italian                  |
  | `pt-BR`  | Portuguese (Brazil)      |
  | `pt-PT`  | Portuguese (Portugal)    |
  | `nl-NL`  | Dutch                    |
  | `nl-BE`  | Dutch (Belgium)          |
  | `pl-PL`  | Polish                   |
  | `ru-RU`  | Russian                  |
  | `tr-TR`  | Turkish                  |
  | `uk-UA`  | Ukrainian                |
  | `bg-BG`  | Bulgarian                |
  | `hr-HR`  | Croatian                 |
  | `cs-CZ`  | Czech                    |
  | `et-EE`  | Estonian                 |
  | `el-GR`  | Greek                    |
  | `hu-HU`  | Hungarian                |
  | `lv-LV`  | Latvian                  |
  | `lt-LT`  | Lithuanian               |
  | `ro-RO`  | Romanian                 |
  | `sr-RS`  | Serbian (Cyrillic)       |
  | `sk-SK`  | Slovak                   |
  | `sl-SI`  | Slovenian                |
  | `da-DK`  | Danish                   |
  | `fi-FI`  | Finnish                  |
  | `nb-NO`  | Norwegian                |
  | `sv-SE`  | Swedish                  |
  | `he-IL`  | Hebrew                   |
  | `ar-XA`  | Arabic (Modern Standard) |
  | `hi-IN`  | Hindi                    |
  | `bn-IN`  | Bengali (India)          |
  | `gu-IN`  | Gujarati (India)         |
  | `kn-IN`  | Kannada (India)          |
  | `ml-IN`  | Malayalam (India)        |
  | `mr-IN`  | Marathi (India)          |
  | `pa-IN`  | Punjabi (India)          |
  | `ta-IN`  | Tamil (India)            |
  | `te-IN`  | Telugu (India)           |
  | `ur-IN`  | Urdu (India)             |
  | `id-ID`  | Indonesian               |
  | `ja-JP`  | Japanese                 |
  | `ko-KR`  | Korean                   |
  | `cmn-CN` | Mandarin Chinese         |
  | `th-TH`  | Thai                     |
  | `vi-VN`  | Vietnamese               |
  | `sw-KE`  | Swahili (Kenya)          |
</Accordion>

## Supported Voices

Pass any of these IDs as the `voice` field in `generation_config` (audio and video endpoints). Default is `Achernar`.

Pick a language to see the voices available for it. Most languages are supported by all 30 Chirp voices, plus a single English-only `Robotic` voice.

export const VOICES = [
  ['Achernar', 'Female'], ['Aoede', 'Female'], ['Autonoe', 'Female'], ['Callirrhoe', 'Female'],
  ['Despina', 'Female'], ['Erinome', 'Female'], ['Gacrux', 'Female'], ['Kore', 'Female'],
  ['Laomedeia', 'Female'], ['Leda', 'Female'], ['Pulcherrima', 'Female'], ['Sulafat', 'Female'],
  ['Vindemiatrix', 'Female'], ['Zephyr', 'Female'],
  ['Achird', 'Male'], ['Algenib', 'Male'], ['Algieba', 'Male'], ['Alnilam', 'Male'],
  ['Charon', 'Male'], ['Enceladus', 'Male'], ['Fenrir', 'Male'], ['Iapetus', 'Male'],
  ['Orus', 'Male'], ['Puck', 'Male'], ['Rasalgethi', 'Male'], ['Sadachbia', 'Male'],
  ['Sadaltager', 'Male'], ['Schedar', 'Male'], ['Umbriel', 'Male'], ['Zubenelgenubi', 'Male'],
  ['Robotic', 'Female'],
]

export const RU_ONLY_VOICES = new Set([
  'Aoede','Charon','Fenrir','Kore','Leda','Orus','Puck','Zephyr',
])

export const EN_US_ONLY_VOICES = new Set(['Robotic'])

export const LANGUAGES = [
  ['en-US','English (US)'],['en-GB','English (UK)'],['en-AU','English (Australia)'],['en-IN','English (India)'],
  ['es-US','Spanish (US)'],['es-ES','Spanish (Spain)'],['fr-FR','French (France)'],['fr-CA','French (Canada)'],
  ['de-DE','German'],['it-IT','Italian'],['pt-BR','Portuguese (Brazil)'],['pt-PT','Portuguese (Portugal)'],
  ['nl-NL','Dutch'],['nl-BE','Dutch (Belgium)'],['pl-PL','Polish'],['ru-RU','Russian'],['tr-TR','Turkish'],
  ['uk-UA','Ukrainian'],['bg-BG','Bulgarian'],['hr-HR','Croatian'],['cs-CZ','Czech'],['et-EE','Estonian'],
  ['el-GR','Greek'],['hu-HU','Hungarian'],['lv-LV','Latvian'],['lt-LT','Lithuanian'],['ro-RO','Romanian'],
  ['sr-RS','Serbian (Cyrillic)'],['sk-SK','Slovak'],['sl-SI','Slovenian'],['da-DK','Danish'],['fi-FI','Finnish'],
  ['nb-NO','Norwegian'],['sv-SE','Swedish'],['he-IL','Hebrew'],['ar-XA','Arabic (Modern Standard)'],
  ['hi-IN','Hindi'],['bn-IN','Bengali (India)'],['gu-IN','Gujarati (India)'],['kn-IN','Kannada (India)'],
  ['ml-IN','Malayalam (India)'],['mr-IN','Marathi (India)'],['pa-IN','Punjabi (India)'],['ta-IN','Tamil (India)'],
  ['te-IN','Telugu (India)'],['ur-IN','Urdu (India)'],['id-ID','Indonesian'],['ja-JP','Japanese'],
  ['ko-KR','Korean'],['cmn-CN','Mandarin Chinese'],['th-TH','Thai'],['vi-VN','Vietnamese'],['sw-KE','Swahili (Kenya)'],
]

export const VoiceFinder = () => {
  const [lang, setLang] = React.useState('en-US')

  const supported = React.useMemo(() => {
    const enOnly = (name) => EN_US_ONLY_VOICES.has(name)
    if (lang === 'en-US') {
      return VOICES
    }
    if (lang === 'ru-RU') {
      return VOICES.filter(([name]) => RU_ONLY_VOICES.has(name) && !enOnly(name))
    }
    if (lang === 'nl-BE' || lang === 'uk-UA' || lang === 'ur-IN') {
      return VOICES.filter(([name]) => !RU_ONLY_VOICES.has(name) && !enOnly(name))
    }
    return VOICES.filter(([name]) => !enOnly(name))
  }, [lang])

  const female = supported.filter(([, g]) => g === 'Female').map(([n]) => n)
  const male = supported.filter(([, g]) => g === 'Male').map(([n]) => n)

  return (
    <div style={{ marginTop: '1rem' }}>
      <label style={{ display: 'block', fontWeight: 600, marginBottom: '0.5rem' }}>
        Language
      </label>
      <select
        value={lang}
        onChange={(e) => setLang(e.target.value)}
        style={{
          padding: '0.5rem 0.75rem',
          borderRadius: '0.5rem',
          border: '1px solid var(--border, #e5e7eb)',
          background: 'var(--background, transparent)',
          fontSize: '0.95rem',
          minWidth: '260px',
        }}
      >
        {LANGUAGES.map(([code, label]) => (
          <option key={code} value={code}>
            {label} ({code})
          </option>
        ))}
      </select>

      <div style={{ marginTop: '1rem', fontSize: '0.9rem', opacity: 0.8 }}>
        {supported.length} of 31 voices support {lang}.
      </div>

      <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '1rem', marginTop: '0.75rem' }}>
        <div>
          <div style={{ fontWeight: 600, marginBottom: '0.5rem' }}>
            Female ({female.length})
          </div>
          <ul style={{ margin: 0, paddingLeft: '1.1rem' }}>
            {female.map((n) => (
              <li key={n}><code>{n}</code>{n === 'Achernar' ? ' (default)' : ''}</li>
            ))}
          </ul>
        </div>
        <div>
          <div style={{ fontWeight: 600, marginBottom: '0.5rem' }}>
            Male ({male.length})
          </div>
          <ul style={{ margin: 0, paddingLeft: '1.1rem' }}>
            {male.map((n) => (
              <li key={n}><code>{n}</code></li>
            ))}
          </ul>
        </div>
      </div>
    </div>
  )
}

<VoiceFinder />

<Tip>
  To preview each voice, open the [dashboard](https://viddyscribe.com/dashboard) and use the voice picker, every option has an inline play button.
</Tip>
