跳到正文
cccskills
免费在 GitHub 公开

remotion-to-hyperframes

Migrate an existing Remotion video composition to HyperFrames HTML and GSAP animation. Check the source for unsupported patterns, translate compatible scenes, compare rendered videos for visual differences, and document anything that could not be preserved.

中文简介正在准备中。当前显示英语简介。

原文查看原文说明

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.

查看安装方法

适用场景

  • Migrate a Remotion composition to HyperFrames
  • Check source code for migration blockers
  • Compare rendered videos after conversion
  • Document migration gaps and substitutions

包含的文件(77)

  • SKILL.md10.8 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/compositions/title.html1.1 KB
  • assets/test-corpus/tier-1-title-card/hf-src/index.html1.1 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.1 KB
  • assets/test-corpus/tier-2-multi-scene/hf-src/compositions/scene-1.html1.1 KB
  • assets/test-corpus/tier-2-multi-scene/hf-src/compositions/scene-2.html1.1 KB
  • assets/test-corpus/tier-2-multi-scene/hf-src/compositions/scene-3.html1004 B
  • assets/test-corpus/tier-2-multi-scene/hf-src/index.html1.7 KB
  • assets/test-corpus/tier-2-multi-scene/README.md3.2 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/compositions/scene-1.html1.6 KB
  • assets/test-corpus/tier-3-data-driven/hf-src/compositions/scene-2.html3.0 KB
  • assets/test-corpus/tier-3-data-driven/hf-src/compositions/scene-3.html1.6 KB
  • assets/test-corpus/tier-3-data-driven/hf-src/index.html1.7 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.md15.3 KB
  • references/escape-hatch.md5.3 KB
  • references/eval.md5.5 KB
  • references/fonts.md3.2 KB
  • references/limitations.md4.9 KB
  • references/lottie.md4.1 KB
  • references/media.md4.4 KB
  • references/parameters.md4.8 KB
  • references/sequencing.md6.8 KB
  • references/timing.md6.1 KB
  • references/transitions.md4.4 KB
  • scripts/.gitkeep0 B
  • scripts/frame_strip.sh3.6 KB
  • scripts/lint_source.py12.7 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(原文)

安装前可以查看交给 AI 代理的指令内容。

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 /hyperframes first: 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/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.

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's data-composition-id, data-start="0", data-duration (in seconds), data-fps, data-width, data-height, plus one data-* per scalar prop.
  • One host <div> per scene with data-composition-src="compositions/<scene>.html" and data-start / data-duration / data-track-index. The root holds no nested layout.
  • One compositions/<scene>.html per scene (a <template> sub-composition): its inline <style> for layout (CSS sets the from state of every animated property), its markup, and one paused gsap.timeline({paused: true}) in the scene's local time. Every Remotion useCurrentFrame() derivation becomes a tween on that timeline at the offset within the scene.
  • window.__timelines["<scene-id>"] = tl; in each scene file, and window.__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 ./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

评价

还没有评价。欢迎分享你的使用感受。

评论

无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。

还没有评论。来写第一条吧。

提交后会立即公开。请勿填写邮箱、电话等个人信息。URL 最多 2 个。

0 / 1000 字

此表单受 reCAPTCHA 保护,适用 Google 的隐私权政策和服务条款。

同一仓库的技能

Create a 12-second title animation in HyperFrames, where sweeping leaves reveal two headlines. Customize typography, leaf counts, sweep speed, background color, and the breeze moving the leaves that remain on the text.

中文简介正在准备中。当前显示英语简介。

  • Create a nature-themed video opening
  • Reveal two headlines in sequence
  • Adjust leaf movement to suit a title
heygen-com/hyperframes6.7万2026年10月19日 更新

Plan subtitles as layers over a video, deciding which spoken phrases to omit, show normally, or emphasize behind the subject. The guidance preserves full-frame composition and limits large embedded words to occasional key moments.

中文简介正在准备中。当前显示英语简介。

  • Planning subtitles for a talking-head video
  • Choosing words to emphasize behind the subject
  • Centering a scene that carries subtitles
heygen-com/hyperframes6.7万2026年10月19日 更新

Turn a weekly Markdown changelog into a branded video project with animated interface examples, Annie narration, captions, and background music. The workflow selects key updates and builds a 45–60 second square video, with rendering performed on request.

中文简介正在准备中。当前显示英语简介。

  • Turn weekly release notes into a short video
  • Demonstrate product updates with animated interface examples
  • Prepare a branded update video with narration and captions
heygen-com/hyperframes6.7万2026年10月19日 更新

Add an eight-second HyperFrames headline animation where square tiles lift, tilt, and flip to reveal a second message. Customize both headlines and 18 settings covering tile size, sweep direction, timing, depth, bounce, and shadows.

中文简介正在准备中。当前显示英语简介。

  • Reveal a second headline through flipping tiles
  • Create an animated opening for a promotional video
  • Adjust tile depth and shadows to suit a design
heygen-com/hyperframes6.7万2026年10月19日 更新

Add a 3D card carousel to a HyperFrames video. Rounded cuboids enter from the right, rotate in sequence, pause on a featured card, and exit left, with 40 variables for content, geometry, lighting, and camera settings.

中文简介正在准备中。当前显示英语简介。

  • Presenting multiple cards in a 3D carousel
  • Pausing on a featured card
  • Replacing card content with JSON
heygen-com/hyperframes6.7万2026年10月19日 更新

Design scene transitions and animated text using matched movement direction and speed across cuts. The catalog provides concrete settings for zooms, blur, word-by-word transitions, staggered entrances, and repositioning groups of elements.

中文简介正在准备中。当前显示英语简介。

  • Connect scenes with matching motion
  • Transition between headlines word by word
  • Bring title elements in with staggered timing
heygen-com/hyperframes6.7万2026年10月19日 更新

查看 heygen-com 的全部技能

报告此技能的问题