oversized-cursor

作者: heygen-com

HyperFrames 启动视频中的家庭风格超大型 macOS 光标技巧。每当场景涉及光标或指针主导的动作时、启动 UI 场景时、用一次点击触发变形/过渡/打字流程时,或当场景显得静态、死板或过时而需要一种廉价且高收益的运动来源来引导观众视线并让他们脱离停滞状态时,加载此技巧。涵盖光标大小/外观(包括品牌元素光标)、屏幕外入场法则、尖端瞄准以及点击……

npx skills add https://github.com/heygen-com/hyperframes --skill oversized-cursor

Oversized Cursor — the eye-carrier

A deliberately oversized macOS-style pointer that travels the frame as a visible protagonist: it enters from off-screen, walks the viewer's eye to the next point of interest, clicks to cause the next thing that happens, and leaves. Production-proven across multiple launch films.

Why it exists. Big cursor movement is one of the cheapest high-yield motion sources in a launch video: one element, transform-only tweens, and it (1) brings the eye across the screen on scenes that would otherwise read as dead, (2) gives causal ignition to morphs/transitions ("the click did that"), and (3) segments the eye out of a stale state when kicking off a new scene or a complex animation sequence. Bigger is better — an actual-size cursor disappears at video scale.

Size & look (house convention)

  • Full-frame scenes: 7cqw (≈134px at 1920). In-mock / small-frame variants: 4.6–5.5cqw. Never smaller.
  • One SVG arrow geometry everywhere. Two proven fills — white body + black stroke, or black body (#1c1c1c) + white stroke (1.4px). Pick per scene contrast, keep it constant per film.
  • Brand-motif cursors (the power play). The macOS arrow is the DEFAULT, not a mandate. When the subject brand has a recognizable cursor identity — a collaborative design tool's colored multiplayer arrow with a name tag (Figma-style), a creative suite's precision crosshair, a distinctive product pointer — use THAT cursor instead: instantly legible brand language for anyone who knows the product. Same laws apply unchanged (oversized scale, physical entry/exit, tip-targeting, click-ignition), and a name-tag variant travels as one rigid unit (tag trailing the arrow). Reach for it only when the motif is genuinely referenceable; a cursor nobody recognizes is just a weird arrow — default back to macOS.
  • filter: drop-shadow(0 4px 6px rgba(0,0,0,.3)), pointer-events: none, z-index above all scene content, will-change: transform.
#root .cursor {
  position: absolute;
  left: 48%;
  top: 115%; /* off-screen below — the resting pose IS off-screen */
  width: 7cqw;
  height: 7cqw;
  z-index: 20;
  filter: drop-shadow(0 4px 6px rgba(0, 0, 0, 0.3));
  pointer-events: none;
  will-change: transform;
}

Entry law — physical, never revealed

The cursor always enters from off-screen (canonical: from below, top:115–120%) and travels to its first target in one decelerating glide. It must feel like it entered the room. Never opacity-fade it in at a resting position, never mask-reveal it — that reads as a glitch (a real, repeatedly observed failure mode).

  • Default path: straight up the y-axis to the target — no fragmented diagonals. A diagonal is fine when it IS the story (entering toward an off-axis target), but it is one continuous vector either way.
  • duration: 0.4–0.92s, ease: power3.out, immediateRender: false on the fromTo.
tl.fromTo(
  cursor,
  { left: "48.6%", top: "115%" },
  { left: "48.6%", top: "55%", duration: 0.85, ease: "power3.out", immediateRender: false },
  0.25,
);

Tip-targeting & the click tap

The hot-spot is the arrow TIP, not the box center. Land the tip on the target's center, and pivot all press scaling on the tip: transformOrigin: '21% 14%' (for the house arrow path in a 24-unit viewBox).

Click = asymmetric compress/expand (1:2 ratio reads as a real tap):

tl.to(cursor, { scale: 0.84, duration: 0.1, ease: "power2.in", transformOrigin: "21% 14%" }, t);
tl.to(
  cursor,
  { scale: 1, duration: 0.22, ease: "power2.out", transformOrigin: "21% 14%" },
  t + 0.1,
);

The target's reaction is a separate, parallel tween (button: scale: 0.94 + press color/shadow, starting at the same t). Cursor-only taps (e.g. focusing a text input) get NO target reaction. Pair with cursor-click-ripple / press-release-spring for the target side.

The click IGNITES the next beat

Never let a morph, typing run, window transform, or scene-defining animation simply start. Park the cursor on the trigger and let the click cause it, same-frame:

  • click ▸ menu/submenu cascade, toggle flip
  • click ▸ typing kickoff into an input
  • click ▸ composer morph-down / window shrink
  • click ▸ logo ignition / flight launch
  • click ▸ play-state flip + UI-life wake in a product mock

During long beats it doesn't own (typing, narration), the cursor drifts aside (0.5–0.9s, power2.out) — never sits frozen on top of the action, never wobbles idly.

Exit law & cross-scene handoff

Two sanctioned exits — both physical, never an opacity fade in place:

  1. Leave the frame: accelerate off the nearest edge with power2.in (left:'118%', left:'-12%', or top:'116%'), 0.5–0.7s.
  2. Cut-the-curve handoff: in the final ~0.3s before a hard cut, the cursor starts accelerating (power2.in) toward the NEXT scene's first click point, covering the first ~1/3 of that path; the next composition gsap.sets the cursor at the handoff pose and continues with power2.out at matched velocity. The cursor itself becomes the carrier element that stitches the seam:
// scene A, last 0.3s — start the journey:
tl.to(cursor, { left: "40.7%", top: "63.7%", duration: 0.3, ease: "power2.in" }, CUT - 0.3);
// scene B, t=0 — finish it at matched velocity:
gsap.set(cursorB, { left: "40.7%", top: "63.7%" });
tl.to(cursorB, { left: "22%", top: "45%", duration: 0.6, ease: "power2.out" }, 0);

Checklist

  • ≥ 7cqw full-frame (4.6–5.5cqw inside a mock) — when unsure, bigger
  • enters from off-screen on one continuous vector (no fade/mask reveal)
  • tip lands on the target center; press pivots on transformOrigin: '21% 14%'
  • every click causes something, same-frame
  • drifts aside during beats it doesn't own; zero idle wobble
  • exits physically (off-frame or cut-the-curve handoff) — no fade-in-place

来自 heygen-com 的更多技能

hyperframes-audio
heygen-com
Use when audio already placed in a HyperFrames composition needs to be mixed: a music bed that fights a voiceover (voiceover carve), effects on a track (EQ, compressor, limiter, gate, saturation, delay, reverb, chorus, phaser, bitcrush), or automation envelopes drawn on a track's volume or any effect parameter. 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`.
hyperframes-cli
heygen-com
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.
developmenttestingapi
hyperframes-animation
heygen-com
HyperFrames的所有动画知识——原子运动规则、多阶段场景蓝图、场景过渡、更广泛的动态设计技术,以及七种运行时适配器(默认GSAP,外加Lottie、Three.js、Anime.js、CSS关键帧、Web Animations API、TypeGPU)。适用于任何运动或动画任务:选取2-4条规则进行组合,或加载蓝图,或查询特定运行时的API(例如GSAP缓动函数/Lottie播放器/Three.js混合器)。HyperFrames原生特性:单一暂停时间线,安全跳帧,...
creativedevelopmentdesign
hyperframes-core
heygen-com
HyperFrames HTML 组合合约。用于组合结构、数据属性、剪辑、轨道、子组合、变量、媒体播放、确定性渲染规则以及最小可渲染项目的验证。
developmentmediacreative
hyperframes-media
heygen-com
为HyperFrames合成提供资产预处理——多供应商TTS(HeyGen / ElevenLabs / Kokoro本地)、多供应商BGM(Google Lyria / 本地MusicGen)、Whisper转录、背景移除及字幕编写。用于npx hyperframes tts、bgm、transcribe、remove-background、语音/供应商选择、音乐情绪提示、字幕/副标题/歌词/卡拉OK/逐词样式。
mediaaudiovideo
hyperframes-registry
heygen-com
安装并将注册表块和组件接入HyperFrames组合中。在运行hyperframes add、安装块或组件、将已安装项接入index.html或处理hyperframes.json时使用。涵盖add命令、安装位置、块子组合接入、组件片段合并、注册表发现,以及编写新块或组件以向上游贡献(构思→脚手架→验证→PR)。
developmentapicode-review
general-video
heygen-com
用作自定义HyperFrames HTML视频合成创作的后备方案,适用于无专门工作流程的场景。涵盖较长或多场景作品、品牌/宣传片、蒙太奇、标题卡、动态海报、静态循环以及任意长度或格式的自由创作。不适用于营销产品推广(product-launch-video)、通用网站转视频(website-to-video)、主题解说(faceless-explainer)、GitHub PR视频(pr-to-video)、为现有素材添加字幕等场景。
videocreativemedia
motion-graphics
heygen-com
当用户需要一段简短、以设计为主导的动态图形,且动态本身即为信息时使用:动态文字排版、数字或统计计数、图表/数据可视化效果、标志片头、品牌组合、底部三分之一、标注、社交覆盖层、动画标题/推文/新闻条目、动态海报或快速捕捉页面高亮。通常时长在10秒以内,最长约30秒,无叙事弧线、画外音或真人实拍主体。可渲染为MP4或透明叠加层。不适用于较长、多场景、带旁白或品牌宣传片的作品……
creativevideodesign