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.
1仕組みと動作原理
解消すべき根本原因は「シーン思考」にある:数秒ごとに新しいグラフィックへ切り替えると視聴者はその都度理解をリセットされ、失敗のフィードバックは具体的な欠陥ではなく「分かりにくい/詰め込みすぎ」といった曖昧な不満として現れる。
The failure this replaces is scene-thinking. … rather than as a specific defect.
1つの永続的な世界:動画全体で同一空間を保ち決してリセットしない。配置済み要素の再描画・移動・ラベル変更を禁じ、空間文法は構築前に確定して全編で一貫させる。
### One persistent world … An element, once drawn, is never redrawn, moved, or relabelled.
カメラワークこそが編集:新しいグラフィックへのカットは視聴者の空間把握を奪うが、静止空間内のカメラ移動は認知的負荷を生じさせない。World/Region/Detailの3段階の高さと隣接移動ルールを定義する。
### The camera is the edit … Moving through a space that stays put costs them nothing.
注意力はスポットライト:常に1つの要素のみを完全に点灯させ、描画済みの他要素は静穏かつ可読な状態を維持する。視覚的階層は全体を暗くするのではなく「明/静」のコントラスト比によって生み出す。
**Exactly one element at full brightness at any moment. Everything else already drawn stays quiet but legible.**
空間的なオープンループ:「後で戻ります」と言葉で済ませず、世界の中に未完成の構造物を視覚的に残す。スクリプトの構造に応じて適切な幾何トポロジー(並列項目/深層フロー/階層/対比/ニュース/チュートリアル)を選択する。
Never say "we'll come back to this." Leave something visibly incomplete in the world and return to it.
構成要素の規律:読み上げられないものは描画しない。すべての形状はラベル付き要素、ラベル間の接続線、進行中の主体、環境背景のいずれかとし、1セクションあたりの画面上テキスト量は約20語に抑える。
### If it doesn't get a word, it doesn't get drawn … Nothing else.
グローバルトークンセットによる厳密な制約:線幅 1.5/2.5/4/7、フォントサイズ 22/30/42/60/84、角丸 10/22/40(超楕円 n=2 固定)、5色5意味の装飾ゼロ構成とし、token linterで違反時にビルドを失敗させる。
Full detail in `reference/design-system.md`. … Gate it with a token linter that fails the build.
エンジニアリング障害を教訓化したビルド契約:セクションごとに1つの生成スクリプト、共有モジュールの並行修正禁止、アセンブリ前のSVG defsの名前空間分離、レンダリング時の--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.
検証ゲートの完備と「目視確認の不可欠性」:動きの滑らかさは連続フレーム上で検証し、すべてのゲートは意図的にエラーを起こす対照実験で有効性を確認しなければならない。
**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.
文字起こし層ではなく音響層まで踏み込んだ音声監査:トラック全体の無音区間スキャン、1ms解像度のエンベロープ検証、完成動画に対するASR再実行と想定テキストの照合。
**Audit audio at the acoustic level, not the transcript level.** … truncation cliffs and dead holes, not doubled words.
2コア機能
3外部依存関係
| 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 |
4推奨統制措置と判定根拠
- scripts/: ローカルスクリプトおよびコマンドの実行: (本スキルディレクトリ自体には実行可能なCLIエントリポイントは含まれず、2つの.pyファイルは利用者のプロジェクト生成スクリプトからimportされる幾何計算モジュール)
- 本地工作目录: ファイル読み書きおよび成果物出力: プロジェクト内の compositions/<id>.html(scripts/build_<id>.py により生成。生成スクリプトのみを修正し成果物の直接編集は禁止)
5二重目の独立検証
- [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)的显式修正。
6結論
af02bf58b5fef932…