remotion-to-hyperframes

Dịch một bản dựng video Remotion (dựa trên React) hiện có thành bản dựng HTML HyperFrames. Chỉ sử dụng khi người dùng yêu cầu rõ ràng việc chuyển đổi, di chuyển, dịch thuật hoặc viết lại bản dựng Remotion thành HyperFrames (ví dụ: "chuyển dự án Remotion của tôi sang HyperFrames"). Không sử dụng khi (a) tạo bản dựng HyperFrames MỚI (ngay cả khi đang thử nghiệm A/B với video Remotion); (b) Remotion chỉ được nhắc đến lướt qua; (c) mã Remotion được chia sẻ làm tài liệu tham khảo, không phải để dịch; (d) người dùng muốn...

npx skills add https://github.com/heygen-com/hyperframes --skill remotion-to-hyperframes

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, 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.

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.
  • 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

Thêm skills từ heygen-com

hyperframes-audio
heygen-com
Use when audio already placed in a HyperFrames composition needs to be mixed: a music bed that fights a voiceover (voiceover carve), effects on a track (EQ, compressor, limiter, gate, saturation, delay, reverb, chorus, phaser, bitcrush), or automation envelopes drawn on a track's volume or any effect parameter. Don't use for sourcing or generating audio — finding BGM, SFX, or making a voiceover is `/media-use`. Don't use for clip timing or track layout, which is `/hyperframes-core`.
hyperframes-cli
heygen-com
HyperFrames CLI dev loop — `npx hyperframes` for scaffolding (init), validation (lint, inspect), preview, render, and environment troubleshooting (doctor, browser, info, upgrade). Use when running any of these commands or troubleshooting the HyperFrames build/render environment. For asset preprocessing commands (`tts`, `transcribe`, `remove-background`), invoke the `hyperframes-media` skill instead.
developmenttestingapi
hyperframes-animation
heygen-com
Tất cả kiến thức hoạt hình cho HyperFrames — quy tắc chuyển động nguyên tử, bản thiết kế cảnh đa pha, chuyển tiếp cảnh, kỹ thuật thiết kế chuyển động rộng hơn, VÀ bảy bộ điều hợp thời gian chạy (GSAP mặc định, cộng với Lottie, Three.js, Anime.js, CSS keyframes, Web Animations API, TypeGPU). Sử dụng cho bất kỳ tác vụ chuyển động hoặc hoạt hình nào: chọn 2-4 quy tắc và soạn, hoặc tải bản thiết kế, hoặc tra cứu API thời gian chạy cụ thể (ví dụ: GSAP eases / Lottie player / Three.js mixer). Gốc HyperFrames: dòng thời gian tạm dừng đơn, an toàn t
creativedevelopmentdesign
hyperframes-core
heygen-com
Hợp đồng soạn thảo HTML HyperFrames. Sử dụng cho cấu trúc soạn thảo, thuộc tính dữ liệu, clip, track, hợp đồng phụ, biến, phát lại phương tiện, quy tắc kết xuất xác định và xác thực các dự án có thể kết xuất tối thiểu.
developmentmediacreative
hyperframes-media
heygen-com
Tiền xử lý tài sản cho các bản phối HyperFrames — TTS đa nhà cung cấp (HeyGen / ElevenLabs / Kokoro local), BGM đa nhà cung cấp (Google Lyria / local MusicGen), phiên âm Whisper, xóa nền, và biên tập phụ đề. Sử dụng cho npx hyperframes tts, bgm, transcribe, remove-background, lựa chọn giọng nói/nhà cung cấp, gợi ý tâm trạng nhạc, phụ đề / chú thích / lời bài hát / karaoke / tạo kiểu theo từng từ.
mediaaudiovideo
hyperframes-registry
heygen-com
Cài đặt và kết nối các khối registry cùng thành phần vào các tổ hợp HyperFrames. Sử dụng khi chạy hyperframes add, cài đặt một khối hoặc thành phần, kết nối một mục đã cài đặt vào index.html, hoặc làm việc với hyperframes.json. Bao gồm lệnh add, vị trí cài đặt, kết nối khối phụ trong tổ hợp, hợp nhất đoạn mã thành phần, khám phá registry, và tạo một khối hoặc thành phần mới để đóng góp ngược lên (ý tưởng → tạo khung → xác thực → PR).
developmentapicode-review
general-video
heygen-com
Sử dụng làm phương án dự phòng cho việc biên soạn video HTML HyperFrames tùy chỉnh khi không có quy trình chuyên biệt nào phù hợp. Bao gồm các tác phẩm dài hoặc nhiều cảnh, video thương hiệu/sizzle reel, dựng cảnh, thẻ tiêu đề, áp phích chuyển động dài, vòng lặp tĩnh và các tác phẩm tự do ở bất kỳ độ dài hoặc định dạng nào. Không dành cho quảng cáo sản phẩm tiếp thị (product-launch-video), chụp màn hình trang web thành video tổng quát (website-to-video), video giải thích chủ đề (faceless-explainer), video GitHub PR (pr-to-video), phụ đề cho cảnh quay có sẵn...
videocreativemedia
motion-graphics
heygen-com
Sử dụng khi người dùng muốn một đồ họa chuyển động ngắn, thiên về thiết kế, nơi chuyển động là thông điệp: kiểu chữ động, đếm số liệu hoặc số, hiệu ứng biểu đồ/trực quan hóa dữ liệu, logo sting, brand lockup, lower-third, callout, lớp phủ mạng xã hội, tiêu đề/tweet/tin tức động, poster chuyển động, hoặc điểm nhấn trang đã chụp nhanh. Thường dưới 10 giây và tối đa khoảng 30 giây, không có mạch tường thuật, lồng tiếng hoặc chủ thể quay thực. Có thể xuất ra MP4 hoặc lớp phủ trong suốt. Không dành cho các tác phẩm dài hơn, nhiều cảnh,
creativevideodesign