Communitygithub.com

starrandy123/reanimate-video

ビデオのアニメーションをフレームごとにコードにコピーし、再現プロセスをクリップとして表示するスキル(reanimate を使用)。ゲーム映像、ストックモーショングラフィック、スクリーンレコーディング、GIFなどに対応。

reanimate-video とは?

starrandy123/reanimate-video は、Claude Code などの AI エージェント向けに設計されたスキルで、ビデオファイルをアニメーションコードに変換するプロセスを自動化します。このスキルは reanimate フレームワークを拡張し、ビデオ参照からのコピーにおける既知の7つの「トラップ」(高ビット深度フレーム、大量のインライン画像、モジュール読み込み失敗、タイミング問題、非効率な比較、要素トラックの欠如、浮動小数点誤差)を解決します。ユーザーは `rv` コマンドラインインターフェースを使用して、参照フレームの抽出、要素の測定、アニメーションの構築、比較ラウンドの実行、最終的なプロセス動画の生成を行えます。測定ツール(numpy + opencv)は専用の Python 仮想環境で動作し、`rv setup` でセットアップされます。また、著作権遵守のためのガイドラインとライセンス管理機能も含まれています。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/starrandy123/reanimate-video/tree/HEAD

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

reanimate-video は何をしますか?

reanimate はライブページを撮影し、コード内でそれを再構築し、コピーを撮影して比較し、数値が一致するまでラウンドを繰り返します。ビデオ参照用の独自のパスは存在しますが、最初の実際の実行(2026年11月6日、無料ストックカウントダウン)では7つのトラップに遭遇し、それぞれが黙って失敗するか、低速でした。このキットはそれらを除去し、ビデオに必要な測定機能を追加します。なぜなら、ビデオには検査するページがないからです。

reanimate が必要です:npx skills add NiazMorshed2007/reanimate -g を実行し、その後 bash <reanimate>/scripts/setup.sh を実行します。 次に rv setup を一度実行します(測定ツールの numpy と opencv を、このキット独自の Python 環境にインストールします。ほとんどの Mac にある python3 はグローバル pip install を拒否します)。確認は rv doctor で行います。(rv はこのスキルの rv ファイルです。)

トラップとキットの対応

トラップ(標準 reanimate、ビデオからの場合)キットの対応
110ビットビデオ(ProRes、ほとんどのストック映像)が16ビットPNGになり、1フレーム10MBにrv ref が8ビットフレームを書き出し
2シートがすべてのフレームを1ページにインライン展開し、1080pフレームでタイムアウトシートは480ピクセルコピーから生成
3file:// で開かれたコピーはESモジュールを読み込めず、reanimate は何も言わずに空白ページを記録rv serve + rv round は file:// を拒否し、すべての録画は BLANK または FROZEN チェックされるとラウンドを停止
4コピーの最初のフレームが最初のアニメーションフレームより先に記録されるテンプレートは読み込み時に描画
5300フレームを1080pで比較すると、1ラウンドに数分かかるラウンドでは毎回同じ方法でハーフサイズ(シャープ&4pxブラー)で比較
6ビデオには読み取る要素トラックやキーフレームがないmeasure/:中心、フロート、回転、弧、フェード、サイズ、セグメント、タイプフェイスをピクセルから測定
7仮想クロックは浮動小数点でティックを加算し、フレームの最後のティックをスキップすることがある:そのフレームはページを1ティック早く表示(デフォルト60Hzで17ms)テンプレート上のコピーは、t = k / fps で正確に描画関数を呼び出して記録;他のページは240Hzティックで記録
8(キット独自のツール)numpy と opencv を、ほとんどのMacのpython3(Homebrew、PEP 668)にpipインストールできないrv setup がキット独自のPython(.venv)を作成;rv measure <tool> はそれを使って各ツールを実行

tests/run.sh は、標準 reanimate(赤)での各トラップを再現し、次にキットの方法(緑)で実行します;tests/e2e.sh は小規模ケース(参照そのものがコピーである場合は0%、間違った色が埋め込まれている場合はそれより悪い値)でパス全体を実行します。キットに変更を加えた後は、両方を実行してください。

その前に:このビデオはコピーしてよいか?

ユーザーがコピーを許可されているビデオの LOOK のみをコピーしてください:自分自身のもの、または変更を許可するフリーライセンス(Videezy Standard License:個人・商用利用無料、クレジット「Videezy.com」必要;Mixkit フリーライセンス;Pexels と Pixabay のライセンス)。ライセンス、そのソースリンク、日付を <作業ディレクトリ>/LICENSE.md に書き込み、ビデオが表示される場所すべてでクレジットを画面に表示します(<作業ディレクトリ>/film.json の "credit")。ゲームの映像は MOTION のみコピーされます(reanimate のデフォルト):ルック(言葉、フォント、色、アート)はユーザー自身のものになります。

手順

  1. rv doctor
  2. rv ref <動画> <作業ディレクトリ>(部分的な場合は --start/--end、1つの要素に対しては --crop x,y,w,h を追加)。<作業ディレクトリ>/ref/sheets 内のすべてのシートと、<作業ディレクトリ>/ref/sheets_full_rate 内のフルレートシートを読んでください。計測前に、何がいつ動くかを書き留めます。
  3. 各移動要素を、その種類の動きに対応するツール(measure/README.md 参照。各ツールは rv measure <ツール> ... で実行)で測定し、<作業ディレクトリ>/ref/frames に対して行います。ツールを要素に適用する前に、そのツールが正しいことを証明してください(その --sheet、または一致する必要がある2番目のフレームを使用)。
  4. <作業ディレクトリ>/spec.md:要素ごと、プロパティごとに1行:開始、持続時間、from -> to、イージングまたは測定テーブル、および数値の出典ファイル。「?」のある行は未完了です。
  5. 構築:template/ をプロジェクトにコピーします。animation.js は draw(ctx, t)(時間の純粋関数)と DURATION をエクスポートします。測定した数値はすべて、出典ファイルとともにモジュールに配置します。キャンバスは参照のサイズに合わせます(<作業ディレクトリ>/run.json)。
  6. rv serve <コピーディレクトリ> を実行し、次に rv round 1 <作業ディレクトリ> --url http://127.0.0.1:8765/index.html を実行します。<作業ディレクトリ>/compare-1/report.md とそのシート(compare-1/sheets)を読んでください:数値はどれだけずれているか、シートは何がずれているかを示します。最も大きな差異のみを修正し、その後 rv round 2 ... を実行します。5ラウンドで停止します;それでも失敗するものは、数値と理由とともに報告されます。
  7. rv rounds <作業ディレクトリ>(表)と rv film <作業ディレクトリ>(プロセスクリップ、1080x1920:ビデオ、そのフレーム、各ラウンドと差異を赤で示したものとその数値、数値の減少、最終同期状態)。
  8. 報告:何がどの忠実度でコピーされたか、ファイル、ラウンド表、何がずれたままかとその理由。

ビデオからコピーできるものとできないもの

測定によりうまくコピーできるもの:形状、テキスト、回転するリングや弧、点灯するティックやセグメント、フェードやフラッシュ、拡大やスライド、それらの順序とタイミング。measure/ で測定し、形状として再構築します。

測定ではコピーできないもの:3Dレンダリングシーン、実写映像、ランダムに配置されたパーティクル、断片がフラッシュして変化する背景。measure/spin.py は AGREEMENT でそれを示します(約0.3未満の場合、帯域は単なる回転以上のことを行っています)。2026年11月6日、カウントダウンのトンネルは0.16〜0.6を示しました:コピーの3ラウンドはそれをスミアのままにしました(画素の76%→48%がずれている)が、HUDは一致しました。その場合:前面の要素をコピーし、背景にはユーザー自身のシーン(ゲームのもの、ページのもの)を与え、要素がある場所のみを比較するか、背景が単色の参照を選んでください。そのようなコピーをピクセルパーフェクトと呼んではいけません。

合格基準(reanimate のものをビデオ用に読み替え)

  • タイミング:すべてのイベント(要素の10/50/90%の立ち上がりと立ち下がり、measure/curve.py)が参照から0.08秒以内。
  • イージング:コピーの測定曲線が参照のものから5%以内(平均絶対差)。
  • ピクセル:ピクセル忠実コピーの場合、平均不一致が最大2%(ユーザーがルックをコピーすることを許可されている参照のみ、かつ背景がコピー対象の一部である場合のみ);シャープな数値とブラーをかけた数値を併記。
  • すべてのラウンドの録画がガードを通過(ブランクやフリーズフレームなし)。

学んだ落とし穴

  • デザイン全体に1つの浮動小数点は仮説に過ぎない:何かを安定させる前に、各リングの中心を元のフレームでフィットさせる(polar.py fit)。2026年11月6日(Videezy 40314)、最初のフィットは最も明るいリング(白いリング)にロックオンし、それは8.5ピクセルドリフトします;319にあるリングは0.1ピクセルしか動きません。3ラウンドでHUD全体を浮かせ、間違ったレイヤーで安定させたフレーム上で測定しました;ラウンド4では、白いリングのみを浮かせ、すべてを静止中心の周りで再測定したところ、12.6%→9.3%に改善しました。

  • ラウンドを費やす前に、数フレームで変更を試す:rv still <作業ディレクトリ> --url ... --frames 0,60,150 を実行し、それらのフレームを compare.ts で最後のラウンドのコードと比較します。2026年11月、3つの候補変更のうち2つは効果があり(10.0→9.5→8.9%)、1つは悪化させました(13.3%):それは決してラウンドになりませんでした。

  • measure/radial_diff.py はラウンドデザインがどこでずれているかを半径ごとに示します;静止部分のみを読み取ります。フローティングリングはその中央値でスミアするため、compare.ts がこれと矛盾する場合はそれに従って判断してください。

  • 静止リングはすべての角度で明るい:角度に対する30パーセンタイルはそれを保持し、動くものを落とします。これがリングの真の半径と幅を読み取る方法です。

  • rv film は被写体にクロップします(film.json の "crop"):ショーケースは被写体を大きく表示します。

  • 「最もシャープなリング」から見つけた中心は、中央に大きな白い形状があると迷走します:数フレーム上の小さな明るいランドマークを使用し、フレームが一致する場合のみそれを信頼します(measure/polar.py landmark)。

  • グローはすべてのエッジを太くします:タイプフェイスは目視ではなく測定で選びます(measure/fontmatch.py)。

  • 測定されたズームや回転は、2番目の視点が一致するまでは仮説です:2026年11月、対数極座標相関が3%/秒のズームを報告しましたが、半径対時間のストリップはそれが存在しないことを示し、コピーはそのズームでトンネルを1ラウンド縮めました。

  • 面積はサイズの2乗で増加する:数値のサイズは、その前のフレームを超える白領域の平方根、またはそのボックスです。

  • 無料ストック映像は多くの場合4K ProRes、1〜2GB/クリップです:1920幅で読み取り(rv ref が行います)、記録用にオリジナルを保持し、ディスク容量に注意してください。

関連スキル