hyperframes-keyframes

作者: heygen-com

Use when a HyperFrames composition needs seek-safe 2D/3D keyframes, GSAP timelines, 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.

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

HyperFrames Keyframes

Keyframes are a pose contract: visible states, continuous subject identity, seek-safe runtime, verified pixels.

Use hyperframes-animation for broad scene recipes. Use hyperframes-cli for full command docs. Use references/keyframe-patterns.md only when choosing implementation mechanisms, not visual style.

Procedure

  1. Identify the animated subject, visible states, final state, and runtime.
  2. Choose the smallest mechanism that proves the prompt. Read references/keyframe-patterns.md only if the mechanism is unclear.
  3. Author seek-safe keyframes in the declared runtime. Build synchronously and register the runtime instance.
  4. Verify with hyperframes lint, hyperframes check, hyperframes keyframes, one focused --shot, and snapshots at proof times.
  5. If proof fails, fix the source keyframes and rerun the smallest failing diagnostic before rendering.

Contract

  • Name the moving subject.
  • Name the poses needed to prove the intended motion, including the final state.
  • Keyframe visible channels, not hidden helper state.
  • Preserve object identity when continuity matters.
  • Crossfade only when the intended motion is replacement or dissolve.
  • Hold readable or semantic states long enough to see.
  • Final frame is part of the animation, not cleanup.
  • Do not reset to rest unless requested.
  • Do not end on black unless requested.
  • If editing a starter scene, preserve layout, copy, assets, colors, and final state unless asked to redesign.

Runtime Rules

GSAP:

  • build synchronously at page load
  • use gsap.timeline({ paused: true })
  • register as window.__timelines[compositionId]
  • registry key must match data-composition-id
  • do not call tl.play() for render-critical motion
  • keep repeats finite

CSS keyframes:

  • finite duration and iteration count
  • deterministic delay
  • animation-fill-mode: both
  • use data-start when timing belongs to a clip

Anime.js:

  • create synchronously
  • autoplay: false
  • finite duration and loops
  • push every instance to window.__hfAnime

WAAPI:

  • finite duration
  • fill: "both"
  • deterministic construction
  • the text surface does not list WAAPI; verify with --shot (it seeks WAAPI) and snapshots

Never use for render-critical motion:

  • Date.now()
  • performance.now()
  • unseeded Math.random()
  • hover/scroll triggers
  • timers
  • async-created timelines
  • unregistered requestAnimationFrame
  • infinite loops

GSAP Skeleton

const root = document.querySelector("[data-composition-id]");
const compositionId = root.dataset.compositionId;
const tl = gsap.timeline({ paused: true });

tl.addLabel("state-a", 0);
tl.to(".subject", {
  keyframes: [
    { x: 0, opacity: 1, duration: 0.2 },
    { x: 120, opacity: 1, duration: 0.4, ease: "power2.out" },
    { x: 100, opacity: 1, duration: 0.2, ease: "power2.inOut" },
  ],
  ease: "none",
});

window.__timelines = window.__timelines || {};
window.__timelines[compositionId] = tl;

Use labels for semantic states. Use position parameters instead of chained delays. Use immediateRender: false for later from()/fromTo() tweens touching the same property.

Keyframe Forms

  • Array keyframes: pose ladder with per-step duration/ease.
  • Percentage keyframes: exact timing inside one tween.
  • Property arrays: compact multi-stop changes.
  • ease: "none" on the parent when each stop carries its own easing.
  • easeEach when every segment should share the same feel.

Do not copy numeric distances or timing from examples. Derive them from the actual composition geometry and duration.

For one subject moving between two boxes, prefer one continuous transform tween or FLIP. Split x/y/scale into multiple eased keyframes only when the viewer should feel distinct beats; every segment changes velocity and can read as a hitch.

Channels

Prefer compositor/visual channels: x/y/z, xPercent/yPercent, scale, rotationX/Y/Z, skew, transformOrigin, svgOrigin, opacity, autoAlpha, clip-path, masks, CSS vars, SVG path/dash values, camera transforms, shader uniforms.

Avoid layout/lifecycle channels: top/left/right/bottom, width/height, margin/padding, display, visibility, late DOM creation, helper overlays doing subject motion.

For visibility changes, use autoAlpha on the registered seekable GSAP timeline, or a zero-duration tl.set() at an explicit boundary. Target only a non-clip element or a wrapper inside the clip; never target .clip itself. Never duration-tween raw visibility, and never tween display.

Mechanism Choice

Choose the smallest mechanism that proves the prompt:

NeedMechanism
Same subject changes box or hierarchyshared element / FLIP
Subject travels a visible routepath travel
Stroke grows or tracesstroke draw
Shape becomes another shapeshape interpolation
Reveal boundary is visibleclip, mask, or shader uniform
Many items move with orderstagger / indexed delay
Text itself movesline, word, character, or band subdivision
Surface bends, stretches, or cropsparent/child counter-transform
UI has statesexplicit state machine
Scene has depthDOM 3D, Three.js, or WebGL camera/object keyframes

Mechanisms can combine, but each one must clarify the idea. Decoration is not proof.

Timing

  • Anticipation only when it clarifies cause or direction.
  • Acceleration leaves rest.
  • Peak proof shows the mechanism unmistakably.
  • Follow-through sells energy and direction.
  • Overshoot only when the subject should feel elastic or tactile.
  • Constant-speed path travel usually needs ease: "none".
  • Discrete UI states usually need a sharp ease-out.
  • Repeated elements need ordered offsets, not identical timing.
  • Final lockups need longer holds than transition poses.
  • Smoothness means continuous velocity on the same subject.
  • Do not overlap tweens that write the same transform property unless the overlap is intentional and verified.
  • Avoid animating large clip-path/mask changes while the same hero surface is also scaling or traveling; use nested reveals after the main move settles.

Text

Preserve line boxes, word spacing, readability, and final fit. If text moves internally, move the glyphs or masked bands, not only decorations around the text. Snapshot readable frames.

SVG

For stroke growth prefer DrawSVGPlugin, then stroke-dasharray/stroke-dashoffset. For shape interpolation prefer MorphSVGPlugin; convert primitives to paths when needed and split complex silhouettes into simpler parts.

3D

Scale alone is fake depth. Use perspective on a stable parent, transform-style: preserve-3d, z travel, rotation, camera/world motion, occlusion, and layer order when objects cross.

Use one or two diagnostic angles that expose the depth relationship. If angled proof shows no depth crossing, improve z/camera/occlusion.

Canvas / WebGL

Keyframe camera position, camera target, object transform, material opacity, shader uniforms, and postprocess intensity through deterministic state. Render from HyperFrames time. Use --ghost because marker boxes cannot see internal canvas motion.

CLI Proof

npx hyperframes lint
npx hyperframes check
npx hyperframes keyframes .
npx hyperframes keyframes . --json
npx hyperframes keyframes . --runtime all
npx hyperframes keyframes . --selector "<selector>" --shot "<file>" --samples <n>
npx hyperframes keyframes . --selector "<selector>" --shot "<file>" --layout strip --from <t0> --to <t1>
npx hyperframes keyframes . --shot "<file>" --ghost --angle <angle>
npx hyperframes snapshot . --at <times>

Choose <selector> for the real animated subject. Choose <times> for first frame, proof poses, final-minus-hold, and exact final. Choose <angle> only when depth must be proven.

ToolProves
keyframestargets, explicit stops, paths, traces, composed parent/child motion, CSS stops, Anime registration
--shotghosts, route shape, time spacing, DOM 3D projection, focused selector proof
--layout stripin-place motion, overlaps, contact, subtle scale/opacity, text waves
--ghostcanvas, WebGL, shader motion, rendered 3D
snapshot --atmasks, text readability, full state, final lockup, black/reset tails

If selector proof looks wrong:

  1. rerun --json
  2. find the actual animated target
  3. shoot that target
  4. snapshot full frames
  5. trust painted pixels over logs

Diagnostic Reading

flat means no explicit middle poses. keyframes means explicit stops exist. motionPath means a route exists. trace means multi-stroke drawing. composed with means child motion inherits parent motion.

Even ghost spacing means constant speed. Clustered ghosts mean slow-in or settle. Large gaps mean fast travel.

A helper-selector shot is not proof. An onion shot over a broken full frame is not proof.

Error Handling

FailureFix
endpoint-onlyadd middle poses, hold peak proof, rerun --shot
identity breakkeep one element alive, use shared source/final boxes, remove substitute crossfade
fake 3Dadd z/camera travel, occlusion, angled proof
wrong finaladd final hold, snapshot final-minus-hold and exact final
unseekable runtimepause autoplay, register instance, remove timers, build synchronously
unreadable textpreserve line boxes, reduce displacement, add final hold, snapshot text frames

Done

Run hyperframes lint, hyperframes check, hyperframes keyframes, one focused --shot, and snapshots. Confirm first frame, proof poses, final-minus-hold, exact final, subject-owned motion, and no debug overlays.

來自 heygen-com 的更多技能

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
hyperframes-read-first
heygen-com
任何製作、創作、生成、編輯、動畫化或渲染影片、動畫、動態圖像、解說影片、標題卡、疊加層、字幕影片、產品宣傳片、網站影片、公關或更新日誌影片、數據蒙太奇、動態海報或HyperFrames HTML組合的請求,請從此處開始。當用戶希望HyperFrames創作或渲染完成的MP4/網路影片、選擇工作流程,或在產品發布影片、無臉解說影片、網站轉影片等之間進行路由時,請在其他影片或動畫技能之前使用此功能。
creativevideomedia