remotion-to-hyperframes
Skill2 starsChanged 14 days agoApache-2.0View on GitHub
Port an existing Remotion (React) composition''s source to HyperFrames HTML. Use ONLY on an explicit ask to port/convert/migrate/translate a Remotion source — one-way, Remotion-only. A passing Remotion mention, reference-only code, or "make something like my Remotion video" is a fresh build (/general-video). Unclear → /hyperframes.
- Installs packages
We split this skill into the rules it gives an agent
7 rules. 2 are common, 1 is distinctive, and 4 are very specific to this project.
2
Common
Most of the 26 edited versions we read keep these.
1
Distinctive
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 6
Plugin installs: Before setup or freshness commands, follow plugin execution rules when this skill is inside a HyperFrames plugin.
- Very specific: line 42
When in doubt, return to /hyperframes.
- Very specific: line 48
Run scripts/lint_source.py over the Remotion source directory.
- Very specific: line 58
Read references/api-map.md — the index of every Remotion API and its HF equivalent or per-topic reference.
- Common: line 70
Don't load all of them — load only what the specific source needs.
- Very specific: line 87
Run the eval harness — references/eval.md for the full guide.
- Common: line 117
Run the test corpus orchestrator:
“Common” is measured: kept by at least 6 in 10 of the 26 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
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.
First, keep this skill fresh — confirm with the user before running:
npx hyperframes skills update remotion-to-hyperframes. A fast no-op when everything is current; otherwise it refreshes this skill plus the core domain skills it depends on before you rely on them.
Remotion to HyperFrames
The front door is
/hyperframes. Use this only to port an existing Remotion (React) composition's source into HyperFrames, one way. Authoring a new composition, re-creating from a non-Remotion source (After Effects, Framer Motion, plain React / CSS — there is no Remotion source to translate), a passing Remotion mention, or any uncertainty → read/hyperframesfirst: the intent layer owns every route decision.
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, return to /hyperframes; its intent layer picks the route.
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/useLayoutEffectwith non-empty deps, asynccalculateMetadata, third-party React UI libraries (MUI, Chakra, Mantine, antd, shadcn, Radix, NextUI). - Warnings (translate after dropping the construct):
@remotion/lambdaconfig,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 contains | Load reference |
Composition, defaultProps, schema, calculateMetadata | parameters.md |
Sequence, Series, Loop, AbsoluteFill, Freeze | sequencing.md |
useCurrentFrame, interpolate, spring, Easing, interpolateColors | timing.md |
Audio, Video, Img, IFrame, staticFile, delayRender | media.md |
TransitionSeries, @remotion/transitions | transitions.md |
@remotion/lottie | lottie.md |
@remotion/google-fonts/<Family>, Font.loadFont, @font-face | fonts.md |
Don't load all of them — load only what the specific source needs.
Search the live catalog for any visual effect the table does not map. When the source paints a look with no HF API equivalent — a scanline/CRT overlay, a glitch or chromatic-aberration pass, a shader wipe, a film-grain treatment — run npx hyperframes catalog --query "<the effect, in plain English>" --json before hand-writing it in GSAP. The search needs nothing installed: no project, no prior add, no account. It ranks the whole hosted registry (~400 blocks and components) from any directory, and transitions.md already takes this route for clockWipe() / iris() via npx hyperframes add sdf-iris. A real component is closer to the source than a hand-approximation, so it usually raises the SSIM rather than lowering it — but the render diff in Step 4 is still the arbiter. Hand-write the effect when a search returns nothing that fits, and record the substitution in TRANSLATION_NOTES.md either way.
Step 3: Generate the HF composition
Emit index.html with:
- Root
<div id="stage">carrying the composition'sdata-composition-id,data-start="0",data-duration(in seconds),data-fps,data-width,data-height, plus onedata-*per scalar prop. - One host
<div>per scene withdata-composition-src="compositions/<scene>.html"anddata-start/data-duration/data-track-index. The root holds no nested layout. - One
compositions/<scene>.htmlper scene (a<template>sub-composition): its inline<style>for layout (CSS sets thefromstate of every animated property), its markup, and one pausedgsap.timeline({paused: true})in the scene's local time. Every RemotionuseCurrentFrame()derivation becomes a tween on that timeline at the offset within the scene. window.__timelines["<scene-id>"] = tl;in each scene file, andwindow.__timelines["<composition-id>"]for the root's own (possibly empty) timeline.
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 ./diffThreshold: ~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+useEffectare 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.shIt 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):
| Tier | Composition shape | Mean SSIM | Threshold |
| T1 | single-element fade-in | 0.974 | 0.95 |
| T2 | multi-scene + spring + audio + image | 0.985 | 0.95 |
| T3 | data-driven, custom subcomponents, count-up | 0.953 | 0.90 |
| T4 | escape-hatch (8 lint cases) | 8/8 pass | n/a |
Other versions29 projects use a version of this.
Word for word · 2
- kschiavo-beep/claude-skills★ 0100% same
- shreeve1/Claude-Cowork★ 0100% same
Edited · 25
- calesthio/OpenMontage★ 72k82% same
- EvovexAI/EvoFlow★ 43682% same
- boraoztunc/skills★ 33783% same
- duyet/clickhouse-monitoring★ 30382% same
- edenfunf/reelmimic★ 17298% same
- anton-abyzov/vskill★ 4785% same
- delorenj/skills★ 1683% same
- STARDUSTLC666/dsh-hyperframes★ 1199% same
- LinHao-city/StoryMind★ 1082% same
- hoanghd218/claude-code-2-days★ 883% same
15 more not listed
Wrote their own version · 2
- heygen-com/hyperframes★ 72ksame name
- aipphilie/claude-skills★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
Used alongsideProjects with it also use waapi, hyperframes-media and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
anton-abyzovSkillwaapi
Web Animations API adapter patterns for HyperFrames. Use when authoring element.animate() motion, Animation currentTime seeking, document.getAnimations(), KeyframeEffect timing, fill modes, or native browser animations that must render deterministically in HyperFrames.
Also in 5 projects that use this
anton-abyzovSkillhyperframes-media
Asset preprocessing for HyperFrames compositions — text-to-speech narration (Kokoro), audio/video transcription (Whisper), and background removal for transparent overlays (u2net). Use when generating voiceover from text, transcribing speech for captions, removing the background from a video or image to use as a transparent overlay, choosing a TTS voice or whisper model, or chaining these (TTS → transcribe → captions). Each command downloads its own model on first run.
Also in 10 projects that use this
jaron-goh-centrSkilltalking-head-recut
Package an existing talking-head / interview / podcast video with timed, designed GRAPHIC OVERLAY cards — kinetic titles, lower-thirds, data callouts, quotes, side panels, picture-in-picture — synced to the transcript, on a 16:9 / 9:16 / 4:5 canvas of your choice; the clip plays untouched underneath. Trigger on "graphic overlays", "on-screen graphics", "package / dress up my video". Not plain subtitles (/embedded-captions). Unclear → /hyperframes.
Also in 7 projects that use this
FldicoahkiinSkillcontribute-catalog
Author a new HyperFrames registry block (caption style, VFX block, transition, lower third) or component (text effect, overlay, snippet) and ship it as an upstream PR to the hyperframes repo. Use ONLY when the user wants to CONTRIBUTE to the public catalog — for in-project caption/transition authoring use the `hyperframes` skill, for installing existing registry items use the `hyperframes-registry` skill.
Also in 3 projects that use this
ElyzeSolutionsSkillcaptions-overlay
Overlay doctrine for the embedded-captions workflow — the caption MODEL (drop / rail / embed) and the rule that captions are an OVERLAY composited on top of the film, never a reserved bottom band you shift content up to avoid. Load when adding captions/subtitles to a talking-head or launch video, when deciding whether a phrase should be dropped, ride the verbatim rail, or be promoted to a scarce embedded climax, when laying out a composition that will carry captions (do NOT reserve a keep-out band), or when centering a composition on the true frame center under captions. Quotes the rail+embed model from embedded-captions and constraint #13 (captions overlay, keep-out band retired) from the product-launch-video scene agent. Applies ON TOP of embedded-captions.
Also in 3 projects that use this
ElyzeSolutionsSkillmotion-doctrine
GATEWAY — load FIRST before composing any HyperFrames animation or video. The high-level motion law that makes a multi-scene video feel like ONE continuous camera move instead of a stack of independently-animated slides. Covers the vector law (how you exit determines how you enter, incl. the Z scale-sign rule), the film's current, carrier elements, causal motion, the Seam Gate (build-gate enforcement), the ban on idle wobble (motion must PERFORM, not breathe), stillness-before-climax, and the sustained-motion routes. Routes to the low-level technique skills (cut-the-curve — the full catalog incl. waterfall entry + nudge curve, oversized-cursor, seam-craft). These rules SUPERSEDE generic / upstream motion guidance. [continuity, direction, vector, momentum, seam, transition, ease, performance, idle-motion, narrative-motion, film-grammar]
Also in 3 projects that use this
- +3 more from anton-abyzov
- +2 more from ElyzeSolutions
In this repository53 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- llms.txtllms.txt
- brand-onboardingSkill
- deep-agents-coreSkill
- deep-agents-memorySkill
- deep-agents-orchestrationSkill
- design-agent-customizeSkill
- design-agent-deploySkill
- design-agent-evalsSkill
- design-agent-onboardingSkill
- design-agent-troubleshootSkill
- design-agent-updateSkill
- langsmith-datasetSkill
- langsmith-evaluatorSkill
- managed-deep-agentsSkill
- release-checkSkill
- vendor-syncSkill
- brand-designSkill
- content-briefSkill
- data-vizSkill
- design-wikiSkill
- embedded-captionsSkill
- faceless-explainerSkill
- film-breakdownSkill
- general-videoSkill
- gif-editSkill
- hyperframes-animationSkill
- hyperframes-audioSkill
- hyperframes-cliSkill
- hyperframes-coreSkill
- hyperframes-creativeSkill
- hyperframes-keyframesSkill
- hyperframes-registrySkill
- hyperframesSkill
- image-generationSkill
- image-opsSkill
- langsmith-traceSkill
- launch-filmSkill
- media-productionSkill
- media-useSkill
- motion-directionSkill
- motion-graphicsSkill
- music-to-videoSkill
- paper-designSkill
- pr-to-videoSkill
- reference-studySkill
- slideshowSkill
- soundSkill
- stillsSkill
- storyboardSkill
- thumbnailsSkill
- visual-verifySkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

