VidCraft only prepares scripts for HeyGen and Synthesia. There is no API integration: you copy the formatted script into the platform yourself and generate the video there.
The validate_platform_limits tool and the pre-generation-check skill measure each scene's narration against these values:
| Platform | Characters per scene | Scenes per video |
|---|---|---|
| HeyGen | 5000 | 100 |
| Synthesia | 1000 | 150 |
Exceeding a limit reports FAIL; from 90 percent of the limit there is a warning. The get_platform_capabilities tool additionally returns resolution, language count and features of the platform.
Mark overlays with timing in the script like this: [post-production overlay: "Text" at 00:12-00:15]. The heygen-engineer strips these markers before formatting and lists them as post-production tasks.
[pause 0.5s] and [pause 1s] in the script are converted by heygen_format_script into SSML <break time="0.5s"/>. Pauses only work with custom voices (voice clone, ElevenLabs, OpenAI Voice); the public HeyGen voice library ignores them. In that case the tool appends a note to the scene.
For public voices you control the pace with punctuation and paragraphs.
heygen_format_script automatically detects placeholders in the form {{snake_case}} in narration or on-screen text and lists them at the end of the output. All variables must be declared in the HeyGen Template API, otherwise they appear as literal text in the video. Types: text, image, video, audio, avatar. URLs go on screen only, never in the narration.
Tags such as <prosody rate="slow"> and <emphasis level="strong"> are community-verified but not part of the official HeyGen documentation. They only work with custom voices, are never inserted automatically and carry a corresponding note in the output. Test them with a short scene before using them across the whole video.
For each scene the heygen-engineer recommends a Voice Director preset (Casual, Calm, Excited, Serious, Cool) or a free-form prompt. For Avatar IV avatars it adds motion prompts as short sentences such as "Points forward with confidence." You set both manually in HeyGen AI Studio.
heygen_format_script produces one block per scene with title, type (avatar, screencast, split), avatar position, background, text overlay, narration and a character counter.
[pause Xs] is converted automatically into <break time="Xs"/> by synthesia_format_script.
[gesture:nod], [gesture:headyes], [gesture:headno], [gesture:eyebrowsup], [gesture:increase] in the text.!, ?, ... and emoticons. Passages over 60 seconds with no ! or ? look expressionless; script-reviewer, voice-checker and synthesia-engineer point this out.synthesia_format_script maps the visual type to a layout:
| Visual type | Layout |
|---|---|
avatar |
Avatar centered, solid background |
screencast |
Screen recording full, avatar overlay in the corner |
slides |
Text layout, avatar left |
split |
Split screen: avatar left, media right |
b-roll |
Full media, no avatar |
check_pronunciation tool reports pronunciation hints: years, acronyms and Latin abbreviations. It replaces nothing automatically; you decide on every suggestion.