Communitygithub.com

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]

Qu'est-ce que cut-the-curve ?

cut-the-curve is a Claude Code agent skill that 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].

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/heygen-com/hyperframes/tree/main/.agents/skills/cut-the-curve

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Cut the Curve — the technique catalog

Five SEAM techniques, one principle: cut at peak velocity, match direction and speed on both sides of the cut — plus the two in-scene techniques (§6 arrivals, §7 slides). The seam LAW — vector law, the current, the ledger, the Seam Gate — lives in motion-doctrine; read it first. This skill is the parameters and mechanics. All GSAP code templates (worker + registry): examples/gsap-implementation.md.

Catalog

#TechniqueScopeAxisUse for
1Zoom-Through (forward)Within-scene text swapZ, toward viewerprogressing deeper into the same thought
2Inverse Zoom-ThroughArrival / payoff beatZ, away from viewersomething bigger lands
3Cut the CurveBetween scenesX / Ythe default boundary, the film's current
4Waterfall CutText-to-text seamX, per-wordword-level handoff between big-text beats
5Rack-Focus Blur-CutSame-surface state swapX / Y / Zthe one cut you want SEEN — a DSLR focus-pull flourish
6Waterfall EntryIn-scene ARRIVAL (no seam)Y, from belowtitle cards, segment openers, list intros
7Nudge CurveIn-scene group slide (no seam)X / Yrepositioning a composed group to make room

Z direction is a sign

"Same axis" is not enough on Z — the sign of d(scale)/dt must match across the cut:

Z vectorExit scaleEntry scaleVariant
Push (forward)growing 1 → 1.2growing 0.75 → 1zoom-through
Pull (back)shrinking 1 → 0.8shrinking 1.25 → 1inverse zoom-through

Banned mirrors: a receding exit answered by a grow-from-small entry (pull flips to push — the common one, since grow-from-small is the default element entrance), and a push exit answered by an oversized retraction. This binds the incoming scene's OWN entrances during the seam window (cut + ~0.5s), not just the wrapper tween: hold the incoming frame composed, or author its entrance to match the sign. Verify per Seam Gate rule 7.

Blur logic (all Z variants)

SubjectPeak blurWhy
Text-scale (headline, word group)10px20px smears letterforms — the cut reads as a glitch, not speed
Full-frame surface (window, card, screenshot)18–20pxlighter blur on a big surface reads as a rendering hiccup

Same peak blur on both sides at the swap frame. Blur the WRAPPER, never children.


1. Zoom-Through (forward)

Z-axis velocity-matched cut; never both texts visible. Everything GROWS: the outgoing text accelerates toward camera, a hard swap hides at peak blur, the incoming text keeps growing into the focal plane. Headlines and short phrases only. Total ≈ 0.4s.

PhaseScaleBlurOpacityEaseDuration
Exit1 → 1.20 → 10px1 → 0.15power3.in (opacity: separate none tween)0.2s
Cut (tl.set)in: 0.7510pxout: 0 / in: 0.15
Entry0.75 → 110 → 0px0.15 → 1expo.out0.5s

Exit opacity MUST be its own linear tween — power3.in holds opacity near 1 too long. On entry all properties share expo.out.

2. Inverse Zoom-Through (backward)

The pull-back mirror: the outgoing element RECEDES; the incoming arrives OVERSIZED (as if just behind camera) and retracts into the focal plane. Everything SHRINKS. Spend on ARRIVAL/payoff beats — a payoff line, a giant reply, a held end-state — never ordinary boundaries. Total ≈ 0.7s (30% exit / 70% entry).

PhaseScaleBlurOpacityEaseDuration
Exit1 → 0.80 → 10px1 → 0.15power3.in (opacity: separate none tween)~0.2s
Cut (tl.set)in: 1.2510pxout: 0 / in: 0.15
Entry1.25 → 110 → 0px0.15 → 1expo.out~0.5s

Blur is 10px text-scale; 18–20px only when both sides are full-bleed surfaces.

Sign discipline: the incoming scene arrives as a composed frame inside the retracting wrapper — no grow-from-small intro in the seam window. Staged entrances happen after the retraction settles, or start ≥1 and retract.

3. Cut the Curve (default scene boundary)

X/Y velocity-matched cut — the default for ALL scene-to-scene boundaries, in the film's current, not an accent. The outgoing hero accelerates in one direction, the cut lands mid-motion, the incoming hero continues the SAME direction and decelerates. Total ≈ 0.6s; directions LEFT / RIGHT / UP / DOWN (default LEFT).

Partial travel: ~12% of frame (≈230px at 1920) — never full off-screen moves.

DirectionExitEntry start → end
Leftwardx: 0 → −230x: +230 → 0
Rightwardx: 0 → +230x: −230 → 0
Upwardy: 0 → −230y: +230 → 0
Downwardy: 0 → +230y: −230 → 0

Mechanics:

  • Mirrored eases: exit power4.in + entry power4.out, same distance and duration — the two halves of one power4.inOut, so velocity matches exactly at the cut.
  • The fade trick: exit opacity completes at ~25–30% of its travel (fade ≈ 0.18–0.3s vs motion 0.3–0.34s); entry ignites at ~0.35 opacity mid-path. Time the last fading element to die right at the cut — a gap where nothing moves reads as dead air.
  • Exit 0.2–0.4s; entry ≥ exit. Optional blur 8–10px.
  • Stage ground: #root must be opaque (background: var(--canvas-deep, var(--canvas, #000))) — the mid-window cut opens a summed-opacity < 1 window that flashes white otherwise (see seam-craft).

push-slide exists but violates partial-travel and mid-motion phase; prefer cut-the-curve.

4. Waterfall Cut (word-by-word cut-the-curve)

Cut-the-curve at WORD granularity — the strongest leftward cut for text-to-text seams. Outgoing words ramp out on their own curves; incoming words cascade in mid-flight — a wave the eye rides across the seam.

Scope: worker-authored inside one multi-beat comp (stacked full-frame .beat layers), NOT a registry/injector type — it tweens word spans, not clip wrappers. The boundary into and out of the text-beat block still gets a normal registry transition. Does not count against the 2–3 transition budget.

ParameterValueWhy
Travel±230px (~12% frame)partial travel + velocity > full-frame push
Exit0.34s power4.inthe acceleration IS the cut
Exit fade0.18s, starts with xword gone by ~25–30% of travel — no smear
Exit stagger+0.022s reading orderthe line peels, not a block slide
Entry0.3s power4.outback half of the composite — velocity match
Entry start opacity0.35mid-path ignition; binary 0→1 pops
Entry gaps0.05s × 0.84 decayaccelerating cascade, resolves composed

Rules:

  • One direction per chain, riding the current. Inverse zoom is the chain's ARRIVAL beat only.
  • Pre-set all words to x: +230, opacity: 0 at build time — immediateRender: false alone leaves un-started words visible at rest.
  • A short first beat may exit whole-line: its fade ends ~0.02s before the cut so it is still streaking when the next words ignite — no dead gap.
  • Transform/opacity only (seek-safe); opaque stage ground applies.

5. Rack-Focus Blur-Cut (the visible cut)

The one variant where the cut is SEEN: a defocus blur SPIKE hides a single-frame hard swap — a handheld-DSLR focus-pull. Use as an occasional flourish for a state swap of the SAME surface within one visual theme; never the default boundary.

Differences from the others: outgoing stays FULLY OPAQUE until the cut (the blur hides the swap — no early fade); eases power2.in / power2.out (soft optics, not momentum).

Rules:

  • Fire only at a narrative beat, ≤ once per ~8s; never mid-caption or during a hold.
  • Cut at PEAK blur (≥6px; peak 8–12px, ≤16–18px max) — swapping on the way up shows the cut.
  • A subtle scale (~1.06 lens-breathing) sells it as optics.
  • Same direction on both sides — the vector law still holds. Entry ≥ exit duration.
  • Blur the wrapper; never blur + opacity in one tween on one element (headless compositing bug); never blur a <video> directly (wrap it).

6. Waterfall Entry (in-scene arrival — not a seam)

Staggered ARRIVAL cascade: words/elements whip in from below (one consistent direction), each starting before the previous settles — an accelerating wave that resolves into a composed layout. Title cards, segment openers, list/feature intros. The seam sibling is §4; do not mix their rules:

§6 Entry (arrival)§4 Waterfall Cut (seam)
OpacityBINARY 0→1 via tl.set at entry — never fadeignites at 0.35 mid-path — the fade IS the velocity trick
Axis defaultY, from belowX, riding the current
Outgoing sidenonewords ramp out on mirrored power4.in

Choreography:

  • Overlap, don't queue — next element starts within ±2 frames of the previous settling; gaps SHRINK across the cascade; the last element snaps.
  • Velocity varies by weight — heavy/anchor elements travel further and longer; light words/punctuation snap in tight:
ParameterAnchor/heavyNormal wordLight/punctuation
Y offset60–80px40–50px30–48px
Duration0.16–0.20s0.13–0.16s0.10–0.13s
Overlap0–2f gap1f overlap1–2f overlap
  • Ease power4.out (expo.out for extra snap); never .inOut on an entry.
  • One direction per cascade.
  • Split the FINAL word into fragments to extend the climax; fragments travel further.
  • Post-settle, the group usually slides to make room for the next beat — that's §7.

7. Nudge Curve (in-scene group slide — not a seam)

Slow-fast-slow repositioning of a composed group (word rows, card stacks, lists) to reveal content or make room. No single built-in ease produces it — power4.inOut smacks to a stop. Chain three tweens on one property:

PhaseEaseDistanceTimeFeel
1 ramp-inpower3.in~10%~20%barely moves — motion registers, no jolt
2 burstnone (linear)~65%~18%~2× average px/frame — purposeful
3 tailpower4.out~25%~62%decaying creep to rest — kills the smack

Rules:

  • The tail is ≥3× the ramp-in in TIME. If it still smacks: extend the tail's time (not distance) or use power5.out.
  • Phase 2 stays linear — easing it loses the burst contrast.
  • Reveal new content DURING phase 2 — the burst masks its appearance.
  • Same ratios vertical; scale distances proportionally, keep the time ratios.

Choosing a Variant

Zoom-ThroughInverse ZoomCut the CurveWaterfall Cut
ScopeWithin-scene text swapArrival/payoff beatBetween scenesText-to-text seam
Z sign / axisgrowing (push)shrinking (pull)X / YX, per-word
Travel/scale1→1.2, then 0.75→11→0.8, then 1.25→1±230px±230px
Peak blur10px text / 18–20 full-frame10px text / 18–20 full-frame8–10px optionalnone
Easespower3.in / expo.outpower3.in / expo.outpower4.in / power4.outpower4.in / power4.out
Feelprogressing througharriving atcarried sidewaysa wave across the seam

Anti-Patterns

Don'tInstead
Two texts visible during a zoom-throughHard cut at blur peak, one text at a time
20px blur on text-scale subjects10px text; 18–20px only full-frame
Inverse-zoom exit → grow-from-small entry (or push → oversized retraction)Match the scale-velocity SIGN; verify at cut±0.1s
Incoming comp's own scale-up intro under a Z-seam wrapper tweenArrive composed; stage entrances after the seam settles or match the sign
Mismatched blur/opacity at the swapIdentical values at the cut frame
Gentle entry easing (power2.out)Mirror the exit: power4.out / expo.out
Full off-screen exits/entriesPartial travel (~12%) + early fade
.inOut eases on either side of a cutMirrored power4.in / power4.out
Lone element fading long before its cutFade ends ~0.02s before the cut, or word-cascade
Equal gaps across a waterfall cascadeShrink gaps ×0.84 per word
Zoom-through on body textHeadlines and short phrases only
Scene cuts without cut-the-curveIt is the default boundary
Consecutive boundaries in opposing directionsOne current; reserved vectors spent on meaning
Unpainted #root behind a mid-window cutOpaque stage ground
Queued entries (each waits for the previous to settle)Overlap ±1–2 frames — the cascade is a wave, not a queue
Same offset/duration for every cascade elementVary by weight: anchors travel further, punctuation snaps
Gradual opacity fade on a §6 arrivalBinary 0→1 via tl.set — fading fights the snap (seam cuts fade; arrivals don't)
Single ease for a group slide (power4.inOut, slow())The §7 three-phase chain
Nudge tail shorter than 3× the ramp-inExtend the tail's TIME, not its distance

Code

All GSAP templates — worker-authored versions, registry gsap_templates, the combined cut-the-curve + zoom, waterfall DOM/CSS/JS, rack-focus — live in examples/gsap-implementation.md.

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/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.

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/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.

Skills associés