hyperframes-keyframes
heygen-com/hyperframes
Author 2D/3D keyframes, camera moves, and visual transitions for HyperFrames compositions.
What is hyperframes-keyframes?
Keyframes skill handles pose-based animation for HyperFrames compositions: punch-in/out, zoom, reframe, Ken Burns moves, match cuts, and visual effects using GSAP, CSS keyframes, Anime.js, or WAAPI. Use it for seek-safe motion on placed clips; use hyperframes-animation for scene choreography and hyperframes-core for clip assembly and timing.
- Author punch-in, punch-out, zoom, and reframe keyframes with configurable easing
- Animate camera moves, pans, and Ken Burns effects via wrapper translation and scale
- Create match cuts, whip pans, and directional wipes with registered seek-safe timelines
- Interpolate masks and clip-paths for crop, iris, reveal, and split-screen transitions
- Support GSAP, CSS keyframes, Anime.js, and WAAPI animation frameworks
- Verify keyframes with hyperframes lint, check, and keyframes diagnostics
How to install hyperframes-keyframes
npx skills add https://github.com/heygen-com/hyperframes --skill hyperframes-keyframes- HyperFrames composition with placed media clips (via hyperframes-core)
- GSAP, CSS, Anime.js, or WAAPI runtime available in the page
- data-composition-id attribute on the root composition element
How to use hyperframes-keyframes
- 1.Identify the animated subject, visible states, and final state
- 2.Choose the smallest animation mechanism (GSAP timeline, CSS keyframes, etc.)
- 3.Author seek-safe keyframes in the declared runtime, registering the instance if needed
- 4.Run hyperframes lint and hyperframes keyframes diagnostics to verify
- 5.Capture snapshots at proof times and fix source keyframes if diagnostics fail
Use cases
- Smooth multi-state zoom or reframe across a subject while maintaining continuity
- Chained camera moves (pan, tilt, zoom) synchronized to clip timing
- Directional wipe or iris reveal between overlapping clips on different tracks
- Crop and mask reframe without changing source playback time
- Match-cut handoff between two clips with authored geometry and velocity
- Video editors building HyperFrames compositions
- Motion designers authoring camera and transform animations
- Developers implementing seek-safe keyframe-driven effects
- Creators combining visual motion with audio fades and clip assembly
hyperframes-keyframes FAQ
Use keyframes for visual motion, transforms, and pose-based effects on individual clips. Use hyperframes-animation for broad scene choreography, handoff timing, and multi-clip orchestration.
No. Clip assembly, trim, splice, and reorder belong to hyperframes-core. Keyframes only animate visible motion and cropping on wrappers inside placed clips.
GSAP (timeline-based), CSS keyframes (finite duration), Anime.js (synchronous, autoplay: false), and WAAPI (finite duration, fill: both).
No. Keyframes must be deterministic and seek-safe. Avoid Date.now(), performance.now(), unseeded randomness, timers, and async-created timelines.
Run hyperframes lint, hyperframes check, hyperframes keyframes, and test with --shot flag. Capture snapshots at proof times to confirm visible motion matches intent.
Full instructions (SKILL.md)
Source of truth, from heygen-com/hyperframes.
name: hyperframes-keyframes
description: >
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.
Plugin installs: Before setup or freshness commands, follow plugin execution rules when this skill is inside a HyperFrames plugin. Standalone installs keep the update instructions below.
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.
Creator editing boundary
Keyframes own visual motion, not clip assembly. Source-range hard cuts, trim,
splice, and reorder belong to /hyperframes-core: author one media element per
kept range, place it with data-start and data-duration, and select its source
offset with data-media-start. Adjacent ranges make a hard cut. A crossfade
uses overlapping clips on different tracks plus visual opacity keyframes; sound
fades use /hyperframes-audio.
| Creator request | Truthful mechanism |
|---|---|
| Punch-in / punch-out | Keyframe scale with x/y or percentage translation on a non-timed visual/crop wrapper inside the clip. Use a set/short tween for a hard punch and a tween for a smooth move. |
| Smooth multi-state zoom or reframe | Keep one subject wrapper alive and author multiple zoom/reframe states as a pose ladder with per-segment easing. |
| Pan, reframe, or Ken Burns camera move | Animate wrapper translation plus scale. Geometry is authored; this is not face tracking or automatic semantic reframing. |
| Chained camera moves | Chain labeled transform beats on one registered seek-safe timeline. |
| Match cut or whip pan | /hyperframes-animation owns the visual handoff; /hyperframes-registry supplies primitives; keyframes preserve authored geometry, direction, and velocity. There is no automatic matching-frame discovery. |
| Crop and mask reframe | Interpolate clip-path or a mask on an inner visual wrapper to crop/reframe without changing source time. Polygon keyframes can form a polygon/mask transition. |
| Directional wipe cut or iris/reveal cut | Animate a mask/clip boundary across overlapping visual clips; /hyperframes-animation owns the handoff choreography. |
| Split-screen handoff | Keep both visual clips placed by core, then keyframe their inner crop/mask wrappers and divider geometry. |
| Constant source retime | /hyperframes-core owns normalized data-playback-rate (0.1..10) for render-safe picture and pitch-preserved sound. It is constant for the whole media element. |
| Source speed ramps | A rate lane in data-automation on the <video>/<audio> (t in clip seconds, v 0.1..10, log interpolation); it wins over the constant rate. |
| Freeze / hold | A visual pose, final source frame, or finished sub-composition can hold. Arbitrary mid-source freeze is not supported; preprocess a still/derived segment, place it as its own clip, then resume with another source range. |
When editing picture and sound together, load /hyperframes-core, this skill for
visual motion, and /hyperframes-audio for fades, crossfades, volume automation,
ducking/carve, or effects on the placed tracks.
A visual transition or cropping treatment is not a temporal source trim or
splice. /hyperframes-core owns the timeline, clip timing, and source ranges;
keyframes only animate the visible handoff or crop on wrappers inside those clips.
For copyable combined picture/sound recipes, use /hyperframes-core → references/creator-editing-recipes.md.
Procedure
- Identify the animated subject, visible states, final state, and runtime.
- Choose the smallest mechanism that proves the prompt. Read
references/keyframe-patterns.mdonly if the mechanism is unclear. - Author seek-safe keyframes in the declared runtime. Build synchronously and register the runtime instance.
- Verify with
hyperframes lint,hyperframes check,hyperframes keyframes, one focused--shot, and snapshots at proof times. - 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-startwhen 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.easeEachwhen 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:
| Need | Mechanism |
|---|---|
| Same subject changes box or hierarchy | shared element / FLIP |
| Subject travels a visible route | path travel |
| Stroke grows or traces | stroke draw |
| Shape becomes another shape | shape interpolation |
| Reveal boundary is visible | clip, mask, or shader uniform |
| Many items move with order | stagger / indexed delay |
| Text itself moves | line, word, character, or band subdivision |
| Surface bends, stretches, or crops | parent/child counter-transform |
| UI has states | explicit state machine |
| Scene has depth | DOM 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.
| Tool | Proves |
|---|---|
keyframes | targets, explicit stops, paths, traces, composed parent/child motion, CSS stops, Anime registration |
--shot | ghosts, route shape, time spacing, DOM 3D projection, focused selector proof |
--layout strip | in-place motion, overlaps, contact, subtle scale/opacity, text waves |
--ghost | canvas, WebGL, shader motion, rendered 3D |
snapshot --at | masks, text readability, full state, final lockup, black/reset tails |
If selector proof looks wrong:
- rerun
--json - find the actual animated target
- shoot that target
- snapshot full frames
- 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
| Failure | Fix |
|---|---|
| endpoint-only | add middle poses, hold peak proof, rerun --shot |
| identity break | keep one element alive, use shared source/final boxes, remove substitute crossfade |
| fake 3D | add z/camera travel, occlusion, angled proof |
| wrong final | add final hold, snapshot final-minus-hold and exact final |
| unseekable runtime | pause autoplay, register instance, remove timers, build synchronously |
| unreadable text | preserve 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.
Related skills
More from heygen-com/hyperframes and the wider catalog.

hyperframes-media
Multi-provider TTS, background music, sound effects, transcription, and captions for HyperFrames video compositions.

hyperframes-read-first
Router and orientation guide for HyperFrames video authoring—start here to choose the right workflow.

hyperframes-registry
Search, install, and wire 400+ registry blocks and components into HyperFrames compositions.

hyperframes-studio
Build HyperFrames Studio projects with proper timeline conventions and composition structure.

lottie
Embed and seek lottie-web and dotLottie animations in HyperFrames compositions.

media-use
Unified media resolution, generation, and treatment for HyperFrames projects—music, voice, images, color grading, and effects in one skill.