Skip to content

Narration and Localization

ScreenCI narration is cue-based. You define named spoken lines, then place those cues into the visible flow where speech should start, overlap, and end. The same cue map can render as multiple language versions without duplicating the visible browser workflow.

style prompts and modelType: 'expressive' require the Business tier. Free and Starter users should stay with the default consistent narration flow.

You will learn

Start with one language

import { createNarration, video, voices } from 'screenci'
const narration = createNarration({
voice: { name: voices.Sophie },
en: {
intro: 'Open the settings page.',
save: 'Save the changes when you are ready.',
},
})
video('Settings', async ({ page }) => {
await narration.intro()
await page.goto('/settings')
await narration.save.start()
await page.getByRole('button', { name: 'Save' }).click()
await narration.save.end()
})

Timing modes

Use the cue methods intentionally:

  • await narration.key() waits for the full spoken line to finish.
  • await narration.key.start() begins the cue and keeps the script moving.
  • await narration.key.end() closes the same cue later.

That is the main tool for overlapping speech with UI motion without losing control of the timeline.

Add localization

Add more languages by keeping the same cue keys:

const narration = createNarration({
voice: { name: voices.Sophie },
en: {
intro: 'Open the settings page.',
},
fi: {
intro: 'Avaa asetussivu.',
},
})

TypeScript helps here: every language must provide the same cue structure, which catches drift early.

Use bare language keys such as en, fi, fr, and cmn. ScreenCI treats those as the public language versions for narration, rendering, and public URLs.

Per-language voice overrides

When a project needs different voice choices, use language-specific settings instead of forcing one voice profile to fit every market.

import { createNarration, voices } from 'screenci'
const narration = createNarration({
voice: { name: voices.Ava },
en: {
intro: 'Welcome to the dashboard.',
},
fi: {
voice: { name: voices.Nora, pacing: 0.95 },
intro: 'Tervetuloa hallintapaneeliin.',
},
de: {
voice: {
name: voices.Julian,
modelType: 'expressive',
style: 'A friendly and energetic German speaker.',
},
intro: 'Willkommen im Dashboard.',
},
})

The German override above is a Business-tier example because it uses expressive narration.

Use the top-level voice as the default and override only the languages that genuinely need a different voice or delivery profile.

Available voices

ScreenCI ships with built-in voices that you can use across supported languages through the voices export.

NameGenderCharacter
AdrianMaleClear, direct, and structured
AriaFemaleSoft and calm
AvaFemaleBright and optimistic
ClaraFemaleCheerful and energetic
DanielMaleClear and educational
ElenaFemaleSmooth and composed
EmmaFemaleYouthful and playful
EthanMaleWarm and approachable
EvanMaleCasual and relaxed
GraceFemaleGentle and caring
HassanMaleInsightful and reliable
HelenaFemaleMature and authoritative
IsabellaFemaleConfident and proactive
JulianMalePolished and fluid
LaylaFemaleWarm and empathetic
LeoMaleHigh-energy and enthusiastic
LilyFemaleLight and effortless
MarcusMaleFirm and directive
MaxMaleUpbeat and lively
MayaFemaleRelaxed and flexible
MilesMaleGrounded and assertive
NoahMaleSoft and intimate
NoraFemaleStrong and decisive
OmarMaleDetailed and explanatory
RyanMaleDynamic and spirited
SamMaleRelaxed and conversational
SophieFemalePrecise and easy to understand
ThomasMaleBalanced and steady
VictorMaleDeep and serious
ZoeFemalePositive and motivating

Available languages

Top-level language entries accept the following supported language keys:

LanguageKey
Afrikaansaf
Amharicam
Arabicar
Azerbaijaniaz
Belarusianbe
Bulgarianbg
Bengalibn
Catalanca
Cebuanoceb
Mandarincmn
Czechcs
Danishda
Germande
Greekel
Englishen
Spanishes
Estonianet
Basqueeu
Persianfa
Finnishfi
Filipinofil
Frenchfr
Galiciangl
Gujaratigu
Hebrewhe
Hindihi
Croatianhr
Haitian Creoleht
Hungarianhu
Armenianhy
Indonesianid
Icelandicis
Italianit
Japaneseja
Javanesejv
Georgianka
Kannadakn
Koreanko
Konkanikok
Latinla
Luxembourgishlb
Laolo
Lithuanianlt
Latvianlv
Maithilimai
Malagasymg
Macedonianmk
Malayalamml
Mongolianmn
Marathimr
Malayms
Burmesemy
Norwegian Bokmalnb
Nepaline
Dutchnl
Norwegian Nynorsknn
Odiaor
Punjabipa
Polishpl
Pashtops
Portuguesept
Romanianro
Russianru
Sindhisd
Sinhalasi
Slovaksk
Sloveniansl
Albaniansq
Serbiansr
Swedishsv
Swahilisw
Tamilta
Telugute
Thaith
Turkishtr
Ukrainianuk
Urduur
Vietnamesevi

Model type

Use modelType when you need to choose between consistency and expressiveness.

  • consistent is the safer default for docs and product walkthroughs
  • expressive is useful when you want a more natural, less uniform delivery
  • expressive and style prompts require the Business tier