Files
church-translate/app/voice-catalog.js
T
christianandClaude Opus 5 c9eef0672c Church Translate, as it runs at the campuses
Live sermon translation into 100+ languages, running entirely on one Mac per
campus: audio in, voice detection, Whisper on the GPU, NLLB-200 in its own
process, and a built-in web server the congregation reads from on their
phones. No audio leaves the building.

This is the source only. What used to sit beside it — 14 GB of speech and
translation models, 8 GB of voice bundles, 6 GB of natural voices, the Electron
caches, and the app data holding the operator PIN and every service transcript
— is machine state and downloaded assets, and stays in the NAS backup where it
belongs. The vendored node, cloudflared and Windows ffmpeg binaries are out too
(533 MB, re-fetched for packaging); the browser-side runtime beside them is
kept, so a checkout still serves the congregation page.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-23 15:41:21 -04:00

1601 lines
41 KiB
JavaScript

/*
* voice-catalog.js — every voice the operator can audition and choose,
* per language. Generated from the sherpa-onnx tts-models release plus the
* local engine's speaker list; ships with the app so the picker works offline
* (choosing a built-in voice still downloads it once, ~60-200MB).
*
* 'builtin' = an offline sherpa/Piper bundle. Downloaded on first use.
* 'local' = a speaker of the on-device premium engine. No download, instant.
* Cloud voices are not listed: their ids come from the provider's own library
* and are typed in on the Premium voices card.
*/
(function (root, factory) {
if (typeof module === 'object' && module.exports) module.exports = factory();
else root.VoiceCatalog = factory();
}(typeof self !== 'undefined' ? self : this, function () {
'use strict';
const CATALOG = {
"eng_Latn": [
{
"engine": "kokoro",
"speaker": "am_michael",
"label": "Michael · male (Kokoro)",
"gender": "male"
},
{
"engine": "kokoro",
"speaker": "af_heart",
"label": "Heart · female (Kokoro)",
"gender": "female"
},
{
"engine": "builtin",
"bundle": "vits-piper-en_US-ryan-high",
"model": "en_US-ryan-high.onnx",
"label": "ryan · high (en_US)",
"gender": "male",
"hz": 143.3
},
{
"engine": "builtin",
"bundle": "vits-piper-en_US-miro-high",
"model": "en_US-miro-high.onnx",
"label": "miro · high (en_US)",
"gender": "male",
"hz": 94.8
},
{
"engine": "builtin",
"bundle": "vits-piper-en_US-kristin-medium",
"model": "en_US-kristin-medium.onnx",
"label": "kristin · medium (en_US)",
"gender": "male",
"hz": 141.8
},
{
"engine": "builtin",
"bundle": "vits-piper-en_US-norman-medium",
"model": "en_US-norman-medium.onnx",
"label": "norman · medium (en_US)",
"gender": "male",
"hz": 98.4
},
{
"engine": "builtin",
"bundle": "vits-piper-en_US-reza_ibrahim-medium",
"model": "en_US-reza_ibrahim-medium.onnx",
"label": "reza_ibrahim · medium (en_US)",
"gender": "male",
"hz": 110.6
},
{
"engine": "builtin",
"bundle": "vits-piper-en_US-l2arctic-medium",
"model": "en_US-l2arctic-medium.onnx",
"label": "l2arctic · medium (en_US)",
"gender": "male",
"hz": 144.6
},
{
"engine": "builtin",
"bundle": "vits-piper-en_US-kusal-medium",
"model": "en_US-kusal-medium.onnx",
"label": "kusal · medium (en_US)",
"gender": "male",
"hz": 103.4
},
{
"engine": "builtin",
"bundle": "vits-piper-en_US-john-medium",
"model": "en_US-john-medium.onnx",
"label": "john · medium (en_US)",
"gender": "male",
"hz": 110.3
},
{
"engine": "builtin",
"bundle": "vits-piper-en_US-joe-medium",
"model": "en_US-joe-medium.onnx",
"label": "joe · medium (en_US)",
"gender": "male",
"hz": 96.9
},
{
"engine": "builtin",
"bundle": "vits-piper-en_US-hfc_male-medium",
"model": "en_US-hfc_male-medium.onnx",
"label": "hfc_male · medium (en_US)",
"gender": "male",
"hz": 122.7
},
{
"engine": "builtin",
"bundle": "vits-piper-en_US-sam-medium",
"model": "en_US-sam-medium.onnx",
"label": "sam · medium (en_US)",
"gender": "male",
"hz": 132.4
},
{
"engine": "builtin",
"bundle": "vits-piper-en_US-ryan-medium",
"model": "en_US-ryan-medium.onnx",
"label": "ryan · medium (en_US)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-piper-en_US-lessac-medium",
"model": "en_US-lessac-medium.onnx",
"label": "lessac · medium (en_US)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-piper-en_US-bryce-medium",
"model": "en_US-bryce-medium.onnx",
"label": "bryce · medium (en_US)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-piper-en_US-arctic-medium",
"model": "en_US-arctic-medium.onnx",
"label": "arctic · medium (en_US)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-piper-en_US-amy-medium",
"model": "en_US-amy-medium.onnx",
"label": "amy · medium (en_US)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-icefall-en_US-ljspeech-medium",
"model": "model.onnx",
"label": "vits-icefall-en_US-ljspeech-medium",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-piper-en_US-amy-low",
"model": "en_US-amy-low.onnx",
"label": "amy · low (en_US)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-piper-en_US-kathleen-low",
"model": "en_US-kathleen-low.onnx",
"label": "kathleen · low (en_US)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-piper-en_US-danny-low",
"model": "en_US-danny-low.onnx",
"label": "danny · low (en_US)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-piper-en_US-lessac-low",
"model": "en_US-lessac-low.onnx",
"label": "lessac · low (en_US)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-piper-en_US-ryan-low",
"model": "en_US-ryan-low.onnx",
"label": "ryan · low (en_US)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-icefall-en_US-ljspeech-low",
"model": "model.onnx",
"label": "vits-icefall-en_US-ljspeech-low",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-piper-en_US-glados",
"model": "en_US-glados.onnx",
"label": "glados (en_US)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-piper-en_US-glados-high",
"model": "en_US-glados-high.onnx",
"label": "glados · high (en_US) · borderline",
"gender": "ambiguous",
"hz": 168.5
},
{
"engine": "builtin",
"bundle": "vits-piper-en_GB-miro-high",
"model": "en_GB-miro-high.onnx",
"label": "miro · high (en_GB)",
"gender": "male",
"hz": 101
},
{
"engine": "builtin",
"bundle": "vits-piper-en_GB-northern_english_male-medium",
"model": "en_GB-northern_english_male-medium.onnx",
"label": "northern_english_male · medium (en_GB)",
"gender": "male",
"hz": 94.3
},
{
"engine": "builtin",
"bundle": "vits-piper-en_GB-alan-medium",
"model": "en_GB-alan-medium.onnx",
"label": "alan · medium (en_GB)",
"gender": "male",
"hz": 104
},
{
"engine": "builtin",
"bundle": "vits-piper-en_GB-southern_english_male-medium",
"model": "en_GB-southern_english_male-medium.onnx",
"label": "southern_english_male · medium (en_GB)",
"gender": "male",
"hz": 90.3
},
{
"engine": "builtin",
"bundle": "vits-piper-en_GB-jenny_dioco-medium",
"model": "en_GB-jenny_dioco-medium.onnx",
"label": "jenny_dioco · medium (en_GB)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-piper-en_GB-cori-medium",
"model": "en_GB-cori-medium.onnx",
"label": "cori · medium (en_GB)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-piper-en_GB-aru-medium",
"model": "en_GB-aru-medium.onnx",
"label": "aru · medium (en_GB)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-piper-en_GB-alba-medium",
"model": "en_GB-alba-medium.onnx",
"label": "alba · medium (en_GB)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-piper-en_GB-semaine-medium",
"model": "en_GB-semaine-medium.onnx",
"label": "semaine · medium (en_GB)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-piper-en_GB-vctk-medium",
"model": "en_GB-vctk-medium.onnx",
"label": "vctk · medium (en_GB)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-piper-en_GB-alan-low",
"model": "en_GB-alan-low.onnx",
"label": "alan · low (en_GB)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-piper-en_GB-sweetbbak-amy",
"model": "en_GB-sweetbbak-amy.onnx",
"label": "sweetbbak · amy (en_GB)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-coqui-en-ljspeech",
"model": "model.onnx",
"label": "ljspeech (en)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-coqui-en-ljspeech-neon",
"model": "model.onnx",
"label": "ljspeech · neon (en)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-coqui-en-vctk",
"model": "model.onnx",
"label": "vctk (en)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "kitten-nano-en-v0_8-fp32",
"model": "model.onnx",
"label": "kitten-nano-en-v0_8-fp32",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "kitten-micro-en-v0_8",
"model": "model.onnx",
"label": "kitten-micro-en-v0_8",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "kitten-mini-en-v0_8",
"model": "model.onnx",
"label": "kitten-mini-en-v0_8",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-inflect-en-nano-v2",
"model": "model.onnx",
"label": "vits-inflect-en-nano-v2",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-inflect-en-micro-v2",
"model": "model.onnx",
"label": "vits-inflect-en-micro-v2",
"gender": "unknown",
"hz": 0
}
],
"spa_Latn": [
{
"engine": "kokoro",
"speaker": "em_alex",
"label": "Alex · male (Kokoro)",
"gender": "male"
},
{
"engine": "kokoro",
"speaker": "em_santa",
"label": "Santa · male (Kokoro)",
"gender": "male"
},
{
"engine": "kokoro",
"speaker": "ef_dora",
"label": "Dora · female (Kokoro)",
"gender": "female"
},
{
"engine": "builtin",
"bundle": "vits-piper-es_MX-ald-medium",
"model": "es_MX-ald-medium.onnx",
"label": "ald · medium (es_MX) · borderline",
"gender": "ambiguous",
"hz": 152.3
},
{
"engine": "builtin",
"bundle": "vits-piper-es_ES-miro-high",
"model": "es_ES-miro-high.onnx",
"label": "miro · high (es_ES)",
"gender": "male",
"hz": 94.7
},
{
"engine": "builtin",
"bundle": "vits-piper-es_ES-sharvard-medium",
"model": "es_ES-sharvard-medium.onnx",
"label": "sharvard · medium (es_ES)",
"gender": "male",
"hz": 116.9
},
{
"engine": "builtin",
"bundle": "vits-piper-es_ES-davefx-medium",
"model": "es_ES-davefx-medium.onnx",
"label": "davefx · medium (es_ES)",
"gender": "male",
"hz": 121.7
},
{
"engine": "builtin",
"bundle": "vits-piper-es_ES-carlfm-x_low",
"model": "es_ES-carlfm-x_low.onnx",
"label": "carlfm · x_low (es_ES)",
"gender": "male",
"hz": 117.1
},
{
"engine": "local",
"speaker": "aiden",
"label": "Aiden · male · borderline",
"gender": "ambiguous",
"hz": 153,
"instant": true
}
],
"por_Latn": [
{
"engine": "kokoro",
"speaker": "pm_alex",
"label": "Alex · male (Kokoro)",
"gender": "male"
},
{
"engine": "kokoro",
"speaker": "pm_santa",
"label": "Santa · male (Kokoro)",
"gender": "male"
},
{
"engine": "kokoro",
"speaker": "pf_dora",
"label": "Dora · female (Kokoro)",
"gender": "female"
},
{
"engine": "builtin",
"bundle": "vits-piper-pt_BR-miro-high",
"model": "pt_BR-miro-high.onnx",
"label": "miro · high (pt_BR)",
"gender": "male",
"hz": 97.6
},
{
"engine": "builtin",
"bundle": "vits-piper-pt_BR-jeff-medium",
"model": "pt_BR-jeff-medium.onnx",
"label": "jeff · medium (pt_BR)",
"gender": "male",
"hz": 142.5
},
{
"engine": "builtin",
"bundle": "vits-piper-pt_BR-cadu-medium",
"model": "pt_BR-cadu-medium.onnx",
"label": "cadu · medium (pt_BR)",
"gender": "male",
"hz": 128.8
},
{
"engine": "builtin",
"bundle": "vits-piper-pt_BR-faber-medium",
"model": "pt_BR-faber-medium.onnx",
"label": "faber · medium (pt_BR) · borderline",
"gender": "ambiguous",
"hz": 158
},
{
"engine": "builtin",
"bundle": "vits-piper-pt_PT-miro-high",
"model": "pt_PT-miro-high.onnx",
"label": "miro · high (pt_PT)",
"gender": "male",
"hz": 91.3
},
{
"engine": "local",
"speaker": "aiden",
"label": "Aiden · male",
"gender": "male",
"hz": 139.4,
"instant": true
},
{
"engine": "local",
"speaker": "ryan",
"label": "Ryan · deep male",
"gender": "male",
"hz": 130.2,
"instant": true
},
{
"engine": "local",
"speaker": "dylan",
"label": "Dylan · male (Beijing accent)",
"gender": "male",
"hz": 146.7,
"instant": true
}
],
"por_PT": [
{
"engine": "kokoro",
"speaker": "pm_alex",
"label": "Alex · male (Kokoro)",
"gender": "male"
},
{
"engine": "kokoro",
"speaker": "pf_dora",
"label": "Dora · female (Kokoro)",
"gender": "female"
},
{
"engine": "builtin",
"bundle": "vits-piper-pt_PT-miro-high",
"model": "pt_PT-miro-high.onnx",
"label": "miro · high (pt_PT)",
"gender": "male",
"hz": 91.3
},
{
"engine": "builtin",
"bundle": "vits-piper-pt_BR-miro-high",
"model": "pt_BR-miro-high.onnx",
"label": "miro · high (pt_BR)",
"gender": "male",
"hz": 98.2
},
{
"engine": "builtin",
"bundle": "vits-piper-pt_BR-jeff-medium",
"model": "pt_BR-jeff-medium.onnx",
"label": "jeff · medium (pt_BR)",
"gender": "male",
"hz": 133.4
},
{
"engine": "builtin",
"bundle": "vits-piper-pt_BR-cadu-medium",
"model": "pt_BR-cadu-medium.onnx",
"label": "cadu · medium (pt_BR)",
"gender": "male",
"hz": 125
},
{
"engine": "builtin",
"bundle": "vits-piper-pt_BR-faber-medium",
"model": "pt_BR-faber-medium.onnx",
"label": "faber · medium (pt_BR) · borderline",
"gender": "ambiguous",
"hz": 156.3
},
{
"engine": "local",
"speaker": "aiden",
"label": "Aiden · male",
"gender": "male",
"hz": 139.4,
"instant": true
},
{
"engine": "local",
"speaker": "ryan",
"label": "Ryan · deep male",
"gender": "male",
"hz": 130.2,
"instant": true
},
{
"engine": "local",
"speaker": "dylan",
"label": "Dylan · male (Beijing accent)",
"gender": "male",
"hz": 146.7,
"instant": true
}
],
"fra_Latn": [
{
"engine": "kokoro",
"speaker": "ff_siwis",
"label": "Siwis · female (Kokoro)",
"gender": "female"
},
{
"engine": "builtin",
"bundle": "vits-piper-fr_FR-miro-high",
"model": "fr_FR-miro-high.onnx",
"label": "miro · high (fr_FR)",
"gender": "male",
"hz": 102.1
},
{
"engine": "builtin",
"bundle": "vits-piper-fr_FR-tom-medium",
"model": "fr_FR-tom-medium.onnx",
"label": "tom · medium (fr_FR)",
"gender": "male",
"hz": 125.5
},
{
"engine": "builtin",
"bundle": "vits-piper-fr_FR-tjiho-model3",
"model": "fr_FR-tjiho-model3.onnx",
"label": "tjiho · model3 (fr_FR)",
"gender": "male",
"hz": 125.5
},
{
"engine": "builtin",
"bundle": "vits-piper-fr_FR-tjiho-model2",
"model": "fr_FR-tjiho-model2.onnx",
"label": "tjiho · model2 (fr_FR)",
"gender": "male",
"hz": 126.4
},
{
"engine": "builtin",
"bundle": "vits-piper-fr_FR-tjiho-model1",
"model": "fr_FR-tjiho-model1.onnx",
"label": "tjiho · model1 (fr_FR)",
"gender": "male",
"hz": 149.2
}
],
"zho_Hans": [
{
"engine": "kokoro",
"speaker": "zm_yunjian",
"label": "Yunjian · male (Kokoro)",
"gender": "male"
},
{
"engine": "kokoro",
"speaker": "zf_xiaobei",
"label": "Xiaobei · female (Kokoro)",
"gender": "female"
},
{
"engine": "builtin",
"bundle": "sherpa-onnx-vits-zh-ll",
"model": "model.onnx",
"label": "sherpa-onnx-vits-zh-ll",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-zh-hf-fanchen-ZhiHuiLaoZhe_new",
"model": "model.onnx",
"label": "vits-zh-hf-fanchen-ZhiHuiLaoZhe_new",
"gender": "male",
"hz": 107.7
},
{
"engine": "builtin",
"bundle": "vits-zh-hf-fanchen-unity",
"model": "model.onnx",
"label": "vits-zh-hf-fanchen-unity",
"gender": "male",
"hz": 114.6
},
{
"engine": "builtin",
"bundle": "vits-zh-hf-fanchen-ZhiHuiLaoZhe",
"model": "model.onnx",
"label": "vits-zh-hf-fanchen-ZhiHuiLaoZhe",
"gender": "male",
"hz": 126.2
},
{
"engine": "builtin",
"bundle": "vits-zh-hf-fanchen-wnj",
"model": "model.onnx",
"label": "vits-zh-hf-fanchen-wnj",
"gender": "male",
"hz": 110.2
},
{
"engine": "builtin",
"bundle": "vits-piper-zh_CN-chaowen-medium",
"model": "zh_CN-chaowen-medium.onnx",
"label": "chaowen · medium (zh_CN) · borderline",
"gender": "ambiguous",
"hz": 162.2
},
{
"engine": "local",
"speaker": "aiden",
"label": "Aiden · male · borderline",
"gender": "ambiguous",
"hz": 180,
"instant": true
},
{
"engine": "local",
"speaker": "ryan",
"label": "Ryan · deep male",
"gender": "male",
"hz": 129.9,
"instant": true
},
{
"engine": "local",
"speaker": "uncle_fu",
"label": "Uncle Fu · older male",
"gender": "male",
"hz": 138.4,
"instant": true
}
],
"vie_Latn": [
{
"engine": "builtin",
"bundle": "vits-piper-vi_VN-vais1000-medium",
"model": "vi_VN-vais1000-medium.onnx",
"label": "vais1000 · medium (vi_VN)"
}
],
"arb_Arab": [
{
"engine": "builtin",
"bundle": "vits-piper-ar_JO-SA_miro_V2-high",
"model": "ar_JO-SA_miro_V2-high.onnx",
"label": "SA_miro_V2 · high (ar_JO)",
"gender": "male",
"hz": 91.7
},
{
"engine": "builtin",
"bundle": "vits-piper-ar_JO-SA_miro-high",
"model": "ar_JO-SA_miro-high.onnx",
"label": "SA_miro · high (ar_JO)",
"gender": "male",
"hz": 102.2
},
{
"engine": "builtin",
"bundle": "vits-piper-ar_JO-kareem-medium",
"model": "ar_JO-kareem-medium.onnx",
"label": "kareem · medium (ar_JO)",
"gender": "male",
"hz": 105.8
},
{
"engine": "builtin",
"bundle": "vits-piper-ar_JO-kareem-low",
"model": "ar_JO-kareem-low.onnx",
"label": "kareem · low (ar_JO)",
"gender": "male",
"hz": 108
}
],
"rus_Cyrl": [
{
"engine": "builtin",
"bundle": "vits-piper-ru_RU-ruslan-medium",
"model": "ru_RU-ruslan-medium.onnx",
"label": "ruslan · medium (ru_RU)",
"gender": "male",
"hz": 101.4
},
{
"engine": "builtin",
"bundle": "vits-piper-ru_RU-denis-medium",
"model": "ru_RU-denis-medium.onnx",
"label": "denis · medium (ru_RU)",
"gender": "male",
"hz": 147.5
},
{
"engine": "builtin",
"bundle": "vits-piper-ru_RU-irina-medium",
"model": "ru_RU-irina-medium.onnx",
"label": "irina · medium (ru_RU) · borderline",
"gender": "ambiguous",
"hz": 168.6
}
],
"ukr_Cyrl": [
{
"engine": "builtin",
"bundle": "vits-piper-uk_UA-lada-x_low",
"model": "uk_UA-lada-x_low.onnx",
"label": "lada · x_low (uk_UA)"
}
],
"deu_Latn": [
{
"engine": "builtin",
"bundle": "vits-piper-de_DE-thorsten-high",
"model": "de_DE-thorsten-high.onnx",
"label": "thorsten · high (de_DE)",
"gender": "male",
"hz": 116.4
},
{
"engine": "builtin",
"bundle": "vits-piper-de_DE-miro-high",
"model": "de_DE-miro-high.onnx",
"label": "miro · high (de_DE)",
"gender": "male",
"hz": 98.4
},
{
"engine": "builtin",
"bundle": "vits-piper-de_DE-thorsten-medium",
"model": "de_DE-thorsten-medium.onnx",
"label": "thorsten · medium (de_DE)",
"gender": "male",
"hz": 119.5
},
{
"engine": "builtin",
"bundle": "vits-piper-de_DE-glados-high",
"model": "de_DE-glados-high.onnx",
"label": "glados · high (de_DE) · borderline",
"gender": "ambiguous",
"hz": 154.3
},
{
"engine": "builtin",
"bundle": "vits-piper-de_DE-thorsten_emotional-medium",
"model": "de_DE-thorsten_emotional-medium.onnx",
"label": "thorsten_emotional · medium (de_DE) · borderline",
"gender": "ambiguous",
"hz": 155.1
},
{
"engine": "builtin",
"bundle": "vits-piper-de_DE-glados-medium",
"model": "de_DE-glados-medium.onnx",
"label": "glados · medium (de_DE) · borderline",
"gender": "ambiguous",
"hz": 162.7
},
{
"engine": "builtin",
"bundle": "vits-piper-de_DE-glados-low",
"model": "de_DE-glados-low.onnx",
"label": "glados · low (de_DE) · borderline",
"gender": "ambiguous",
"hz": 163.7
},
{
"engine": "local",
"speaker": "aiden",
"label": "Aiden · male",
"gender": "male",
"hz": 144.7,
"instant": true
},
{
"engine": "local",
"speaker": "uncle_fu",
"label": "Uncle Fu · older male",
"gender": "male",
"hz": 131.4,
"instant": true
},
{
"engine": "local",
"speaker": "dylan",
"label": "Dylan · male (Beijing accent)",
"gender": "male",
"hz": 125.9,
"instant": true
}
],
"pol_Latn": [
{
"engine": "builtin",
"bundle": "vits-piper-pl_PL-bass-high",
"model": "pl_PL-bass-high.onnx",
"label": "bass · high (pl_PL)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-piper-pl_PL-zenski_wg_glos-medium",
"model": "pl_PL-zenski_wg_glos-medium.onnx",
"label": "zenski_wg_glos · medium (pl_PL)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-piper-pl_PL-darkman-medium",
"model": "pl_PL-darkman-medium.onnx",
"label": "darkman · medium (pl_PL)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-piper-pl_PL-mc_speech-medium",
"model": "pl_PL-mc_speech-medium.onnx",
"label": "mc_speech · medium (pl_PL)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-piper-pl_PL-meski_wg_glos-medium",
"model": "pl_PL-meski_wg_glos-medium.onnx",
"label": "meski_wg_glos · medium (pl_PL)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-piper-pl_PL-jarvis_wg_glos-medium",
"model": "pl_PL-jarvis_wg_glos-medium.onnx",
"label": "jarvis_wg_glos · medium (pl_PL)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-piper-pl_PL-justyna_wg_glos-medium",
"model": "pl_PL-justyna_wg_glos-medium.onnx",
"label": "justyna_wg_glos · medium (pl_PL)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-piper-pl_PL-gosia-medium",
"model": "pl_PL-gosia-medium.onnx",
"label": "gosia · medium (pl_PL)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-mimic3-pl_PL-m-ailabs_low",
"model": "pl_PL-m-ailabs_low.onnx",
"label": "m · ailabs_low (pl_PL)",
"gender": "unknown",
"hz": 0
}
],
"ron_Latn": [
{
"engine": "builtin",
"bundle": "vits-piper-ro_RO-mihai-medium",
"model": "ro_RO-mihai-medium.onnx",
"label": "mihai · medium (ro_RO)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-coqui-ro-cv",
"model": "model.onnx",
"label": "cv (ro)",
"gender": "unknown",
"hz": 0
}
],
"swh_Latn": [
{
"engine": "builtin",
"bundle": "vits-piper-sw_CD-lanfrica-medium",
"model": "sw_CD-lanfrica-medium.onnx",
"label": "lanfrica · medium (sw_CD)",
"gender": "unknown",
"hz": 0
}
],
"pes_Arab": [
{
"engine": "builtin",
"bundle": "vits-piper-fa_IR-reza_ibrahim-medium",
"model": "fa_IR-reza_ibrahim-medium.onnx",
"label": "reza_ibrahim · medium (fa_IR)",
"gender": "male",
"hz": 93.2
},
{
"engine": "builtin",
"bundle": "vits-piper-fa_IR-gyro-medium",
"model": "fa_IR-gyro-medium.onnx",
"label": "gyro · medium (fa_IR)",
"gender": "male",
"hz": 101
},
{
"engine": "builtin",
"bundle": "vits-piper-fa_IR-ganji_adabi-medium",
"model": "fa_IR-ganji_adabi-medium.onnx",
"label": "ganji_adabi · medium (fa_IR)",
"gender": "male",
"hz": 103.6
},
{
"engine": "builtin",
"bundle": "vits-piper-fa_IR-ganji-medium",
"model": "fa_IR-ganji-medium.onnx",
"label": "ganji · medium (fa_IR)",
"gender": "male",
"hz": 95.7
},
{
"engine": "builtin",
"bundle": "vits-piper-fa_IR-amir-medium",
"model": "fa_IR-amir-medium.onnx",
"label": "amir · medium (fa_IR)",
"gender": "male",
"hz": 139.7
},
{
"engine": "builtin",
"bundle": "vits-piper-fa_en-rezahedayatfar-ibrahimwalk-medium",
"model": "fa_en-rezahedayatfar-ibrahimwalk-medium.onnx",
"label": "rezahedayatfar-ibrahimwalk · medium (fa_en)",
"gender": "male",
"hz": 95.3
}
],
"tur_Latn": [
{
"engine": "builtin",
"bundle": "vits-piper-tr_TR-fettah-medium",
"model": "tr_TR-fettah-medium.onnx",
"label": "fettah · medium (tr_TR)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-piper-tr_TR-fahrettin-medium",
"model": "tr_TR-fahrettin-medium.onnx",
"label": "fahrettin · medium (tr_TR)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-piper-tr_TR-dfki-medium",
"model": "tr_TR-dfki-medium.onnx",
"label": "dfki · medium (tr_TR)",
"gender": "unknown",
"hz": 0
}
],
"hin_Deva": [
{
"engine": "kokoro",
"speaker": "hm_omega",
"label": "Omega · male (Kokoro)",
"gender": "male"
},
{
"engine": "kokoro",
"speaker": "hf_alpha",
"label": "Alpha · female (Kokoro)",
"gender": "female"
},
{
"engine": "builtin",
"bundle": "vits-piper-hi_IN-pratham-medium",
"model": "hi_IN-pratham-medium.onnx",
"label": "pratham · medium (hi_IN)",
"gender": "male",
"hz": 96.7
},
{
"engine": "builtin",
"bundle": "vits-piper-hi_IN-rohan-medium",
"model": "hi_IN-rohan-medium.onnx",
"label": "rohan · medium (hi_IN) · borderline",
"gender": "ambiguous",
"hz": 146.9
}
],
"npi_Deva": [
{
"engine": "builtin",
"bundle": "vits-piper-ne_NP-google-medium",
"model": "ne_NP-google-medium.onnx",
"label": "google · medium (ne_NP)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-piper-ne_NP-chitwan-medium",
"model": "ne_NP-chitwan-medium.onnx",
"label": "chitwan · medium (ne_NP)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-mimic3-ne_NP-ne-google_low",
"model": "ne_NP-ne-google_low.onnx",
"label": "ne · google_low (ne_NP)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-piper-ne_NP-google-x_low",
"model": "ne_NP-google-x_low.onnx",
"label": "google · x_low (ne_NP)",
"gender": "unknown",
"hz": 0
}
],
"ita_Latn": [
{
"engine": "kokoro",
"speaker": "im_nicola",
"label": "Nicola · male (Kokoro)",
"gender": "male"
},
{
"engine": "kokoro",
"speaker": "if_sara",
"label": "Sara · female (Kokoro)",
"gender": "female"
},
{
"engine": "builtin",
"bundle": "vits-piper-it_IT-miro-high",
"model": "it_IT-miro-high.onnx",
"label": "miro · high (it_IT)",
"gender": "male",
"hz": 112.3
},
{
"engine": "builtin",
"bundle": "vits-piper-it_IT-riccardo-x_low",
"model": "it_IT-riccardo-x_low.onnx",
"label": "riccardo · x_low (it_IT)",
"gender": "male",
"hz": 149.7
}
],
"nld_Latn": [
{
"engine": "builtin",
"bundle": "vits-piper-nl_BE-rdh-medium",
"model": "nl_BE-rdh-medium.onnx",
"label": "rdh · medium (nl_BE)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-piper-nl_BE-nathalie-medium",
"model": "nl_BE-nathalie-medium.onnx",
"label": "nathalie · medium (nl_BE)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-piper-nl_BE-rdh-x_low",
"model": "nl_BE-rdh-x_low.onnx",
"label": "rdh · x_low (nl_BE)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-piper-nl_BE-nathalie-x_low",
"model": "nl_BE-nathalie-x_low.onnx",
"label": "nathalie · x_low (nl_BE)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-piper-nl_NL-miro-high",
"model": "nl_NL-miro-high.onnx",
"label": "miro · high (nl_NL)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-piper-nl_NL-dii-high",
"model": "nl_NL-dii-high.onnx",
"label": "dii · high (nl_NL)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-piper-nl_NL-ronnie-medium",
"model": "nl_NL-ronnie-medium.onnx",
"label": "ronnie · medium (nl_NL)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-piper-nl_NL-pim-medium",
"model": "nl_NL-pim-medium.onnx",
"label": "pim · medium (nl_NL)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-piper-nl_NL-alex-medium",
"model": "nl_NL-alex-medium.onnx",
"label": "alex · medium (nl_NL)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-coqui-nl-css10",
"model": "model.onnx",
"label": "css10 (nl)",
"gender": "unknown",
"hz": 0
}
],
"ces_Latn": [
{
"engine": "builtin",
"bundle": "vits-piper-cs_CZ-jirka-medium",
"model": "cs_CZ-jirka-medium.onnx",
"label": "jirka · medium (cs_CZ)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-piper-cs_CZ-jirka-low",
"model": "cs_CZ-jirka-low.onnx",
"label": "jirka · low (cs_CZ)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-coqui-cs-cv",
"model": "model.onnx",
"label": "cv (cs)",
"gender": "unknown",
"hz": 0
}
],
"hun_Latn": [
{
"engine": "builtin",
"bundle": "vits-piper-hu_HU-imre-medium",
"model": "hu_HU-imre-medium.onnx",
"label": "imre · medium (hu_HU)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-piper-hu_HU-berta-medium",
"model": "hu_HU-berta-medium.onnx",
"label": "berta · medium (hu_HU)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-piper-hu_HU-anna-medium",
"model": "hu_HU-anna-medium.onnx",
"label": "anna · medium (hu_HU)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-mimic3-hu_HU-diana-majlinger_low",
"model": "hu_HU-diana-majlinger_low.onnx",
"label": "diana · majlinger_low (hu_HU)",
"gender": "unknown",
"hz": 0
}
],
"ell_Grek": [
{
"engine": "builtin",
"bundle": "vits-piper-el_GR-rapunzelina-low",
"model": "el_GR-rapunzelina-low.onnx",
"label": "rapunzelina · low (el_GR)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-mimic3-el_GR-rapunzelina_low",
"model": "el_GR-rapunzelina_low.onnx",
"label": "rapunzelina_low (el_GR)",
"gender": "unknown",
"hz": 0
}
],
"srp_Cyrl": [
{
"engine": "builtin",
"bundle": "vits-piper-sr_RS-serbski_institut-medium",
"model": "sr_RS-serbski_institut-medium.onnx",
"label": "serbski_institut · medium (sr_RS)",
"gender": "unknown",
"hz": 0
}
],
"kat_Geor": [
{
"engine": "builtin",
"bundle": "vits-piper-ka_GE-natia-medium",
"model": "ka_GE-natia-medium.onnx",
"label": "natia · medium (ka_GE)",
"gender": "unknown",
"hz": 0
}
],
"kaz_Cyrl": [
{
"engine": "builtin",
"bundle": "vits-piper-kk_KZ-issai-high",
"model": "kk_KZ-issai-high.onnx",
"label": "issai · high (kk_KZ)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-piper-kk_KZ-iseke-x_low",
"model": "kk_KZ-iseke-x_low.onnx",
"label": "iseke · x_low (kk_KZ)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-piper-kk_KZ-raya-x_low",
"model": "kk_KZ-raya-x_low.onnx",
"label": "raya · x_low (kk_KZ)",
"gender": "unknown",
"hz": 0
}
],
"swe_Latn": [
{
"engine": "builtin",
"bundle": "vits-piper-sv_SE-nst-medium",
"model": "sv_SE-nst-medium.onnx",
"label": "nst · medium (sv_SE)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-piper-sv_SE-lisa-medium",
"model": "sv_SE-lisa-medium.onnx",
"label": "lisa · medium (sv_SE)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-piper-sv_SE-alma-medium",
"model": "sv_SE-alma-medium.onnx",
"label": "alma · medium (sv_SE)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-coqui-sv-cv",
"model": "model.onnx",
"label": "cv (sv)",
"gender": "unknown",
"hz": 0
}
],
"dan_Latn": [
{
"engine": "builtin",
"bundle": "vits-piper-da_DK-talesyntese-medium",
"model": "da_DK-talesyntese-medium.onnx",
"label": "talesyntese · medium (da_DK)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-coqui-da-cv",
"model": "model.onnx",
"label": "cv (da)",
"gender": "unknown",
"hz": 0
}
],
"fin_Latn": [
{
"engine": "builtin",
"bundle": "vits-piper-fi_FI-harri-medium",
"model": "fi_FI-harri-medium.onnx",
"label": "harri · medium (fi_FI)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-piper-fi_FI-harri-low",
"model": "fi_FI-harri-low.onnx",
"label": "harri · low (fi_FI)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-mimic3-fi_FI-harri-tapani-ylilammi_low",
"model": "fi_FI-harri-tapani-ylilammi_low.onnx",
"label": "harri-tapani · ylilammi_low (fi_FI)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-coqui-fi-css10",
"model": "model.onnx",
"label": "css10 (fi)",
"gender": "unknown",
"hz": 0
}
],
"cat_Latn": [
{
"engine": "builtin",
"bundle": "vits-piper-ca_ES-upc_ona-medium",
"model": "ca_ES-upc_ona-medium.onnx",
"label": "upc_ona · medium (ca_ES)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-piper-ca_ES-upc_pau-x_low",
"model": "ca_ES-upc_pau-x_low.onnx",
"label": "upc_pau · x_low (ca_ES)",
"gender": "unknown",
"hz": 0
},
{
"engine": "builtin",
"bundle": "vits-piper-ca_ES-upc_ona-x_low",
"model": "ca_ES-upc_ona-x_low.onnx",
"label": "upc_ona · x_low (ca_ES)",
"gender": "unknown",
"hz": 0
}
],
"urd_Arab": [
{
"engine": "builtin",
"bundle": "vits-piper-ur_PK-fasih-medium",
"model": "ur_PK-fasih-medium.onnx",
"label": "fasih · medium (ur_PK)",
"gender": "unknown",
"hz": 0
}
],
"kor_Hang": [
{
"engine": "builtin",
"bundle": "vits-mimic3-ko_KO-kss_low",
"model": "ko_KO-kss_low.onnx",
"label": "kss_low (ko_KO)"
},
{
"engine": "local",
"speaker": "aiden",
"label": "Aiden · male · borderline",
"gender": "ambiguous",
"hz": 153,
"instant": true
},
{
"engine": "local",
"speaker": "ryan",
"label": "Ryan · deep male",
"gender": "male",
"hz": 137.1,
"instant": true
},
{
"engine": "local",
"speaker": "uncle_fu",
"label": "Uncle Fu · older male · borderline",
"gender": "ambiguous",
"hz": 165.1,
"instant": true
}
]
};
/*
* Regional variants share their base language's voices — every Spanish voice
* can read any Spanish, and the accent is the whole point of the variant. But
* the DEFAULT should match the region, so the list is reordered to put the
* region's own voices first.
*
* This exists because spa_ES was added to voices.js after this catalog was
* last generated, so the Voices picker simply did not list it: the language
* had a working voice that could not be changed.
*/
const VARIANT = {
spa_ES: { base: 'spa_Latn', prefer: 'es_ES' },
spa_MX: { base: 'spa_Latn', prefer: 'es_MX' },
por_PT: { base: 'por_PT', prefer: 'pt_PT' },
zho_Hant: { base: 'zho_Hans', prefer: '' }
};
/*
* HARD RULE, by the owner's instruction: no female voices, anywhere.
*
* Enforced HERE because forLanguage() is the single funnel every picker and
* every audition goes through — filtering in the UI would leave the live
* synthesis path able to reach one, and filtering per screen would leave the
* next screen to forget.
*
* `gender: 'ambiguous'` is left in: it means nobody has labelled the voice,
* not that it is female, and dropping ~105 unlabelled voices would empty the
* catalog on the strength of missing metadata.
*/
function maleOnly(list) {
return (list || []).filter(function (v) { return v.gender !== 'female'; });
}
function forLanguage(lang) {
if (CATALOG[lang] && !VARIANT[lang]) return maleOnly(CATALOG[lang]);
const v = VARIANT[lang];
if (!v) return maleOnly(CATALOG[lang] || []);
const list = maleOnly((CATALOG[v.base] || CATALOG[lang] || []).slice());
if (!v.prefer) return list;
return list.sort(function (a, b) {
const ar = (a.bundle || '').indexOf(v.prefer) !== -1 ? 0 : 1;
const br = (b.bundle || '').indexOf(v.prefer) !== -1 ? 0 : 1;
return ar - br;
});
}
function languages() {
const out = Object.keys(CATALOG);
for (const k of Object.keys(VARIANT)) if (out.indexOf(k) === -1) out.push(k);
return out;
}
return { CATALOG, VARIANT, forLanguage: forLanguage, languages: languages };
}));