diff --git a/optional-skills/creative/hyperframes/SKILL.md b/optional-skills/creative/hyperframes/SKILL.md new file mode 100644 index 0000000000..70d1ae240b --- /dev/null +++ b/optional-skills/creative/hyperframes/SKILL.md @@ -0,0 +1,168 @@ +--- +name: hyperframes +description: Create HTML-based video compositions, animated title cards, social overlays, captioned talking-head videos, audio-reactive visuals, and shader transitions using HyperFrames. HTML is the source of truth for video. Use when the user wants a rendered MP4/WebM from an HTML composition, wants to animate text/logos/charts over media, needs captions synced to audio, wants TTS narration, or wants to convert a website into a video. +version: 1.0.0 +author: heygen-com +license: Apache-2.0 +prerequisites: + commands: [node, ffmpeg, npx] +metadata: + hermes: + tags: [creative, video, animation, html, gsap, motion-graphics] + related_skills: [manim-video, meme-generation] + category: creative + requires_toolsets: [terminal] +--- + +# HyperFrames + +HTML is the source of truth for video. A composition is an HTML file with `data-*` attributes for timing, a GSAP timeline for animation, and CSS for appearance. The HyperFrames engine captures the page frame-by-frame and encodes to MP4/WebM with FFmpeg. + +**Complement to `manim-video`:** Use `manim-video` for mathematical/geometric explainers (equations, 3B1B-style). Use `hyperframes` for motion-graphics, talking-head with captions, product tours, social overlays, shader transitions, and anything driven by real video/audio media. + +## When to Use + +- User asks for a rendered video from text, a script, or a website +- Animated title cards, lower thirds, or typographic intros +- Captioned narration video (TTS + captions synced to waveform) +- Audio-reactive visuals (beat sync, spectrum bars, pulsing glow) +- Scene-to-scene transitions (crossfade, wipe, shader warp, flash-through-white) +- Social overlays (Instagram/TikTok/YouTube style) +- Website-to-video pipeline (capture a URL, produce a promo) +- Any HTML/CSS/JS animation that must render deterministically to a video file + +Do **not** use this skill for: +- Pure math/equation animation (→ `manim-video`) +- Image generation or memes (→ `meme-generation`, image models) +- Live video conferencing or streaming + +## Quick Reference + +```bash +npx hyperframes init my-video # scaffold a project +cd my-video +npx hyperframes lint # validate before preview/render +npx hyperframes preview # live-reload browser preview (port 3002) +npx hyperframes render --output final.mp4 # render to MP4 +npx hyperframes doctor # diagnose environment issues +``` + +Render flags: `--quality draft|standard|high` · `--fps 24|30|60` · `--format mp4|webm` · `--docker` (reproducible) · `--strict`. + +Full CLI reference: [references/cli.md](references/cli.md). + +## Setup (one-time) + +```bash +bash "$(dirname "$(find ~/.hermes/skills -path '*/hyperframes/SKILL.md' 2>/dev/null | head -1)")/scripts/setup.sh" +``` + +The script: +1. Verifies Node.js >= 22 and FFmpeg are installed (prints fix instructions if not). +2. Installs the `hyperframes` CLI globally (`npm install -g hyperframes@>=0.4.2`). +3. Pre-caches `chrome-headless-shell` via Puppeteer — **required** for best-quality rendering via Chrome's `HeadlessExperimental.beginFrame` capture path. +4. Runs `npx hyperframes doctor` and reports the result. + +See [references/troubleshooting.md](references/troubleshooting.md) if setup fails. + +## Procedure + +### 1. Plan before writing HTML + +Before touching code, articulate at a high level: +- **What** — narrative arc, key moments, emotional beats +- **Structure** — compositions, tracks (video/audio/overlays), durations +- **Visual identity** — colors, fonts, motion character (explosive / cinematic / fluid / technical) +- **Hero frame** — for each scene, the moment when the most elements are simultaneously visible. This is the static layout you'll build first. + +If the user hasn't specified a visual style, ask three questions before writing HTML: mood, light/dark, any brand colors/fonts/references. Write a short `DESIGN.md` at the project root capturing the answers. + +### 2. Scaffold + +```bash +npx hyperframes init my-video --non-interactive +``` + +Templates: `blank`, `warm-grain`, `play-mode`, `swiss-grid`, `vignelli`, `decision-tree`, `kinetic-type`, `product-promo`, `nyt-graph`. Pass `--example ` to pick one, `--video clip.mp4` or `--audio track.mp3` to seed with media. + +### 3. Layout before animation + +Write the static HTML+CSS for the **hero frame first** — no GSAP yet. The `.scene-content` container must fill the scene (`width:100%; height:100%; padding:Npx`) with `display:flex` + `gap`. Use padding to push content inward — never `position: absolute; top: Npx` on a content container (content overflows when taller than the remaining space). + +Only after the hero frame looks right, add `gsap.from()` entrances (animate **to** the CSS position) and `gsap.to()` exits (animate **from** it). + +See [references/composition.md](references/composition.md) for the full data-attribute schema and composition rules. + +### 4. Animate with GSAP + +Every composition must: +- Register its timeline: `window.__timelines[""] = tl` +- Start paused: `gsap.timeline({ paused: true })` — the player controls playback +- Use finite `repeat` values (no `repeat: -1` — breaks the capture engine). Calculate: `repeat: Math.ceil(duration / cycleDuration) - 1`. +- Be deterministic — no `Math.random()`, `Date.now()`, or wall-clock logic. Use a seeded PRNG if you need pseudo-randomness. +- Build synchronously — no `async`/`await`, `setTimeout`, or Promises around timeline construction. + +See [references/gsap.md](references/gsap.md) for the core GSAP API (tweens, eases, stagger, timelines). + +### 5. Transitions between scenes + +Multi-scene compositions require transitions. Rules: +1. **Always use a transition between scenes** — no jump cuts. +2. **Always use entrance animations** on every scene element (`gsap.from(...)`). +3. **Never use exit animations** except on the final scene — the transition IS the exit. +4. The final scene may fade out. + +Use `npx hyperframes add ` to install shader transitions (`flash-through-white`, `liquid-wipe`, etc.). Full list: `npx hyperframes add --list`. + +### 6. Audio, captions, TTS + +- **Audio:** always a separate `