mcpField
C
cut-the-curve

cut-the-curve

github.com/heygen-com创意与媒体74.7k60.5k 次安装今天更新
代码仓库

关于 cut-the-curve

cut-the-curve 是供 Agent 使用的 HTML 视频动画技法目录,提供 GSAP 动画规范。内容包括速度匹配的场景转场,以及文字级级联和场景内的群组移动。

主要功能

  1. 01七种转场与运动技法
  2. 02速度匹配的场景剪辑
  3. 03缩放与模糊剪辑变体
  4. 04文字级级联转场
  5. 05级联入场与群组滑动

适用场景

  1. 01为场景边界选择转场
  2. 02制作视频节拍间的文字动画
  3. 03引入标题或列表
  4. 04移动群组以显露内容

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/heygen-com/hyperframes --skill cut-the-curve

安装后在 Claude Code 中输入/cut-the-curve确认已加载。

详细介绍

Cut the Curve — 技术目录

五种 SEAM 技术,遵循同一原则:在速度峰值处剪切,并确保剪切两侧的方向和速度匹配——再加上两种场景内技术(§6 入场、§7 滑动)。 接缝 LAW——向量定律、当前、账本、Seam Gate——都位于 motion-doctrine 中;请先阅读。本文档介绍参数和机制。 所有 GSAP 代码模板(worker + registry):examples/gsap-implementation.md。

目录

#技术范围轴适用场景
1Zoom-Through(向前)场景内文本切换Z,朝向观众深入同一想法
2Inverse Zoom-Through入场/揭晓节拍Z,远离观众更宏大的事物登场
3Cut the Curve场景之间X / Y默认边界,影片的当前
4Waterfall Cut文本到文本的接缝X,逐词大字节拍之间逐词交接
5Rack-Focus Blur-Cut同一表面状态切换X / Y / Z唯一需要让观众看见的剪切——DSLR 拉焦效果
6Waterfall Entry场景内 ARRIVAL(无接缝)Y,从下方标题卡、片段开场、列表引入
7Nudge Curve场景内整体滑动(无接缝)X / Y重新摆放已编排的整体,为其他内容腾出空间

Z 方向的符号

在 Z 轴上,“同一轴”还不够——剪切两侧的 d(scale)/dt 符号必须匹配:

Z 向量退出缩放入场缩放变体
推进(向前)变大 1 → 1.2变大 0.75 → 1zoom-through
拉远(向后)变小 1 → 0.8变小 1.25 → 1inverse zoom-through

禁止的镜像:远离的退出接上从小变大的入场(拉远反转成推进——这是常见情况,因为从小变大是元素默认的入场方式);以及推进退出接上从超大状态缩回。这一要求也适用于接缝窗口期间(剪切 + 约 0.5s)传入场景自身的入场动画,而不仅仅是容器补间:保持传入画面已编排好的状态,或者编写符号匹配的入场动画。请按照 Seam Gate 规则 7 进行验证。

模糊逻辑(所有 Z 变体)

主体峰值模糊原因
文本缩放(标题、词组)10px20px 会让字形拖影——剪切看起来像故障,而不是速度
全帧表面(窗口、卡片、屏幕截图)18–20px大表面上的轻微模糊看起来像渲染卡顿

交换帧两侧的峰值模糊必须相同。模糊容器,绝不要模糊子元素。


1. 穿透式缩放(向前)

沿 Z 轴速度匹配的切换;两段文本绝不同时可见。 所有内容都放大:即将离场的文本加速朝镜头移动,在模糊峰值处通过硬切换隐藏,随后入场文本继续放大,进入焦平面。仅用于标题和短语。总时长约为 0.4s。

阶段缩放模糊不透明度缓动时长
离场1 → 1.20 → 10px1 → 0.15power3.in(不透明度:单独使用 none 补间)0.2s
切换(tl.set)入场:0.7510px出场:0 / 入场:0.15——
入场0.75 → 110 → 0px0.15 → 1expo.out0.5s

离场不透明度必须使用独立的线性补间——power3.in 会让不透明度长时间保持在接近 1 的状态。 入场时,所有属性都使用 expo.out。

2. 反向穿透式缩放(向后)

向后拉远的镜像效果:即将离场的元素后退;入场元素以超大尺寸出现(仿佛就在镜头之后),再缩回焦平面。所有内容都缩小。用于强调抵达/收束的段落——如揭晓台词、巨大的回复、定格的结尾状态——而非普通的边界切换。总时长约为 0.7s(离场占 30%/入场占 70%)。

阶段缩放模糊不透明度缓动时长
离场1 → 0.80 → 10px1 → 0.15power3.in(不透明度:单独使用 none 补间)~0.2s
切换(tl.set)入场:1.2510px出场:0 / 入场:0.15——
入场1.25 → 110 → 0px0.15 → 1expo.out~0.5s

模糊度按文字尺寸设为 10px;仅当两侧都是全出血画面时才使用 18–20px。

符号规则: 入场场景应作为一个已编排好的画面置于收缩中的包装层内到达——切换衔接期间不得从小尺寸放大出现。分阶段入场应在收缩稳定后进行,或从 ≥1 的尺寸开始并收缩。

3. 切断曲线(默认场景边界)

沿 X/Y 轴进行速度匹配切换——这是所有场景间边界的默认方式,是影片中的常规手法,而非强调效果。即将离场的主视觉元素沿一个方向加速,切换在运动途中发生,入场的主视觉元素沿相同方向继续运动并减速。总时长约为 0.6s;方向为 LEFT / RIGHT / UP / DOWN(默认 LEFT)。

部分位移: 约为画面的 12%(1920 分辨率下约 230px)——绝不完全移出屏幕。

方向离场入场起点 → 终点
向左x: 0 → −230x: +230 → 0
向右x: 0 → +230x: −230 → 0
向上y: 0 → −230y: +230 → 0
向下y: 0 → +230y: −230 → 0

机制:

  • 镜像缓动: 离场使用 power4.in,入场使用 power4.out,距离和时长相同——两段合起来就是一个 power4.inOut,因此切换点处的速度完全匹配。
  • 淡出技巧: 离场不透明度在运动行程的约 25–30% 处完成(淡出约 0.18–0.3s,运动为 0.3–0.34s);入场元素在路径中段以约 0.35 的不透明度开始显现。安排最后一个淡出元素恰好在切换点消失——如果中间出现什么都不动的空档,画面就会显得乏味。
  • 离场 0.2–0.4s;入场时长 ≥ 离场时长。可选模糊度为 8–10px。
  • 舞台底色: #root 必须是不透明的 (background: var(--canvas-deep, var(--canvas, #000)))——切换窗口中会出现一个不透明度总和 < 1 的间隙,否则会闪白(参见 seam-craft)。

push-slide 也存在,但不符合部分位移和运动中切换的要求;优先使用切断曲线。

4. 瀑布式切换(逐词切线)

按词粒度切线——这是文本间切换中最强的向左切换。 退出的词各自沿着曲线加速离场;进入的词则在运动过程中接连涌入—— 视线会沿着这道波浪越过切换边界。

**适用范围:**由工作线程在一个多节拍合成中编写(堆叠的全帧 .beat 图层), 不是注册表/注入器类型——它对词语片段进行补间,而不是对片段包装器进行补间。文本节拍块 的进入和退出边界仍使用常规注册表转场。不计入 2–3 个转场的预算。

参数值原因
位移±230px(约占画面 12%)部分位移 + 速度感 > 全画面推移
退出0.34s power4.in加速本身就是切换
退出淡出0.18s,与 x 同时开始词语在位移约 25–30% 时消失——不留拖影
退出错开按阅读顺序 +0.022s逐行剥离,而非整块滑动
进入0.3s power4.out合成的后半段——速度匹配
进入起始不透明度0.35从路径中段开始显现;二值的 0→1 会突然跳出
进入间隔0.05s × 0.84 衰减加速级联,逐步收束为整体

规则:

  • 每条链只使用一个方向,顺势而行。反向缩放只用于链条的 ARRIVAL 节拍。
  • 在构建时将所有词预设为 x: +230, opacity: 0——仅设置 immediateRender: false 仍会让尚未开始动画的词在静止状态下可见。
  • 较短的首个节拍可以整行退出:淡出应在切换前约 0.02s 结束,这样下一批词点亮时它仍在划过画面——不留空档。
  • 仅使用变换/不透明度(可安全定位);适用于不透明的舞台背景。

5. 拉焦模糊切换(可见切换)

这是唯一一种能看到切换的变体:失焦模糊的尖峰会掩盖单帧硬切—— 模拟手持 DSLR 的拉焦效果。仅在同一视觉主题内切换同一表面状态时偶尔使用, 绝不要作为默认边界效果。

与其他效果的区别:退出内容在切换前始终保持完全不透明(由模糊掩盖 切换——不提前淡出);采用 power2.in / power2.out 缓动(柔和光学效果,而非惯性)。

规则:

  • 仅在叙事节拍处触发,每约 8s 最多一次;绝不在字幕中途或停留期间触发。
  • 在模糊达到峰值时切换(≥6px;峰值 8–12px,最大不超过 16–18px)——在上升过程中切换会显露切换痕迹。
  • 轻微缩放(约 1.06,模拟镜头呼吸)能强化光学效果。
  • 两侧方向一致——方向规则仍然适用。进入时长 ≥ 退出时长。
  • 模糊应作用于包装器;同一元素的同一个补间中绝不要同时使用模糊和不透明度(无头 合成错误);绝不要直接模糊 <video>(请将其包裹起来)。

6. 瀑布式入场(场景内到达——不是接缝)

错落式到达级联:文字/元素从下方飞速进入(方向始终一致),每个元素都在前一个元素落定前开始——形成加速的波浪,最终收束为布局完整的画面。适用于标题卡片、段落开场、列表/功能介绍。接缝版见 §4;请勿混用两者的规则:

§6 入场(到达)§4 瀑布式切换(接缝)
不透明度通过入场时的 tl.set 实现二元 0→1——绝不淡入在路径中段 0.35 处点亮——淡入就是速度技巧
默认轴向Y,从下方进入X,顺着流向
离场方向无文字沿镜像的 power4.in 曲线逐渐离场

编排:

  • 重叠,不要排队——下一个元素在前一个元素落定前 ±2 帧内开始;间隔在级联过程中逐渐缩短;最后一个元素瞬间到位。
  • 速度随权重变化——较重/锚点元素移动距离更远、耗时更长;较轻的文字/标点则快速到位:
参数锚点/重元素普通文字轻元素/标点
Y 偏移60–80px40–50px30–48px
时长0.16–0.20s0.13–0.16s0.10–0.13s
重叠间隔 0–2f重叠 1f重叠 1–2f
  • 使用 power4.out 缓动(追求更强的瞬间到位效果时用 expo.out);入场时绝不使用 .inOut。
  • 每次级联只用一个方向。
  • 将最终文字拆成片段以延长高潮;片段移动距离更远。
  • 落定后,整个组通常会滑动以腾出空间迎接下一个节拍——这属于 §7。

7. 推移曲线(场景内组滑动——不是接缝)

将布局完整的组(文字行、卡片堆叠、列表)以慢—快—慢的方式重新定位,从而展示内容或腾出空间。没有任何单一内置缓动能实现这种效果——power4.inOut 会猛地停下。将三个补间串联到同一个属性上:

阶段缓动距离时间感受
1 加速进入power3.in~10%~20%几乎不动——能感受到运动,但没有顿挫感
2 爆发none(线性)~65%~18%平均每帧像素移动量的约 2 倍——目的明确
3 收尾power4.out~25%~62%逐渐减速至静止——消除猛停感

规则:

  • 收尾阶段的时间至少是加速进入阶段的 3 倍。如果仍然猛停:延长收尾阶段的时间(不要增加距离),或使用 power5.out。
  • 阶段 2 保持线性——对其应用缓动会削弱爆发的对比效果。
  • 在阶段 2 期间展示新内容——爆发会掩盖其出现的过程。
  • 垂直方向采用相同比例;按比例缩放距离,保持时间比例不变。

选择变体

穿越式缩放反向缩放曲线切换瀑布式切换
范围场景内文本替换到达/呈现时刻场景之间文本到文本的衔接
Z 轴方向增大(推进)缩小(拉远)X 轴/Y 轴X 轴,逐词
位移/缩放1→1.2,然后 0.75→11→0.8,然后 1.25→1±230px±230px
峰值模糊文本 10px/全画面 18–20文本 10px/全画面 18–208–10px,可选无
缓动power3.in / expo.outpower3.in / expo.outpower4.in / power4.outpower4.in / power4.out
感受持续推进逐渐抵达被横向带动横跨衔接处的波浪

反模式

不要应改为
缩放穿越期间同时显示两段文字在模糊峰值处硬切,一次只显示一段文字
文本大小的主体使用 20px 模糊文本使用 10px;仅全屏画面使用 18–20px
反向缩放退出 → 从小放大进入(或推出 → 超大尺寸回缩)匹配缩放速度的正负号;在切点±0.1s 处验证
入场合成自身的放大介绍叠加在 Z 接缝包装层补间之下以完整构图入场;在接缝稳定后安排入场,或匹配正负号
切换时模糊度/不透明度不匹配切帧处的值完全相同
柔和的入场缓动(power2.out)与退出相反:power4.out / expo.out
完全移出屏幕的退出/入场部分移动(约 12%)+提前淡出
切点任一侧使用 .inOut 缓动镜像使用 power4.in / power4.out
单个元素在切点很久之前就淡出淡出在切点前约 0.02s 结束,或使用逐词级联
瀑布式级联中间距相等每个词的间距缩小 ×0.84
对正文使用缩放穿越仅用于标题和短语
场景切换不使用切线这是默认边界
连续边界方向相反当前方向保持一致;将保留的向量用于表达含义
窗口中段切换时 #root 背后未绘制不透明的舞台底色
排队入场(每个都等待前一个稳定下来)重叠 ±1–2 帧——级联是波浪,不是队列
级联中每个元素使用相同的偏移/时长按权重变化:锚点移动更远,标点快速弹入
§6 入场时逐渐降低不透明度通过 tl.set 实现二元的 0→1——淡出会破坏弹入效果(接缝切换要淡出;入场不需要)
组滑动使用单一缓动(power4.inOut、slow())§7 的三阶段链
推动尾段短于渐入时长的 3 倍延长尾段的时间,而非距离

代码

所有 GSAP 模板——由 worker 编写的版本、注册表 gsap_template、切线与缩放穿越组合、瀑布式 DOM/CSS/JS、焦点跟踪——都位于 examples/gsap-implementation.md。

评论

支持 Markdown