yuv-video-director 是做什么的?
YUV.AI 视频的指挥家。你(智能体)决定每个节拍需要什么,将其路由到正确的引擎,将一切组合成一个 HyperFrames 合成,包裹上 YUV.AI Neon Phoenix 品牌,自我验证,然后渲染成 MP4。本技能是路由器 + 工作参考实现;仅当引擎参与时才加载其参考文件。
设计源头:
yuv-design-system技能(Neon 模式 — 粉色#FF1464,青色#00E5FF,深黑/白,Anton+Inter+JetBrains Mono,神经网络凤凰主题)。视频形式是frame.md— 参见 references/frame-md.md。捆绑模板:assets/FRAME.md。将其放入项目根目录;HyperFrames 会读取它。
唯一法则(决定一切)
HyperFrames 的渲染方式是在每个帧中通过无头 Chrome → FFmpeg 进行 seek(frameIndex = floor(t·fps),相同输入 → 相同输出)。因此每个视觉效果属于以下两种之一:
| 模式 | 运行方式… | 引擎 | 规则 |
|---|---|---|---|
| 实时可 seek 适配器 | 在渲染内部运行,每帧驱动到时间 t | GSAP、Lottie (window.__hfLottie)、Three.js、由 GSAP 代理 onUpdate 驱动的 canvas | 必须是时钟驱动 — 不使用 Date.now()、Math.random()(种子化 mulberry32)、setTimeout 或 .play() |
| 预渲染资产 | 离线运行,输出文件,作为片段导入 | ManimCE (Python→MP4/alpha)、TTS 音频、背景移除 | 先渲染,然后作为 <video>/资产片段放入 |
如果可以 seek,则是适配器。如果不能,则预渲染。 Manim 始终是预渲染片段 — 它有自己的渲染器并在 Python 中运行;永远不能成为实时适配器。
将每个节拍路由到引擎
"将 X 解释为预告片/宣传片(FOMO,悬念,快节奏)" → references/teaser-explainer.md(公式)
"解释概念 / 数学 / 神经网络 / 算法 / 训练" → ManimCE(预渲染片段 — 为预告片切成 BURSTS)
"品牌动图:logo 片头 · 数据揭示 · 图标弹出 · 脉冲" → Lottie(实时,lottie-web)
"动态字幕 · 标题 · 揭示 · 过渡 · 数据标注" → GSAP(实时)← 默认
"3D / 空间" → Three.js(实时)(不使用 Babylon)
语音 → 字幕 → transcribe + approve 网页应用(参见 video-edit 技能)
未提供配音 → TTS(Kokoro:npx hyperframes tts)
品牌颜色 / 字体 / 主题 → frame.md(前端获取)
GSAP 是文本/动效的可靠默认值。对于设计的品牌图形使用 Lottie,对于解释想法使用 Manim。
工作流程
- 规划节拍。 叙事弧线 + 每个节拍所需的引擎。选择 16:9 和/或 9:16。
- 设置品牌。 确保
FRAME.md在项目根目录(复制 assets/FRAME.md)。所有颜色/字体/主题来自它 — 绝不发明。每个视频中的三个品牌必备项(参见 references/brand-kit.md + references/cinematic.md):真正的凤凰标志(assets/logo-phoenix.png)在揭示处和结束卡,一个真正的特色 Lottie(生成一个 — assets/lottie-burst-generator.py),以及链接结束卡(标志 + "LET'S FLY HIGH" + 完整链接集 + CTA)。关于预告片/社交节奏参见 references/editing.md;关于心理/悬念/FOMO 剪辑参见 references/cinematic.md。 - 首先预渲染资产节拍(以便它们作为片段存在):
- Manim → references/manim.md + assets/manim-scene-template.py。运行
py -m manim render -qh --fps 30 scene.py SceneName,将 MP4 复制到assets/。 - 字幕/TTS → 重用
video-edit技能(transcribe → approve 网页应用 → 同步)和npx hyperframes tts。
- Manim → references/manim.md + assets/manim-scene-template.py。运行
- 脚手架 + 合成。
npx hyperframes init <slug> --non-interactive。编写index.html(hyperframes技能是合约)。使用:- 可 seek 的神经网络场背景 → assets/neural-net-field.js
- 品牌方式的 Lottie → references/lottie.md + assets/neural-pulse.json
- Manim 渲染作为
<video class="clip" muted playsinline>主体片段 - 每个场景的 GSAP 入场,每个边界上的霓虹 闪光 过渡,仅在最终场景淡出
- 对于预告片 / 社交节奏(快速硬切、动态文字猛击、钩子蒙太奇、故障/色度刺击)→ references/editing.md — 像制作人一样剪辑,而不是幻灯片
- 自我验证(关卡)。 references/gates.md:
npx hyperframes lint(0 错误) →validate(0 控制台错误,WCAG AA) → 渲染 → 在时间线上抽查 5 帧。修复 → 重新运行。Lottie 必须经过截图验证(Skottie-vs-lottie-web 陷阱)。 - 渲染。
npx hyperframes render --fps 30 --output renders/<name>_FINAL.mp4。对于竖屏,使用 1080×1920 布局克隆(参见video-edit)。
先决条件(首先检查;优雅降级)
参见 references/prereqs.md。需要 Node 22+、FFmpeg、Python 3.11+ with pip(Manim/字幕)。此机器上:真正的 Python 是 py → C:\Python313(裸 python 是 Hermes 的 venv,没有 pip — 不要使用它)。ManimCE 通过 py -m pip install manim 安装(如果您使用 Text()/MarkupText 而不是 Tex/MathTex 创作,则不需要 LaTeX)。如果 Manim 不可用 → 跳过数学节拍或提供安装;永远不要硬失败整个视频。
本技能捆绑的内容(通过 lint + 渲染的参考实现)
| 文件 | 内容 |
|---|---|
| assets/FRAME.md | YUV.AI Neon Phoenix 视频帧规范(基于 HeyGen 的 Coral 包重新品牌化) |
| assets/neural-net-field.js | 确定性、可 seek 的神经网络凤凰 canvas 背景 |
| assets/neural-pulse.json | 手动编写的 Bodymovin Lottie(在 lottie-web 中渲染,而不仅仅是 Skottie) |
| assets/gen_content_lotties.py | 6 个生产级 CONTENT Lottie 的生成器(WhatsApp 折叠、解码光束、眼睛阅读、幽灵线英雄、球体提取、脑火)— 透明、持久+连续、经过 lottie-web 验证 |
| assets/{wa-collapse,decode-beam,eye-read,ghost-line,orb-extract,brain-fire}.json | 生成的 6 个内容 Lottie,可直接使用 |
| assets/manim-scene-template.py | ManimCE 场景模板,霓虹品牌样式,仅文本(无 LaTeX) |
| assets/what_is_nn.py | "什么是神经网络" ManimCE 场景(神经元 → 网络 → 训练,34.5 秒) |
| assets/Anton-Regular.woff2 | 本地 Anton(渲染器不会自动解析;声明 @font-face) |
| references/composition-pattern.md | 完整的多引擎 index.html 模式(场 + Lottie + Manim 片段 + GSAP + 闪光) |
| references/teaser-explainer.md | 电影预告片讲解公式:冷开场猛击 → manim BURSTS → 面对面 → FOMO 蒙太奇 → 悬念;内容同步透明 Lottie 节拍;seek-modulo 修复;预告片音乐合成 |
配套技能
hyperframes(合成合约 — 编写时始终调用)、hyperframes-cli、lottie、video-edit(字幕 + approve 网页应用)、yuv-design-system(品牌)。本技能协调它们。