From 890f305cd139ade4681826fef3ea8bbc4bd463f7 Mon Sep 17 00:00:00 2001 From: James Date: Mon, 27 Apr 2026 18:57:31 +0000 Subject: [PATCH] feat(skills): remotion-to-hyperframes references (6/7) Adds 11 progressively-disclosed reference files that the skill loads on demand during translation. Total ~1500 LOC, every file under 200 lines (skill-creator's progressive-disclosure budget). api-map.md the comprehensive Remotion -> HF translation table (the index; loaded at start of translation) timing.md interpolate, spring (validated configs), easing, count-up, stagger sequencing.md Sequence, Series, Loop, Freeze, AbsoluteFill, Composition root media.md Audio, Video, Img, IFrame, OffthreadVideo, staticFile, asset paths transitions.md @remotion/transitions presentations -> manual GSAP crossfades or HF shader-transitions lottie.md @remotion/lottie -> HF lottie adapter (incl. AE feature limitations note) fonts.md Google Fonts loading, local @font-face, system fallback noise floor parameters.md Zod schemas, defaultProps, sync vs async calculateMetadata escape-hatch.md when to bow out + the runtime interop pattern from PR #214 limitations.md known caveat patterns (volume ramps, Loop with state, custom presentations, code-split components) eval.md how to run the validation harness, threshold rule of thumb, what the noise floor looks like The references are evidence-driven rather than speculative: every spring config, easing curve, and SSIM threshold is documented from the validated T1/T2/T3 calibration runs (mean 0.974 / 0.985 / 0.953). The escape-hatch boundaries match the lint blockers in PR 2 and the T4 fixtures in PR 5. Replaces the placeholder .gitkeep from PR 1. --- .../references/.gitkeep | 0 .../references/api-map.md | 142 +++++++++++++ .../references/escape-hatch.md | 115 +++++++++++ .../references/eval.md | 140 +++++++++++++ .../references/fonts.md | 112 ++++++++++ .../references/limitations.md | 136 ++++++++++++ .../references/lottie.md | 119 +++++++++++ .../references/media.md | 149 +++++++++++++ .../references/parameters.md | 167 +++++++++++++++ .../references/sequencing.md | 195 ++++++++++++++++++ .../references/timing.md | 165 +++++++++++++++ .../references/transitions.md | 114 ++++++++++ 12 files changed, 1554 insertions(+) delete mode 100644 skills/remotion-to-hyperframes/references/.gitkeep create mode 100644 skills/remotion-to-hyperframes/references/api-map.md create mode 100644 skills/remotion-to-hyperframes/references/escape-hatch.md create mode 100644 skills/remotion-to-hyperframes/references/eval.md create mode 100644 skills/remotion-to-hyperframes/references/fonts.md create mode 100644 skills/remotion-to-hyperframes/references/limitations.md create mode 100644 skills/remotion-to-hyperframes/references/lottie.md create mode 100644 skills/remotion-to-hyperframes/references/media.md create mode 100644 skills/remotion-to-hyperframes/references/parameters.md create mode 100644 skills/remotion-to-hyperframes/references/sequencing.md create mode 100644 skills/remotion-to-hyperframes/references/timing.md create mode 100644 skills/remotion-to-hyperframes/references/transitions.md diff --git a/skills/remotion-to-hyperframes/references/.gitkeep b/skills/remotion-to-hyperframes/references/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/skills/remotion-to-hyperframes/references/api-map.md b/skills/remotion-to-hyperframes/references/api-map.md new file mode 100644 index 000000000..906d7957e --- /dev/null +++ b/skills/remotion-to-hyperframes/references/api-map.md @@ -0,0 +1,142 @@ +# Remotion → HyperFrames API Map + +Authoritative translation table. Load this reference when starting a translation +to know the high-level mapping; load the per-topic references for fragile +details (timing, transitions, etc.). + +## Reading this table + +- **`drop`** = remove from output entirely. The HF runtime handles it. +- **`see references/X.md`** = the mapping is non-trivial; read the linked file. +- **`refuse + interop`** = the skill bows out and recommends the runtime adapter + pattern from [PR #214](https://github.com/heygen-com/hyperframes/pull/214). + +## Composition root + +| Remotion | HyperFrames | +| ---------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| `` | root `
` | +| `defaultProps={...}` | `data-*` attributes on `#stage` (one per scalar prop). Nested objects/arrays — see [parameters.md](parameters.md) | +| `schema={z.object(...)}` | not represented in HTML; the schema lives in the agent's translation step only | +| `calculateMetadata` (sync) | resolve at translation time, write concrete values into `data-*` | +| `calculateMetadata` (async) | **refuse + interop** — see [escape-hatch.md](escape-hatch.md) | +| `registerRoot(RemotionRoot)` | drop | +| `` | `
` | + +## Sequencing + +See [sequencing.md](sequencing.md) for nesting and stagger details. + +| Remotion | HyperFrames | +| ------------------------------------------ | --------------------------------------------------------------------------------------------------------- | +| `` | `
` | +| `` + `` | siblings with sequential `data-start` values | +| `` | not a primitive — emit a custom GSAP `repeat: -1` loop with manual offset math | +| `` | drop the wrapper; HF doesn't have running animation outside the seek-driven timeline so freeze is a no-op | + +## Timing + +See [timing.md](timing.md) — this is the highest-leverage section. + +| Remotion | HyperFrames | +| ---------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ | +| `useCurrentFrame()` | drop — HF seeks the timeline. The math derived from `frame` becomes an animatable property of a paused GSAP tween. | +| `useVideoConfig()` for `fps` / `durationInFrames` | drop — read from `data-fps` / `data-duration` on `#stage` | +| `interpolate(frame, [a,b], [x,y])` (linear) | `gsap.fromTo(t, {p:x}, {p:y, duration:(b-a)/fps, ease:"none"})` at offset `a/fps` | +| `interpolate(frame, [a,b,c,d], [x,y,y,z])` (multi-segment) | three `gsap.to` calls at offsets `a/fps`, `b/fps`, `c/fps` | +| `interpolate(..., {easing: Easing.bezier})` | GSAP `CustomEase.create("c", "M0,0 C${a},${b} ${c},${d} 1,1")` | +| `spring({frame, fps, config: {damping, stiffness, mass}})` | GSAP `back.out(N)` — see [timing.md](timing.md) for damping → overshoot table | +| `interpolateColors(frame, range, colors)` | `gsap.to({...}, { backgroundColor, color, duration, ease })` — GSAP handles color tweens natively | +| `Easing.in / .out / .inOut(power)` | GSAP `power.in` / `power.out` / `power.inOut` | + +## Media + +See [media.md](media.md) for trim, volume ramps, and decoder notes. + +| Remotion | HyperFrames | +| -------------------------------------- | --------------------------------------------------------------------------- | +| `