Communitygithub.com

heygen-com/changelog-video

Turn a weekly changelog .md into a finished branded changelog video (square 1080, ~45-60s, Annie VO, animated brand background, mock-UI visualizations, lowkey captions). Use when the user provides a changelog/digest markdown and wants the weekly video, or says "changelog video". Self-contained — fonts, background, lexicon, and scripts ship in this skill.

Was ist changelog-video?

changelog-video is a Claude Code agent skill that turn a weekly changelog .md into a finished branded changelog video (square 1080, ~45-60s, Annie VO, animated brand background, mock-UI visualizations, lowkey captions). Use when the user provides a changelog/digest markdown and wants the weekly video, or says "changelog video". Self-contained — fonts, background, lexicon, and scripts ship in this skill.

Funktioniert mitClaude CodeCodex CLICursor
npx skills add https://github.com/heygen-com/hyperframes/tree/main/.agents/skills/changelog-video

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Changelog → Branded Video

Input: a changelog .md (themes + items, like the weekly HyperFrames digest). Output: a lint-clean, seam-gate-green HyperFrames project in projects/active/weekly-changelog-<range>/. Render only when asked.

Load first, non-negotiable: motion-doctrine (+ cut-the-curve, oversized-cursor if a cursor appears, seam-craft) and captions-overlay. This skill supplies the changelog-specific pipeline; the doctrine supplies the motion law.

The prime directive: visualize, don't list

Every theme is illustrated by an animated mock of the actual UI or a faithful analog acting out the change in experience — never text bullets. Route every theme/item through references/visualization-registry.md BEFORE writing the script; the registry decides ui-recreate / ui-analog / terminal / checklist. Text checklist is the LAST resort, reserved for genuinely non-visual items (reliability fix lists).

Pipeline

0 · Bootstrap the project from THIS skill's assets — non-negotiable

Do this before writing any composition HTML. Skipping it always produces a video that looks like a similar project you built before, NOT this skill's brand — that's the single most common way this skill goes off-brand. The skill's assets, fonts, and scaffold are the skill; the SKILL.md prompt is a router.

mkdir -p project/assets/fonts
cp <SKILL_DIR>/assets/fonts/*.woff2 project/assets/fonts/
cp <SKILL_DIR>/assets/bgm.mp3 project/bgm.mp3
ffmpeg -y -stream_loop 15 -i <SKILL_DIR>/assets/bg-pattern.mp4 -t <TOTAL> \
  -vf "scale=1080:1080,fps=30,eq=saturation=0.72,[email protected]:t=fill" \
  -an -c:v libx264 -crf 20 -pix_fmt yuv420p project/assets/bg-pattern-<TOTAL>s.mp4
cp <SKILL_DIR>/examples/master-skeleton.html project/index.html

Then read references/build-spec.md end-to-end (not skimmed) — it defines the brand tokens (TT Norms Pro + ABC Solar Display + TT Norms Mono, cream #f5f6f4, rationed green #5ef17c, glass cards with green-tinted borders, kicker/sec-chip pill shape, 32px caption rail at top: 990) that every scene inherits from the scaffold.

Only THEN begin steps 1-6 below. Steps 1-4 (parse, route, script, VO) plan what goes into the scaffold; step 5 fills placeholders (<RANGE>, <TOTAL>, <CUT_N>, <DUR_N>, scene bodies) inside the already-copied project/index.html — you do NOT rewrite the scaffold's chrome, fonts, palette, or layout shell.

If you catch yourself reaching for cp on a prior video's index.html, or writing your own @font-face declarations, or designing a WebGL shader background instead of using the encoded bg-pattern MP4 above: STOP. Delete the current index.html and restart at the cp of the master-skeleton scaffold. Rebuilding scene content on the right scaffold is cheaper than retrofitting brand into the wrong scaffold.

1 · Parse + editorial cut

  • Extract: week range, headline stats (releases, commits), themes, items.
  • Budget: 45-60s total. Title ≤2s, outro ≤3.5s, 4 themes ≈ 9-12s each.
  • Per theme keep ONE hero visualization + at most 3 spoken items. Everything else exists only as the outro's "full digest" pointer. Cutting is the job: a changelog with 30 items still yields ≤14 spoken beats.
  • Order themes by story: marquee feature → product surface → performance → reliability (the digest usually already reads this way).

2 · Visualization routing

For each theme, pick the surface from references/visualization-registry.md and write one line: theme → surface → the 2-4 sequenced actions the mock performs, each tied to a script phrase. If no registry surface fits and no faithful analog exists, it's a checklist scene — don't invent fake UI for something we can't represent honestly.

3 · Two-layer script (spoken vs display)

Write the script as token lines per references/script-voice.md: conversational register, every technical term carrying a spoken phonetic form from references/lexicon.json while display keeps standard spelling. Captions show display; the VO reads spoken. Any term not in the lexicon: STOP and ask the user how it's pronounced, then add it to the lexicon. Save as script-tokens.json in the project.

4 · VO — Annie (HeyGen, pinned)

# spoken-layer text only; words JSON = ground-truth timestamps of the SPOKEN text
# Repo-native path: the changelog-video skill runs from the hyperframes repo root,
# so it uses the tracked hyperframes-media TTS helper directly (no `npx hyperframes
# skills` install step). If you've copied the skill into another repo, swap in
# your own path to the media-use / hyperframes-media heygen-tts.mjs.
node skills/hyperframes-media/scripts/heygen-tts.mjs ./vo-spoken.txt \
  -o voiceover.mp3 --words vo-words.json \
  --voice 330290724a1b470fb63153f34d4c0183   # Annie — lifelike (do not substitute)

Requires heygen CLI ≥0.3.0 authenticated (heygen auth login --oauth). Then align spoken timestamps back to display tokens:

node <SKILL_DIR>/scripts/align-captions.mjs \
  --tokens script-tokens.json --words vo-words.json --out captions.json

captions.json is the caption-rail input (display spelling, spoken timing). The aligner prints MISMATCH warnings — resolve every one before building (usually a lexicon spelling the TTS renders as multiple words). The audio is the clock: all beat times come from vo-words.json; a VO regen re-opens every seam.

Word-timings are a hard gate. Before moving on to step 5, verify vo-words.json is non-empty and has a words: [...] array with start/end per word. If it's empty (0 bytes) or missing the array — a known failure mode when the TTS provider returns audio but no timestamp payload — DO NOT proceed without them. Fallback: forced-align the produced audio against the display script using local whisper:

uvx --from openai-whisper whisper voiceover.mp3 \
  --model base.en --language en --word_timestamps True \
  --output_format json --output_dir .
# then run align-captions.mjs with --words voiceover.json (same shape)

Whisper mishears TTS renderings ("gee-sap" → "gsap", "heyjen" → "hey Jen", etc.) — captions still use the DISPLAY spelling from script-tokens.json; whisper only supplies the timestamps. align-captions.mjs handles the join. This fallback is the difference between a captioned build and a silently uncaptioned one.

5 · Build

Follow references/build-spec.md exactly: brand tokens + fonts (bundled in <SKILL_DIR>/assets/), the animated background encode, scene scaffold, chrome, caption rail, one rationed green moment per scene. Then the doctrine order: ledger.json (all ordinary seams cut-the-curve LEFT) → seam-stamp → internal beats on VO words → seam-gate verify.

Captions are non-optional. The master-skeleton ships a caption-rail IIFE that reads a LINES array — leaving that array empty is a shipped bug, not a style choice. Populate it from captions.json before proceeding to step 6:

// paste in place of "const LINES = /* … */ []" in the caption-rail IIFE:
const LINES = /* contents of captions.json */ [
  { id: 0, end: 2.74, w: [["This", 0.0], ["week,", 0.30], …] },
  …
];

If align-captions.mjs was skipped or LINES is [], the frame check in step 6 will fail — do not paper over it by removing #cap-line from the scaffold.

6 · Gates (all green before presenting)

  1. node packages/cli/bin/hyperframes.mjs check --caption-zone "x0=0;y0=.90;x1=1;y1=1;severity=error;seek=.02,.06,.10,.14,.18,.22,.26,.30,.34,.38,.42,.46,.50,.54,.58,.62,.66,.70,.74,.78,.82,.86,.90,.94,.98" (or the installed hyperframes CLI from the repo-local skills/hyperframes-cli/ skill) — 0 errors (contrast: dim text ≥ .66 alpha; scene content stays above the caption rail). Do NOT reach for npx hyperframes@latest; the tracked repo-local CLI is the source of truth for the composition contract this skill produces against.
  2. seam-gate.mjs verify — 0 fail.
  3. Restart the preview server (it caches the bundle), spot-check 3-4 beats via __player.seek on the raw comp page.
  4. Do NOT render unless the user asks. After a requested render, verify frames from the MP4 (ffmpeg -ss <t> … -frames:v 1): captions present, background video not black, no tiny/frozen frames.
  5. Caption presence gate — hard fail. Sample 3-4 frames spread across the VO's spoken window (e.g. t=3, t=15, t=30, t=42 for a 48s VO) and confirm the caption rail at top: 990 renders visible text on each. If any frame in a spoken interval is missing captions, the build ships uncaptioned — treat it as a red gate and re-check step 5's LINES population. This is exactly what went wrong on the Jul 13-20 v4 build.

Project layout

projects/active/weekly-changelog-<range>/
├── index.html            # single-doc master (scenes as slides, stamped seams)
├── ledger.json           # vector ledger (seam-stamp input)
├── script-tokens.json    # two-layer script (source of truth for VO + captions)
├── vo-spoken.txt         # generated: spoken layer, one line
├── voiceover.mp3 + vo-words.json + captions.json
├── bgm.mp3               # copy from <SKILL_DIR>/assets/bgm.mp3 (the house track) unless the user supplies one
└── assets/fonts/ + assets/bg-pattern-<dur>s.mp4

Anti-patterns

Don'tInstead
Bullet-point slides for UI changesMock the surface acting out the change
Fake UI for un-representable itemsHonest checklist scene
Plain "JSON"/"CLI" in the TTS textLexicon spoken forms; display stays standard
Phonetic spellings in captionsCaptions always render the display layer
Guessing an unknown term's pronunciationAsk, then grow the lexicon
Speaking every changelog item≤3 per theme; the digest link carries the rest
Green accents everywhereOne green moment per scene (#5ef17c)
Starting from a prior video's index.htmlStep 0 — copy examples/master-skeleton.html from this skill into project/index.html, always
Hand-crafted @font-face / WebGL shader / custom BGMStep 0 — copy this skill's assets/ verbatim; the skill's assets ARE the brand
Delivered without CloudFront invalidationRun aws cloudfront create-invalidation on distribution E2BSLVSZ7FG3U0 for the exact path after any S3 replace — CDN caches the old file otherwise
Shipping with the LINES array empty in the scaffoldStep 4 must produce a populated captions.json; step 5 must paste it into the IIFE; step 6 gate 5 must confirm captions on rendered frames. An empty LINES = uncaptioned ship = re-do the run
No vo-words.json → skip captions and ship anywayFall back to whisper forced alignment on the produced audio; captions are non-optional

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

heygen-com/animejs

Anime.js adapter patterns for HyperFrames. Use when writing Anime.js animations or timelines inside HyperFrames compositions, registering animations on window.__hfAnime, making Anime.js seek-driven and deterministic, or translating Anime.js examples into render-safe HyperFrames HTML.

heygen-com/claude-design-hyperframes

Use when running inside Claude Design specifically. Produces a valid, brand-accurate HyperFrames video draft using pre-valid skeletons. For Claude Code / Cursor / Codex, use the `hyperframes` skill instead.

heygen-com/contribute-catalog

Author a new HyperFrames registry block (caption style, VFX block, transition, lower third) or component (text effect, overlay, snippet) and ship it as an upstream PR to the hyperframes repo. Use ONLY when the user wants to CONTRIBUTE to the public catalog — for in-project caption/transition authoring use the `hyperframes` skill, for installing existing registry items use the `hyperframes-registry` skill.

heygen-com/css-animations

CSS animation adapter patterns for HyperFrames. Use when authoring CSS keyframes, animation-delay based timing, animation-fill-mode, animation-play-state, or CSS-only motion that HyperFrames must seek deterministically during preview and rendering.

heygen-com/cut-the-curve

The technique catalog: five velocity-matched SEAMS (zoom-through, INVERSE zoom-through, cut-the-curve, waterfall cut, rack-focus blur-cut) plus the two in-scene techniques — waterfall ENTRY (staggered arrival cascades for title cards / segment openers) and the nudge curve (slow-fast-slow three-phase group slides). Covers partial-travel (~12% of frame) velocity matching via mirrored power4 eases, the Z scale-sign rule, size-scaled blur (10px text / 18-20px full-frame), word-by-word staggered cuts, cascade pacing by element weight, and the 10/65/25 slide ratio. Read before authoring any transition, text-beat handoff, kinetic text entry, or group reposition. [depth, zoom, inverse-zoom, scale-sign, mirrored-zoom, rack-focus, pacing, velocity, cut-the-curve, waterfall, stagger, cascade, kinetic-text, title-card, segment-opener, nudge, slide, easing, group-motion, z-depth, motion-graphics, cinematic, transition, blur, directional-continuity]

heygen-com/embedded-captions

Add captions or subtitles to an existing single-subject talking-head video without editing the footage. Use for plain verbatim captions, cinematic captions embedded behind the subject, VFX captions, “炸/特效/酷炫字幕,” or a named identity from the 35-style catalog. Route by visual identity, not by backend engine. The quiet `anchor` rail is the default; embed every word only when the user explicitly wants a fully cinematic treatment. The workflow runs locally end to end, including transcription and subject matting; split multi-shot footage before applying it.

heygen-com/faceless-explainer

Turn arbitrary text — an article, notes, a topic, a brief — into a faceless explainer video: there is no site or footage to capture, so the visuals are invented per scene (typography, abstract graphics, diagrams, data-viz). Use for topic explainers, concept breakdowns, how-tos, listicles. Not a video built from a website (/product-launch-video — promo or tour). Unclear → /hyperframes.

heygen-com/figma

Import Figma content into a HyperFrames composition — rendered assets, brand tokens, components, storyboard sections → reconstructed motion (frames read as states, not slides) (REST/CLI), connector-assisted motion when available, and shaders from a connector or native export. Use when the user pastes a figma.com link or asks to bring a Figma design, frame, logo, brand, or animation into a video/composition.

heygen-com/general-video

Author or edit a custom HyperFrames composition when no specialized workflow fits, or when BRIEF.md sets flow: companion. Use for longer or multi-scene pieces, brand and sizzle reels, montages, static loops, static title cards, footage remixes, and freeform builds. Use motion-graphics instead for a short unnarrated motion-first unit, including an animated title. Route fresh creation through hyperframes before using this skill.

heygen-com/gsap

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). Use when writing GSAP animations in HyperFrames compositions.

heygen-com/hyperframes

Create video compositions, animations, title cards, overlays, captions, voiceovers, audio-reactive visuals, and scene transitions in HyperFrames HTML. Use when asked to build any HTML-based video content, add captions or subtitles synced to audio, generate text-to-speech narration, create audio-reactive animation (beat sync, glow, pulse driven by music), add animated text highlighting (marker sweeps, hand-drawn circles, burst lines, scribble, sketchout), or add transitions between scenes (crossfades, wipes, reveals, shader transitions). Covers composition authoring, timing, media, and the full video production workflow. For dev-loop CLI commands (init, lint, inspect, preview, render) see the hyperframes-cli skill; for asset preprocessing commands (tts, transcribe, remove-background) see the hyperframes-media skill.

heygen-com/hyperframes-animation

All animation knowledge for HyperFrames — atomic motion rules, multi-phase scene blueprints, scene transitions, broader motion-design techniques, AND the seven runtime adapters (GSAP default, plus Lottie, Three.js, Anime.js, CSS keyframes, Web Animations API, TypeGPU). Use for any motion or animation task: pick 2-4 rules and compose, or load a blueprint, or look up runtime-specific API (e.g. GSAP eases / Lottie player / Three.js mixer). Also covers auditing an existing composition's choreography (animation map) and 24 named text-animation effects. HyperFrames-native: single paused timeline, seek-safe, deterministic.

heygen-com/hyperframes-audio

Use when audio already placed in a HyperFrames composition needs to be mixed: fade-in/fade-out, crossfade, track gain or volume, volume automation, ducking, a music bed that fights a voiceover (voiceover carve), effects on a track (EQ, compressor, limiter, gate, saturation, delay, reverb, chorus, phaser, bitcrush), automation envelopes drawn on a track's volume or any effect parameter, or one submix bus carrying a chain, a fader and an automation clock for several tracks at once (`<hf-audio-group>`). Don't use for sourcing or generating audio — finding BGM, SFX, or making a voiceover is `/media-use`. Don't use for clip timing or track layout, which is `/hyperframes-core`.

heygen-com/hyperframes-cli

HyperFrames CLI dev loop — `npx hyperframes` for scaffolding (init), validation (lint, inspect), preview, render, and environment troubleshooting (doctor, browser, info, upgrade). Use when running any of these commands or troubleshooting the HyperFrames build/render environment. For asset preprocessing commands (`tts`, `transcribe`, `remove-background`), invoke the `hyperframes-media` skill instead.

heygen-com/hyperframes-core

The HyperFrames composition contract — build one renderable project. Use for composition structure, the `data-*` timing attributes, `class="clip"`, tracks, sub-compositions, variables, framework-owned media playback, deterministic-render rules, and validation. Read before writing composition HTML.

heygen-com/hyperframes-creative

Non-animation creative direction for HyperFrames videos. Use for design spec (frame.md / design.md) handling, palettes, typography, narration, beat planning, audio-reactive visuals, composition patterns, and brand / style decisions. For atomic motion patterns and scene blueprints, use `hyperframes-animation`.

heygen-com/hyperframes-keyframes

Use when a HyperFrames composition needs a punch-in, punch-out, zoom, reframe, Ken Burns treatment, camera move, visual match/whip handoff, or other seek-safe 2D/3D keyframes; also for GSAP, CSS keyframes, Anime.js, WAAPI, FLIP, paths, masks, SVG morph/draw, text trails, 3D depth, or `hyperframes keyframes` diagnostics. Don't use for broad scene strategy, brand design, media sourcing, captions, or general video planning.

heygen-com/hyperframes-media

Asset preprocessing for HyperFrames compositions — multi-provider TTS (HeyGen / ElevenLabs / Kokoro local), multi-provider BGM (Google Lyria / local MusicGen), Whisper transcription, background removal, and caption authoring. Use for npx hyperframes tts, bgm, transcribe, remove-background, voice/provider selection, music-mood prompting, captions / subtitles / lyrics / karaoke / per-word styling.

heygen-com/hyperframes-registry

Install and wire registry blocks and components into HyperFrames compositions. Use when running hyperframes add, installing a block or component, wiring an installed item into index.html, or working with hyperframes.json. Covers the add command, install locations, block sub-composition wiring, component snippet merging, registry discovery, and authoring a new block or component to contribute upstream (idea → scaffold → validate → PR).

heygen-com/lottie

Lottie and dotLottie adapter patterns for HyperFrames. Use when embedding lottie-web JSON animations, .lottie files, @lottiefiles/dotlottie-web players, registering instances on window.__hfLottie, or making After Effects exports deterministic in HyperFrames.

Verwandte Skills