Skip to content
cccskills
FreePublished on GitHub

remotion-to-hyperframes

Migrate existing Remotion video compositions to HyperFrames HTML and GSAP. Checks source code for unsupported patterns, maps animation and media features, compares rendered videos for visual similarity, and documents translation gaps.

OriginalShow the original description

Port an existing Remotion (React) composition to HyperFrames HTML. Use ONLY when the user explicitly asks to port/convert/migrate/translate a Remotion source. Do NOT use: (a) authoring a new HyperFrames composition; (b) Remotion mentioned in passing; (c) Remotion code shared as reference only; (d) "same video as my Remotion one" without explicit migrate request — treat as fresh build. Doubt → `/general-video`. One-way, Remotion-only: no reverse export (HyperFrames→Remotion or any framework), no non-Remotion source (After Effects, Framer Motion, plain React/CSS) → out of scope, re-create via `/general-video`. Flags unsupported patterns (useState, useEffect, async calculateMetadata, third-party React libs, `@remotion/lambda`) and recommends runtime interop over lossy translation. Unsure whether to port vs. build fresh, or only a passing Remotion mention? → /hyperframes.

See how to install

Good for

  • Migrating an existing Remotion composition to HyperFrames
  • Checking source code for migration blockers
  • Comparing original and converted video renders
  • Documenting features changed or omitted during conversion

Files included (70)

  • SKILL.md9.9 KB
  • assets/.gitkeep0 B
  • assets/test-corpus/.gitignore16 B
  • assets/test-corpus/run.sh8.2 KB
  • assets/test-corpus/tier-1-title-card/.gitignore128 B
  • assets/test-corpus/tier-1-title-card/expected.json1.7 KB
  • assets/test-corpus/tier-1-title-card/hf-src/index.html1.8 KB
  • assets/test-corpus/tier-1-title-card/README.md2.2 KB
  • assets/test-corpus/tier-1-title-card/remotion-src/package.json296 B
  • assets/test-corpus/tier-1-title-card/remotion-src/remotion.config.ts497 B
  • assets/test-corpus/tier-1-title-card/remotion-src/src/index.ts109 B
  • assets/test-corpus/tier-1-title-card/remotion-src/src/Root.tsx259 B
  • assets/test-corpus/tier-1-title-card/remotion-src/src/TitleCard.tsx773 B
  • assets/test-corpus/tier-1-title-card/remotion-src/tsconfig.json337 B
  • assets/test-corpus/tier-2-multi-scene/.gitignore215 B
  • assets/test-corpus/tier-2-multi-scene/expected.json2.0 KB
  • assets/test-corpus/tier-2-multi-scene/hf-src/index.html3.7 KB
  • assets/test-corpus/tier-2-multi-scene/README.md3.1 KB
  • assets/test-corpus/tier-2-multi-scene/remotion-src/package.json298 B
  • assets/test-corpus/tier-2-multi-scene/remotion-src/remotion.config.ts497 B
  • assets/test-corpus/tier-2-multi-scene/remotion-src/src/index.ts109 B
  • assets/test-corpus/tier-2-multi-scene/remotion-src/src/MultiScene.tsx2.3 KB
  • assets/test-corpus/tier-2-multi-scene/remotion-src/src/Root.tsx264 B
  • assets/test-corpus/tier-2-multi-scene/remotion-src/tsconfig.json337 B
  • assets/test-corpus/tier-2-multi-scene/setup.sh1.2 KB
  • assets/test-corpus/tier-3-data-driven/.gitignore128 B
  • assets/test-corpus/tier-3-data-driven/expected.json3.4 KB
  • assets/test-corpus/tier-3-data-driven/hf-src/index.html8.9 KB
  • assets/test-corpus/tier-3-data-driven/README.md4.9 KB
  • assets/test-corpus/tier-3-data-driven/remotion-src/package.json319 B
  • assets/test-corpus/tier-3-data-driven/remotion-src/remotion.config.ts497 B
  • assets/test-corpus/tier-3-data-driven/remotion-src/src/components/AnimatedNumber.tsx740 B
  • assets/test-corpus/tier-3-data-driven/remotion-src/src/components/StatCard.tsx1.4 KB
  • assets/test-corpus/tier-3-data-driven/remotion-src/src/components/UnderlinedText.tsx1.1 KB
  • assets/test-corpus/tier-3-data-driven/remotion-src/src/index.ts109 B
  • assets/test-corpus/tier-3-data-driven/remotion-src/src/Root.tsx681 B
  • assets/test-corpus/tier-3-data-driven/remotion-src/src/scenes/OutroScene.tsx423 B
  • assets/test-corpus/tier-3-data-driven/remotion-src/src/scenes/StatsScene.tsx676 B
  • assets/test-corpus/tier-3-data-driven/remotion-src/src/scenes/TitleScene.tsx1.2 KB
  • assets/test-corpus/tier-3-data-driven/remotion-src/src/Stargazed.tsx970 B
  • assets/test-corpus/tier-3-data-driven/remotion-src/tsconfig.json337 B
  • assets/test-corpus/tier-4-escape-hatch/cases/01-use-state.tsx1000 B
  • assets/test-corpus/tier-4-escape-hatch/cases/02-use-effect-deps.tsx954 B
  • assets/test-corpus/tier-4-escape-hatch/cases/03-async-metadata.tsx1.1 KB
  • assets/test-corpus/tier-4-escape-hatch/cases/04-third-party-react.tsx1.2 KB
  • assets/test-corpus/tier-4-escape-hatch/cases/05-lambda-config.tsx1.4 KB
  • assets/test-corpus/tier-4-escape-hatch/cases/06-warnings-only.tsx1.4 KB
  • assets/test-corpus/tier-4-escape-hatch/cases/07-custom-hook.tsx1.1 KB
  • assets/test-corpus/tier-4-escape-hatch/cases/08-mixed.tsx1.1 KB
  • assets/test-corpus/tier-4-escape-hatch/expected.json2.7 KB
  • assets/test-corpus/tier-4-escape-hatch/README.md2.8 KB
  • assets/test-corpus/tier-4-escape-hatch/validate.sh3.5 KB
  • references/api-map.md12.1 KB
  • references/escape-hatch.md5.3 KB
  • references/eval.md5.5 KB
  • references/fonts.md3.2 KB
  • references/limitations.md4.7 KB
  • references/lottie.md4.2 KB
  • references/media.md3.8 KB
  • references/parameters.md4.5 KB
  • references/sequencing.md5.0 KB
  • references/timing.md6.1 KB
  • references/transitions.md4.4 KB
  • scripts/.gitkeep0 B
  • scripts/frame_strip.sh3.6 KB
  • scripts/lint_source.py11.9 KB
  • scripts/render_diff.sh3.0 KB
  • scripts/tests/fixtures/blocker.tsx1.8 KB
  • scripts/tests/fixtures/clean.tsx1.3 KB
  • scripts/tests/smoke.sh3.5 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

Remotion to HyperFrames

Confirm the route before you build. Use this only to port an existing Remotion (React) composition's source into HyperFrames. Authoring a new composition (even one inspired by a Remotion video) → the creation workflows / /general-video. Out of scope (one-way, Remotion-only): no reverse export (HyperFrames → Remotion or any framework), and a non-Remotion source (After Effects, Framer Motion, plain React / CSS) has no Remotion source to translate → re-create via /general-video. Unsure, or only a passing Remotion mention? Read /hyperframes first.

Overview

Translate Remotion (React-based) video compositions into HyperFrames (HTML + GSAP) compositions. Most Remotion idioms have direct HyperFrames equivalents — the translation is mechanical for ~80% of typical compositions. This skill encodes the mapping and guards against the lossy 20% by refusing to translate patterns that don't fit HF's seek-driven model and recommending the runtime interop pattern from PR #214 instead.

The skill ships with a tiered test corpus (T1–T4, 4 fixtures total) that grades translations against measured SSIM thresholds. Don't translate without running the eval — a translation that "looks right" but renders 0.05 SSIM lower than the validated baseline is silently wrong.

When to use

Use this skill ONLY when the user explicitly asks to migrate from Remotion. Example trigger phrases:

  • "port my Remotion project to HyperFrames"
  • "convert this Remotion code to HyperFrames"
  • "migrate from Remotion"
  • "translate this Remotion comp"
  • "rewrite this as HyperFrames HTML"

Do NOT use this skill when:

  • (a) The user is authoring a new HyperFrames composition, even if they have or are A/B-testing a similar Remotion video.
  • (b) The user mentions Remotion in passing without asking for migration.
  • (c) The user shares Remotion code as reference material rather than asking for a translation.
  • (d) The user asks for "the same video as my Remotion one" without explicitly asking to migrate the source — treat that as a fresh HyperFrames build.

NOT SUPPORTED (decline — this is not what this skill does):

  • The reverse direction. Exporting a HyperFrames composition back out to Remotion (or to any other framework) is not a workflow — the translation is Remotion → HyperFrames only. Say so plainly.
  • Non-Remotion sources. An After Effects project (.aep), a Framer Motion / plain-React / CSS animation, or any other tool's source is not a Remotion composition — there is no Remotion source to translate. Re-create it natively via /general-video, or decline if HyperFrames can't represent it.

When in doubt, default to authoring a native HyperFrames composition with /general-video (the general HyperFrames authoring flow) instead.

Workflow

Step 1: Lint the source

Run scripts/lint_source.py over the Remotion source directory. The lint detects patterns that can't translate cleanly:

  • Blockers (refuse + recommend interop): useState, useReducer, useEffect/useLayoutEffect with non-empty deps, async calculateMetadata, third-party React UI libraries (MUI, Chakra, Mantine, antd, shadcn, Radix, NextUI).
  • Warnings (translate after dropping the construct): @remotion/lambda config, delayRender, useCallback, useMemo, custom hooks.
  • Info (translate with note): staticFile, interpolateColors.

If any blocker fires, stop. Read references/escape-hatch.md and surface the recommendation message. Warnings don't stop translation — drop the offending construct in step 3 and note the gap in TRANSLATION_NOTES.md. @remotion/lambda config is the canonical warning case: the skill drops the import + renderMediaOnLambda(...) calls but translates the rest of the composition.

Step 2: Plan the translation

Read references/api-map.md — the index of every Remotion API and its HF equivalent or per-topic reference. Identify which topic references you'll need based on what the source uses:

Source containsLoad reference
Composition, defaultProps, schema, calculateMetadataparameters.md
Sequence, Series, Loop, AbsoluteFill, Freezesequencing.md
useCurrentFrame, interpolate, spring, Easing, interpolateColorstiming.md
Audio, Video, Img, IFrame, staticFile, delayRendermedia.md
TransitionSeries, @remotion/transitionstransitions.md
@remotion/lottielottie.md
@remotion/google-fonts/<Family>, Font.loadFont, @font-facefonts.md

Don't load all of them — load only what the specific source needs.

Step 3: Generate the HF composition

Emit index.html with:

  • Root <div id="stage"> carrying the composition's data-composition-id, data-start="0", data-duration (in seconds), data-fps, data-width, data-height, plus one data-* per scalar prop.
  • A flat list of scene divs with data-start / data-duration / data-track-index.
  • Inline <style> for layout; CSS sets the from state of every animated property.
  • A single <script> tag at the bottom containing one paused gsap.timeline({paused: true}). Every Remotion useCurrentFrame() derivation becomes a tween on this timeline at the right offset.
  • window.__timelines["<composition-id>"] = tl; registers the timeline with HF's runtime.

Custom React subcomponents inline as repeated HTML using the prop interface as the template (see parameters.md for the per-instance data-* pattern).

Step 4: Validate

Run the eval harness — references/eval.md for the full guide. Quick path:

# Render Remotion baseline (after npm install in the fixture)
cd remotion-src && npx remotion render <CompositionId> out/baseline.mp4

# Render HF translation
cd ../hf-src && npx hyperframes render --skill=remotion-to-hyperframes --output ../hf.mp4

# SSIM diff
../../scripts/render_diff.sh ./remotion-src/out/baseline.mp4 ./hf.mp4 ./diff

Threshold: ~0.02 below p05 of the source's complexity tier (see eval.md's validated thresholds table). If the diff fails, run scripts/frame_strip.sh to see which frames diverged, then re-read the relevant timing/sequencing/media reference.

Critical: both renders must use matching pixel format. Set Config.setVideoImageFormat("png") + Config.setColorSpace("bt709") in the Remotion source's remotion.config.ts — otherwise the diff measures encoder differences (~0.05 SSIM hit), not translation fidelity.

Step 5: Document gaps

Anything that didn't translate cleanly (volume ramps dropped, custom presentations approximated, fonts substituted) gets a TRANSLATION_NOTES.md written next to the HF output. See references/limitations.md for the format.

What this skill explicitly does NOT do

  • Translate React state machines. Compositions that drive animation via useState + useEffect are not deterministic frame-capture targets in HyperFrames' seek-driven model. Recommend the runtime interop pattern.
  • Run Remotion's render pipeline alongside HyperFrames. That's the runtime interop pattern from PR #214 — a separate solution for compositions that fail this skill's lint.

(@remotion/lambda is not a blocker — Lambda config is deployment, not animation. The skill drops it as a warning and translates the rest. See references/escape-hatch.md.)

How to grade your own translation

Run the test corpus orchestrator:

./assets/test-corpus/run.sh

It runs T1, T2, T3 (render + diff) and T4 (lint validation), prints a per-tier pass/fail table, and emits an aggregate JSON report. Use this to verify the skill is working end-to-end on a clean checkout — and as a regression check after editing any reference.

Validated baseline (as of 2026-04-27):

TierComposition shapeMean SSIMThreshold
T1single-element fade-in0.9740.95
T2multi-scene + spring + audio + image0.9850.95
T3data-driven, custom subcomponents, count-up0.9530.90
T4escape-hatch (8 lint cases)8/8 passn/a

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

Create 3D objects from text or images, choose catalog assets for repeated scenery, and inspect the results in Blender. The workflow checks geometry, materials, scale, and ground contact while recording asset sources and generation costs.

  • Create a unique 3D object from a text description
  • Reconstruct a 3D object from a concept image
  • Populate scenery with catalog vegetation and rocks
calesthio/OpenMontage69.5KUpdated Oct 17, 2026

acestep

FreeSummary

Generate background music and songs with lyrics using ACE-Step 1.5, with controls for duration, tempo, and musical key. You can also restyle reference audio and separate vocals or individual instruments from mixed tracks.

  • Generate background music to match a video scene
  • Create a short jingle with supplied lyrics
  • Make a jazz arrangement of reference audio
calesthio/OpenMontage69.5KUpdated Oct 17, 2026

agents

FreeSummary

Build voice assistants and conversational characters with ElevenLabs. Configure voices, language models, and external tools, then connect conversations to a website widget or use Twilio integration for outbound phone calls.

  • Creating a voice bot for customer support
  • Embedding a voice assistant on a website
  • Building an interactive voice character
calesthio/OpenMontage69.5KUpdated Oct 17, 2026

ai-video-gen

FreeSummary

Create AI video clips from text or reference images, choosing among providers to match the task and budget. Supports vertical social videos, product photo animation, and conversational editing of existing clips with Gemini Omni Flash.

  • Create vertical video clips for social media
  • Animate product photos
  • Choose a video provider for a budget and visual style
calesthio/OpenMontage69.5KUpdated Oct 17, 2026

ai-video-gen

FreeSummary

Generate video clips from text descriptions or reference images through multiple API services. Compare available providers by cost and task needs, choose aspect ratios, track generation progress, and refine existing clips through conversational editing with Gemini Omni.

  • Generating clips from written scene descriptions
  • Animating a product photo
  • Creating vertical videos for social media
calesthio/OpenMontage69.5KUpdated Oct 17, 2026

atlas-cloud

FreeSummary

Generate and edit images and videos through Atlas Cloud using one API key across multiple model families. Choose supported models for each task, download the results, and retain details about the model, inputs, and estimated cost.

  • Generate images and videos through one service
  • Edit product images using reference materials
  • Create videos from images, video, or audio references
calesthio/OpenMontage69.5KUpdated Oct 17, 2026

See all skills by calesthio

Report a problem with this skill