heygen-com/hyperframes3 files

Hyperframes Keyframes

>

Specification
Skill ID
heygen-com/hyperframes/hyperframes-keyframes
Publisher
heygen-com
Repository
hyperframes
Installs
5,884
Files
3
Synced
Sep 16, 2026
How to use it

Open any RiverX project, open the Skills panel in the chat, and search for this identifier. The files are fetched from the source repository at install time.

heygen-com/hyperframes/hyperframes-keyframesInstalls these files
  • agents/openai.yaml
  • references/keyframe-patterns.md
  • SKILL.md

What this skill tells the agent

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 requestTruthful mechanism
Punch-in / punch-outKeyframe 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 reframeKeep one subject wrapper alive and author multiple zoom/reframe states as a pose ladder with per-segment easing.
Pan, reframe, or Ken Burns camera moveAnimate wrapper translation plus scale. Geometry is authored; this is not face tracking or automatic semantic reframing.
Chained camera movesChain 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 reframeInterpolate 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 cutAnimate a mask/clip boundary across overlapping visual clips; /hyperframes-animation owns the handoff choreography.
Split-screen handoffKeep 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..5) for render-safe picture and pitch-preserved sound. It is constant for the whole media element.
Source speed rampsNot supported: there is no time-varying playback-rate envelope. Preprocess a derived media asset, then place it through core.
Freeze / holdA 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-corereferences/creator-editing-recipes.md.

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.