Cut The Curve logo

Cut The Curve

OrganizationPopular
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]

Overview

Publisherheygen-com
Repositoryhyperframes
Skill namecut-the-curve
Stars
73.3K
Forks
6.6K
Bundled files
1
LicenseApache-2.0
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 1 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by heygen-com on GitHub. Read the source before you install it.

Installation

Install the Cut The Curve AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/heygen-com/hyperframes/tree/main/.agents/skills/cut-the-curve
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/heygen-com/hyperframes.git /tmp/hyperframes
mkdir -p .claude/skills
cp -r /tmp/hyperframes/.agents/skills/cut-the-curve .claude/skills/cut-the-curve
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Cut The Curve in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Cut The Curve on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Cut The Curve is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

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.

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Cut The Curve AI skill do?

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

Why use Cut The Curve on TypingMind?

Because you install it once and use it with any model. Cut The Curve is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Cut The Curve in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/heygen-com/hyperframes/tree/main/.agents/skills/cut-the-curve. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Cut The Curve?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Cut The Curve?

As many as you like. As long as a model supports skills, you can use Cut The Curve with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Cut The Curve AI skill free?

Yes. It is published on GitHub by heygen-com under the Apache-2.0 license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇