HeyGen Voice 1.0

HeyGen Voice 1.0 is HeyGen's text-to-speech model for spoken audio in 39 languages, with the language detected from the text when none is set. It speaks with a public voice or clones a new one from a single recording, and returns the cloned voice so later requests can reuse it. It suits voiceovers, narration for training and product videos, and localized content.

Complete technical specification for integration
Ready-to-use code snippets for common workflows
Step-by-step tutorials for advanced use cases
← All GuidesSpeaking other languages
How to make HeyGen Voice 1.0 speak 39 languages with a public or cloned voice, when to set speech.language, and how to localize with one voice across markets.
Introduction
HeyGen Voice 1.0 speaks 39 languages, and any voice can speak any of them: one of the public voices or one cloned from your own recording. The language comes from speech.language when you set it, and is detected from the text when you don't.
The fitness coach below recorded an introduction in English. The clip is a Spanish workout cue in her cloned voice, from one request.
Muy bien, última serie. Baja despacio durante tres segundos, empuja fuerte hacia arriba y mantén el abdomen firme. Diez repeticiones más y terminamos por hoy.
- Recording, English0:00
[speak with upbeat, encouraging energy, like a personal trainer talking to a new client] Hey, I'm Maya, and I coach strength training for people who have never set foot in a gym. The first thing I tell everyone is that you don't need to be fit to start. You need to start to get fit. In our first week together, we keep it simple: three sessions, forty minutes each, built around five movements you'll use for the rest of your life. Squats, hinges, pushes, pulls, and carries. We go slow, we focus on form, and we write everything down, because progress you can see is the best motivation there is. By week four, most of my clients are lifting more than they thought they could, and they've stopped dreading the warm-up. Bring water, wear shoes with a flat sole, and tell me about any old injuries before we begin. If something hurts, we stop and change it. If something feels easy, we add a little weight. That's the whole method. A lot of people ask me how often they should train. For the first two months, three times a week is plenty. Your muscles get stronger between sessions, not during them, so rest days are part of the program, not a break from it. Sleep matters more than any supplement, and a simple meal with protein after training does more than a shake you don't enjoy. I'd rather you finish a session feeling like you could have done one more set than leave the gym so sore that you skip the next one. Consistency beats intensity every single time. I'll see you on Monday at seven, and we'll get your first workout on the board.
A fitness app can record its coach once, in one language, and ship every cue in every market it sells in.
Detected or declared
The request below is the one behind the clip above. The recording is in English, the text is in Spanish, and speech.language says which language to speak.
import { createClient } from '@runware/sdk'
const client = await createClient({ apiKey: process.env.RUNWARE_API_KEY })
await client.connect()
const [result] = await client.run({
model: 'heygen:voice@1.0',
inputs: {
audio: 'https://example.com/recordings/coach-intro.mp3'
},
speech: {
text: 'Muy bien, última serie. Baja despacio durante tres segundos, empuja fuerte hacia arriba y mantén el abdomen firme. Diez repeticiones más y terminamos por hoy.',
language: 'es'
}
})import asyncio
import os
from runware import Runware
async def main():
async with Runware(api_key=os.environ["RUNWARE_API_KEY"]) as client:
results = await client.run({
"model": "heygen:voice@1.0",
"inputs": {
"audio": "https://example.com/recordings/coach-intro.mp3"
},
"speech": {
"text": "Muy bien, última serie. Baja despacio durante tres segundos, empuja fuerte hacia arriba y mantén el abdomen firme. Diez repeticiones más y terminamos por hoy.",
"language": "es"
}
})
asyncio.run(main())curl https://api.runware.ai/v1 \
-H "Authorization: Bearer $RUNWARE_API_KEY" \
-H "Content-Type: application/json" \
-d '[
{
"taskType": "audioInference",
"taskUUID": "5e2b7d9c-1a46-4f83-b8c0-3d6e9f1a2c75",
"model": "heygen:voice@1.0",
"inputs": {
"audio": "https://example.com/recordings/coach-intro.mp3"
},
"speech": {
"text": "Muy bien, última serie. Baja despacio durante tres segundos, empuja fuerte hacia arriba y mantén el abdomen firme. Diez repeticiones más y terminamos por hoy.",
"language": "es"
}
}
]'runware run heygen:voice@1.0 \
inputs.audio=https://example.com/recordings/coach-intro.mp3 \
speech.text="Muy bien, última serie. Baja despacio durante tres segundos, empuja fuerte hacia arriba y mantén el abdomen firme. Diez repeticiones más y terminamos por hoy." \
speech.language=es{
"taskType": "audioInference",
"taskUUID": "5e2b7d9c-1a46-4f83-b8c0-3d6e9f1a2c75",
"model": "heygen:voice@1.0",
"inputs": {
"audio": "https://example.com/recordings/coach-intro.mp3"
},
"speech": {
"text": "Muy bien, última serie. Baja despacio durante tres segundos, empuja fuerte hacia arriba y mantén el abdomen firme. Diez repeticiones más y terminamos por hoy.",
"language": "es"
}
}Response
[
{
"taskType": "audioInference",
"taskUUID": "5e2b7d9c-1a46-4f83-b8c0-3d6e9f1a2c75",
"audioUUID": "b7c1e4a8-6d29-4f50-9a3e-2c8f1d7b5e96",
"audioURL": "https://am.runware.ai/audio/os/a14d18/ws/2/ai/b7c1e4a8-6d29-4f50-9a3e-2c8f1d7b5e96.mp3",
"outputs": {
"voiceId": "8d4f1b7e2c9a46d3b5e0a7c2f9d1e684"
}
}
]Without speech.language, the language is detected from the text. When the text alone is not conclusive, a cloned voice falls back to the language of its recording, as long as the text uses that language's script, and the last resort is the usual language of the script, English for Latin letters. Setting the code skips the guess, so send it whenever you know it.
speech.language takes base codes such as es or pt. There is no regional variant to choose, so one code covers every market that speaks the language.
One voice for every market
A storefront that sells in four countries can keep one narrator for every product video. Translate the text, set the matching code and send the same voice ID each time.
Meet the Aerolite running shoe: under two hundred grams, a recycled knit upper, and a sole that grips on wet pavement. Free returns for thirty days.
Te presentamos la zapatilla Aerolite: menos de doscientos gramos, un tejido reciclado y una suela que se agarra al asfalto mojado. Devoluciones gratis durante treinta días.
Das ist der Laufschuh Aerolite: unter zweihundert Gramm, ein Obermaterial aus recyceltem Strick und eine Sohle, die auch auf nassem Asphalt greift. Dreißig Tage kostenlose Rücksendung.
軽量ランニングシューズ「エアロライト」。重さは二百グラム以下、リサイクル素材のニットアッパー、濡れた路面でもしっかりグリップするソール。三十日間の返品無料。
All four clips use Iona, a Bright & Energetic public voice. Only speech.text and speech.language change between them, which is what makes the brand voice the same in every storefront.
Product names can stay in their original spelling. In the Spanish and German clips, Aerolite is pronounced the way it is in English. An English name inside a translated sentence also leaves language detection alone: in our tests, a Spanish line with three English product names returned the same audio with speech.language set to es and with no code at all.
Tips
-
Send
speech.languagewhenever you know it. Detection reads the text and picks the likeliest language. A code is used exactly as sent. -
Translate the text and keep the voice. The same public voice ID or the same cloned
outputs.voiceIdin every language keeps one voice across markets. -
Clone from a recording in any supported language. The recording and the text do not have to match, so a coach recorded in English can lead workouts in Spanish.
-
Leave product names untranslated. A brand name keeps its pronunciation inside a Spanish or German sentence, so the same spelling works in every market.