video-storytelling
Design and build the visual layer of a long-form talking-head video as one persistent world the camera moves through, instead of a sequence of separate graphics. Use when asked to edit a video, add motion graphics, design the visuals for a script, plan an edit, or fix an edit judged confusing, text-heavy, hard to follow, or "clearly made by an AI". Covers the persistent world, camera grammar, the spotlight rule, spatial open loops, ornament and token discipline, transcript timing, and the verification gates.
1How It Works & Mechanism
The root pathology to fix is "scene-based thinking": switching to a new graphic every few seconds forces viewers to reset their comprehension each time, while failure feedback manifests as vague critiques like "confusing / too cluttered" rather than specific defects.
The failure this replaces is scene-thinking. … rather than as a specific defect.
One persistent world: A single space across the entire video that never resets; existing elements are never redrawn, moved, or relabeled; spatial grammar is locked down before building anything and maintained throughout.
### One persistent world … An element, once drawn, is never redrawn, moved, or relabelled.
The camera is the edit: Hard-cutting to a new graphic disorients the viewer, whereas moving within a static space incurs zero cognitive penalty; establishes three heights (World/Region/Detail) and adjacent movement rules.
### The camera is the edit … Moving through a space that stays put costs them nothing.
Attention is a spotlight: Only one element is fully illuminated at any given moment while previously drawn elements remain quiet yet legible; visual hierarchy stems from the bright-to-quiet contrast ratio rather than dimming the entire screen.
**Exactly one element at full brightness at any moment. Everything else already drawn stays quiet but legible.**
Open loops are spatial: Instead of saying "we'll return to this later", leave a visible, incomplete construct within the persistent world, selecting geometric topologies based on the script's shape (parallel items / deep flows / layers / comparisons / news / tutorials).
Never say "we'll come back to this." Leave something visibly incomplete in the world and return to it.
Element discipline: If it isn't spoken, don't draw it—every single shape must be a labeled element, a connecting line between labels, a focal subject in motion, or an ambient background, keeping on-screen text to around 20 words per section.
### If it doesn't get a word, it doesn't get drawn … Nothing else.
A global token set is a hard constraint: stroke weights 1.5/2.5/4/7, font sizes 22/30/42/60/84, corner radii 10/22/40 (strictly superellipse n=2), five colors with five semantic meanings, zero ornament, strictly enforced by token linters that fail the build on violations.
Full detail in `reference/design-system.md`. … Gate it with a token linter that fails the build.
Build contracts enshrine real-world engineering failures into rules: one generator per section, shared modules locked against concurrent edits, SVG defs strictly namespaced before assembly, and renders strictly enforced via --workers 1.
**Namespace the SVG defs before assembly.** … Cost in the reference build: 35 seconds of empty screen with every gate green. … `--workers 1` on render. Parallel workers make the video layer paint black.
Verification gates are comprehensive, yet explicitly "gates cannot replace human eyes": motion smoothness must be verified across sequential frame strips, and every gate must be validated against known-failing negative controls.
**Gates do not replace looking**, and gates that have never failed are not gates. … Motion smoothness is verified on contiguous frames, never on beat frames. … Validate every gate against a control … A seam gate that reports zero on a broken build is worse than no gate.
Audio auditing must extend to the acoustic layer, not merely the transcript layer: full-track dead-air scans, 1ms-resolution envelope forensics, and re-running ASR on the final rendered video to diff against expected text.
**Audit audio at the acoustic level, not the transcript level.** … truncation cliffs and dead holes, not doubled words.
2Core Capabilities
3External Dependencies
| Kind | Dependency / Endpoint |
|---|---|
| cli | FFmpeg(转场窗口连续帧条带抽取,用于读运动缺陷) |
| cli | Node 门禁脚本族(使用者项目内生成的 qa-*.mjs / integrate.mjs,非随包分发)与 HyperFrames CLI |
| package | Python 几何/槽位模块(随包分发,供项目 section builder 导入) |
| package | 兄弟资源:仓库根 docs/STORYTELLING-WORKBOOK.md(中性练习表)与本 skill 的 reference/design-system.md |
4Recommended Governance & Evidence
- scripts/: Local script or command execution: (No executable CLI entry point inside the skill directory; the two .py files are geometric math modules meant to be imported by the user's project generators)
- 本地工作目录: File I/O and artifact output: Writes project-level compositions/<id>.html (generated via scripts/build_<id>.py; strictly mandates modifying generators rather than editing generated artifacts directly)
5Second-Pass Verification
- [ok] 两个随包 .py 是否真的无网络/无 env/无子进程(蓝档关键) — wall.py 仅 import os, sys 用于路径常量与 DEFS 字符串(os 未用于 environ/exec);geom.py 仅 import math。全目录 grep 无 requests/urllib/socket/http/os.environ/subprocess/eval。结论:几何模块,无执行面。
- [discrepancy] SKILL.md 的门禁脚本是否真属本 skill(避免把项目内产物算作 skill 资产) — [判定:口径澄清,非缺陷]SKILL.md 的命令写作 node scripts/qa-tokens.mjs、node scripts/build_<id>.py、node scripts/integrate.mjs——这些是使用者项目里生成的脚本,pin 仓库的 skill 目录内不存在(该目录仅 5 个文件)。本报告因此在 internal_assets 只列随包文件,并在 external_deps 标注门禁脚本属项目内生成物。
- [unlocatable] 参考实现的具体数字与事故能否在源码内定位 — SKILL.md 引用的大量参考构建细节(最亮像素 101/255、35 秒空屏、输入口 glitch、被听成 stutters 的 20-40ms 接缝、speaker 在屏约 40%)来自作者对一段私有参考构建的返工记录;pin 仓库内没有该构建的渲染/日志/qa 输出,故这些数字只作「文档声明」记录,不在结论中当已核事实。方法本身(规则名与门禁名)可在 SKILL.md 内逐条定位。
- [ok] 「门禁不能替代人眼」是否只是修辞(会不会把 qa 脚本当通过依据) — SKILL.md 明写 'Gates do not replace looking, and gates that have never failed are not gates.',并要求每条门用已知会触发的 control 验证、在装配体而非 section 原型上验证、可读性必须看 960x540 降采样、运动必须读连续帧条带。规则自洽且可执行。
- [ok] 音频纪律是否与「剪辑不碰词」原则冲突 — SKILL.md 要求在句界插入 4–8 帧房间音(words never touched)、用 40ms 等功率交叉淡入接进尾音衰减、且插入式改动对转写是确定性位移(无需重转写)——与语速/词不被裁切的原则一致,属对反例(硬接造成 cliff)的显式修正。
6Verdict & Scenarios
af02bf58b5fef932…