remotion-to-hyperframes について
remotion-to-hyperframes は、Remotion などのアニメーションやメディアを HyperFrames に取り込むためのスキルです。インポート方式の選択、Studio での編集性の維持、元データとのフレーム比較を支援します。
主な機能
- 01ネイティブ、ホスト、メディア方式の選択
- 02対応する Remotion コードの変換
- 03HyperFrames の時間に連動したアニメーション表示
- 04元データと取り込み後のフレーム比較
- 05変換上の制約の記録
活用シーン
- 01Remotion のコンポジションを HyperFrames に移行
- 02Three.js や Lottie のアニメーションを追加
- 03レンダリング済み動画を編集可能なクリップとして取り込み
- 04変換後の映像差分を確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ heygen-com/ hyperframes --skill remotion-to-hyperframesインストール後、Claude Code で/remotion-to-hyperframesを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
assets/.gitkeepassets/test-corpus/.gitignorerun.shassets/test-corpus/tier-1-title-card/expected.jsonREADME.md.gitignoreassets/test-corpus/tier-1-title-card/hf-src/index.htmlassets/test-corpus/tier-1-title-card/hf-src/compositions/title.htmlassets/test-corpus/tier-1-title-card/remotion-src/remotion.config.tspackage.jsontsconfig.jsonassets/test-corpus/tier-1-title-card/remotion-src/src/TitleCard.tsxindex.tsRoot.tsxassets/test-corpus/tier-2-multi-scene/.gitignoreREADME.mdexpected.jsonsetup.shassets/test-corpus/tier-2-multi-scene/hf-src/index.htmlassets/test-corpus/tier-2-multi-scene/hf-src/compositions/scene-2.htmlscene-3.htmlscene-1.htmlassets/test-corpus/tier-2-multi-scene/remotion-src/package.jsonremotion.config.tsassets/test-corpus/tier-2-multi-scene/remotion-src/src/MultiScene.tsxindex.tsassets/test-corpus/tier-3-data-driven/.gitignoreexpected.jsonREADME.mdassets/test-corpus/tier-3-data-driven/hf-src/compositions/scene-1.html詳細
プラグインのインストール: このスキルが HyperFrames プラグイン内にある場合、セットアップや鮮度確認のコマンドを実行する前に、プラグインの実行ルールに従ってください。
HyperFrames にインポートする
HyperFrames がコンテナです。クリップ内で何が動作していても、そのトラック、サブコンポジション、変数は Studio で編集できます。各パーツは、対応できる最も高いレベルで取り込み、使用したレベルを記録してください。
| レベル | 対象 | 方法 | Studio での編集可否 |
|---|---|---|---|
| ネイティブ | HTML + GSAP にできるコード:ほとんどの Remotion、HTML/CSS/GSAP アニメーション、シンプルな Motion Canvas | 変換してから、フレームごとに検証します | すべての要素。変数、カタログ、プリセットを適用できます |
| ホスト型 | ブラウザーで任意のフレームを描画できるコード:canvas、p5.js、Three.js、Lottie、WebGL、その他の JS アニメーション | コードをそのまま使い、HyperFrames の時間に合わせて動かします | タイミング、位置、公開パラメーター |
| メディア | 映像またはフレームを出力するもの:Manim、After Effects、Blender、PIL、moviepy | ファイルにレンダリングし、クリップとして使います | カット、配置、レイヤー。ピクセルの編集はできません |
実時間、ライブ物理演算、またはネットワークに依存するコードは、メディアとしてのみ取り込めます。
ネイティブ:変換してから検証する
- Remotion の場合は、まず
python3 <SKILL_DIR>/scripts/lint_source.py <source dir>を実行します。ブロッカー(useState、useReducer、依存関係を持つuseEffect、非同期のcalculateMetadata、MUI、Chakra、Mantine、antd、shadcn、Radix、NextUI などの React UI キット)は変換できません。ホスト型にするか、リファクタリングで取り除いてください。決して近似してはいけません(references/escape-hatch.md)。警告(@remotion/lambdaの設定、delayRender、useMemo、カスタムフック)は削除され、その旨が記録されます。 /hyperframesの仕様に合わせて変換します。シーンごとにサブコンポジションを 1 つ作成し、時間には秒(frame / fps)を使い、アセットのパスはルート相対にします。各 Remotion API に相当する機能はreferences/api-map.mdに記載されています。Remotion のレンダーページのルール* { box-sizing: border-box; }は、ルートのindex.htmlの<style>に 1 回だけ記述します。これがないと、枠線やパディングのある要素はすべて、枠線とパディングの分だけ大きくなります。- 編集可能な状態を保ちます。ソースの props は
data-var-text、data-var-src、またはvar(--id)にバインドされたdata-composition-variablesにします。各Sequenceは、タイミング付きクリップまたはサブコンポジションにします。再利用するコンポーネントは、data-variable-valuesを使って複数回マウントする 1 つのサブコンポジションにします。 - フレームごとに比較します。
npx hyperframes snapshot --at <t,…> --against <original.mp4>を実行すると、各時間の元動画のフレームが、出力のフレームの横に保存されます。すべてのシーンと各カットの前後をサンプリングし、全体の見た目だけでなく、遅れて表示される要素や色が変わった要素がないか確認してください。スコア付きで確認する場合は、scripts/render_diff.sh <original.mp4> <hf.mp4> <out>でフレームごとの SSIM を取得し、scripts/frame_strip.shで差異のあるフレームを確認できます(複雑さの段階ごとのしきい値はreferences/eval.mdを参照)。エンコーダーの差異を測定しないよう(SSIM で約 0.05 の差が出ます)、Remotion 側はConfig.setVideoImageFormat("png")とConfig.setColorSpace("bt709")を使ってレンダリングします。 - 変換がうまくいかなかった点(削除した音量ランプ、近似した表示、代替フォントなど)を
TRANSLATION_NOTES.mdに記載します。
| Remotion | 参照先 |
|---|---|
Composition, defaultProps, schema, calculateMetadata | references/parameters.md |
Sequence, Series, Loop, AbsoluteFill, Freeze | references/sequencing.md |
useCurrentFrame, interpolate, spring, Easing, interpolateColors | references/timing.md |
Audio, Video, Img, IFrame, staticFile, delayRender | references/media.md |
TransitionSeries, @remotion/transitions | references/transitions.md |
@remotion/lottie | references/lottie.md |
@remotion/google-fonts, Font.loadFont, @font-face | references/fonts.md |
| 移植できないもの | references/limitations.md |
ソースで使われている名前付きのビジュアルを手作業で作る前に、npx hyperframes catalog --query "<the visual, in English>" --json を検索してください。何もインストールされていなくても、レジストリ全体から候補を順位付けします。
ホスティング
コードはそのままにして、時間の管理は HyperFrames に任せます。HyperFrames は、指定された時間のフレームを描画します。シークプロトコルと、Lottie、Three.js、anime.js、WAAPI、CSS アニメーション用の組み込みアダプターについては、../hyperframes/references/runtimes.md を参照してください。時間の基準となる requestAnimationFrame ループやタイマーは使わず、乱数はシード付きのものだけを使います。長さを定義するものがほかにない場合は、ルートに data-duration を指定します。
メディア
<video class="clip" data-has-audio="true" src="assets/x.mp4" ...> を指定します。無音の場合は muted を指定してください。それ以外は必要ありません。
最終メッセージでは、インポートした各パーツについて、レベル、Studio で変更できる内容、フレームごとの比較結果を記載してください。