1实现原理 · 为什么它能做到
本体是一份压缩到 6KB 的 GSAP 速查手册,按 API 面组织(Tween 方法 → vars 常用项 → transform 别名 → 缓动 → defaults → 播放控制 → matchMedia → Timeline → 性能 → 参考文件),供 agent 在写 HyperFrames composition 时现查现用。
GSAP animation reference for HyperFrames. Covers gsap.to(), from(), fromTo(), easing, stagger, defaults, timelines (gsap.timeline(), position parameter, labels, nesting, playback), and performance (transforms, will-change, quickTo).
用「约定」替 agent 省掉踩坑:强制 camelCase 属性名、首选 transform 别名而非拼 transform 字符串、优先 autoAlpha 而非 opacity。
Always use **camelCase** property names (e.g. `backgroundColor`, `rotationX`). … - **autoAlpha** — prefer over `opacity`. At 0: also sets `visibility: hidden`.
把 Timeline 立为主推编排手段,并给出位置参数的四种写法(绝对值 / `+=` `-=` 相对 / 标签 / `<` `>` 对齐)。
- **Alignment**: `"<"` — same start as previous; `">"` — after previous ends; `"<0.2"` — 0.2s after previous starts
性能章的判据是「留在合成器上」:只动 x/y/scale/rotation/opacity,避免动布局属性;will-change 只给真的会动的元素;高频更新用 quickTo;能用 stagger 就别写多 tween;并在不需要时清理。
Animating `x`, `y`, `scale`, `rotation`, `opacity` stays on the compositor. Avoid `width`, `height`, `top`, `left` when transforms achieve the same effect.
无障碍与响应式用 gsap.matchMedia() 处理:条件不匹配时自动 revert,示例直接接了 prefers-reduced-motion。
Runs setup only when a media query matches; auto-reverts when it stops matching. … reduceMotion: "(prefers-reduced-motion: reduce)",
references/effects.md 提供两个 drop-in 效果(打字机、音频可视化),并强调所有效果都遵守 HyperFrames 的确定性规则。
All effects follow HyperFrames composition rules — deterministic, no randomness, timelines registered via `window.__timelines`.
配一个 Python 脚本把音频转成逐帧可视数据:ffmpeg 解码为单声道 44.1kHz 样本,numpy 做 RMS + 对数频段 FFT,输出可直接嵌进 composition 的 JSON。
Outputs JSON with RMS amplitude and frequency band data at the target FPS, ready to embed in a HyperFrames composition. … cmd = [ "ffmpeg", "-i", path, "-vn", "-ac", "1", "-ar", str(SAMPLE_RATE), "-f", "s16le", "-acodec", "pcm_s16le", "-loglevel", "error", "pipe:1", ] … result = subprocess.run(cmd, capture_output=True)
2核心能力
3外部依赖
| 类型 | 依赖 |
|---|---|
| package | GSAP 3.14.2(随仓库 npm ci 安装;上游来自 heygen-com/hyperframes 技能生态) |
| network | cdn.jsdelivr.net(**产物期**:effects.md 给出的示例片段在生成的 HTML 里用 script 标签引 [email protected] 与 TextPlugin;执行 skill 时并不外发) |
| cli | ffmpeg(extract-audio-data.py 用它解码音频为 s16le 管道) |
| package | numpy(脚本内 FFT/RMS 计算,需 pip 安装) |
| cli | Python 3.9+(跑 extract-audio-data.py) |
4风险提醒 风险提醒:蓝色 · 知晓即可
- 不是库、不会替你装 GSAP — 它只提供知识与示例;真正依赖来自仓库 npm ci(gsap 3.14.2)。在别处单独用这个 skill 时要自己装 GSAP,否则抄下来的代码跑不起来。
- 示例片段在产物里默认引公网 CDN — effects.md 的 script 标签指向 cdn.jsdelivr.net 的 [email protected];作者在仓库文档里提示最终渲染前应本地化资产,若照抄不本地化,成片构建会依赖外网可用性。
- 音频可视化脚本有隐性依赖与性能开销 — 需要 ffmpeg + numpy;按帧循环做 FFT,长音频(小时级)会显著耗时耗内存,且 FFT 参数(4096/30Hz-16kHz)是按音乐调过的,语音场景未必合适。
- 文档随 GSAP 版本漂移 — 内容针对 gsap 3.14.2 语境;GSAP 后续版本新增/调整 API 时,这份速查不会自动更新,可能给出过时写法。
5第二遍独立确认
- [ok] 文件清单与类型 — SKILL.md(6.4KB 文档)、references/effects.md(8.8KB 文档)、scripts/extract-audio-data.py(6.5KB 脚本)、NOTICE.txt(228B 声明);无隐藏文件、无 node_modules、无二进制资产。
- [ok] 网络外发反例搜索 — 目录内 3 条 http 命中:effects.md 两行 jsdelivr script 标签(产物期示例)与 NOTICE.txt 的 https://github.com/heygen-com/hyperframes(出处链接)。fetch( 命中位于『**Do NOT use async `fetch()` to load audio data.**』这句告诫中,非调用。
- [ok] 凭证面反例搜索 — 0 处 env/API_KEY/TOKEN/SECRET 命中;Python 脚本 import 仅 argparse/json/subprocess/sys/numpy。
- [ok] description 覆盖度核对 — 描述里点名的每一项都能在正文定位到专节:Core Tween Methods / Common vars(stagger、defaults)/ Easing / Timelines(position parameter、labels、nesting、playback)/ Performance(transforms、will-change、quickTo)。无夸大。
- [ok] 脚本产物与用法核对 — main() 用 argparse 提供 input/-o/--fps/--bands,默认 audio-data.json、30fps、16 段;输出结构含 duration/fps/bands/totalFrames/frames[{time,rms,bands[]}],与 effects.md 里展示的 JSON 结构一致。
- [ok] 上游归属与许可 — NOTICE.txt 声明来源 heygen-com/hyperframes(Apache-2.0),并注明 student-kit 只做 runtime-relative 路径与可移植打包;与仓库 skills-lock.json 中 gsap 条目指向的 source 一致。
6结论
68a50bcbc9292840…0d30152a82