Quality is checked at three points: the script (script-reviewer), before generation (pre-generation-check) and the finished video (video-reviewer). Four individual checks come on top. The skills use MCP tools for what can be measured and judge the rest themselves. Results are PASS, WARN or FAIL.
script-reviewer)14 points, grouped:
| Group | Points |
|---|---|
| Content | 1 timing (speaking pace within the type's target range), 2 readability (Flesch Reading Ease at least 60), 3 structure per type template, 4 hook in the first 5 seconds, 5 call to action at the end |
| Language | 6 consistent tone, 7 no AI-sounding language, 8 at most 20 words per sentence, 9 active voice and imperative for instructions |
| Visual | 10 no scene over 60 seconds, 11 defined transitions, 12 visual direction per scene, 13 at most 7 words per overlay without repeating the narration |
| Completeness | 14 recap for tutorials and installation guides |
In addition there is a pronunciation advisory (check_pronunciation) for both platforms and, for Synthesia with Expressive Avatars, an expression point (no segment over 60 seconds without ! or ?, flag emoticons). When all points pass, the skill sets the episode status Script Reviewed.
pre-generation-check)The skill first calls the run_pre_generation_gates tool and adds its own checks.
Tool gates:
| Gate | Result on violation |
|---|---|
Episode status is neither Not Started nor Script Draft |
FAIL (blocking) |
| At least one scene exists | FAIL (blocking) |
| Every scene has narration | FAIL (blocking) |
| Every scene has visual direction | WARN |
Estimated duration (words divided by defaults.wpm) |
information only |
Overall result: READY or BLOCKED.
Additions in the skill: platform character limits (blocking), duration within the type's range, referenced assets, and for HeyGen warnings for several backgrounds per scene, timed overlays, SSML prosody without a custom voice and undeclared variables.
video-reviewer)20 points after generation:
| Group | Points |
|---|---|
| Content (5) | hook, messages, CTA, flow, completeness |
| Narration (4) | natural language, no AI patterns, sentence length, pronunciation |
| Visuals (4) | variety every 15 to 30 seconds, avatar consistency, on-screen text, transitions |
| Pacing (3) | total duration, scene duration, breathing room |
| Brand and accessibility (4) | tone, visual branding, subtitles planned, inclusive language |
When all points pass, the status QA Passed is set. On any FAIL the status stays Generated; with warnings only, you decide.
| Skill | Checks |
|---|---|
voice-checker |
AI-sounding language by tier from knowledge/ai-language-patterns.md: tier 1 always flagged, tier 2 from two hits per episode, tier 3 when the pattern repeats. Hints only, no rewriting. Exceptions apply, for example literal UI navigation. |
timing-validator |
Total duration, scene count, longest and shortest scene, hook length, speaking pace against the values of the video type |
brand-checker |
Tone, terminology, visual identity, style guide. Skipped when no brand information is available. |
accessibility-checker |
10 points: suitability for subtitles, no information in audio only, reading pace, overlay length, contrast, not color alone, clutter, jargon, readability, pace |
| Tool | Returns |
|---|---|
analyze_timing |
Word count and estimated duration at a given speaking pace |
check_readability |
Flesch score (60 and above PASS, 40 and above WARN, below FAIL), sentence statistics, sentences over 20 words |
validate_structure |
Scenes present, narration and visual direction per scene |
validate_platform_limits |
Characters and scenes against the platform limits |
check_pronunciation |
Years, acronyms, Latin abbreviations with suggestions |
The Flesch value is a simplified approximation based on English syllable counting. For German scripts treat it as a rough indication.