Communitygithub.com

JAYANTCH1797/animate

参照画像や動画とざっくりしたアイデアから、すべてのフレームをコードで描画し、音響を合成した短編アニメーションMP4を生成します。ユーザーが提供する静止画をアニメートする、参照シーンを塗り直す、または参照のスタイルで新しい短編作品を作る(解説、アニメーションストーリー、モーショングラフィックス、ループなど)3つのジョブを実行します。

animate とは?

このスキルは、ユーザーが提供する参照画像や動画とざっくりしたアイデアから、完全にコードで描画されたすべてのフレームと合成されたサウンドトラックを持つ短編アニメーション(MP4)を生成するAIエージェント用のツールです。主に3つのジョブをサポートします。**Move the artwork**(画像をレイヤーに分割して動かす)、**Repaint**(参照シーンをコードで描き直す)、**New film**(参照のスタイルで新しい作品を制作する)です。デフォルトの長さは15秒(ムービー)または5秒(動く画像)で、1080x1920の解像度で出力されます。処理は5段階に分かれており、参照の分析(study)、ビートの計画(beats)、画像の構築(piece.htmlでの描画)、サウンドの合成(score.jsonとsynth.py)、レンダリングと品質チェック(render.pyとqc.py)で構成されています。Claude Code、Cursor、CodexなどのAIエージェントがこのスキルを使用し、ユーザーはざっくりしたアイデア(リファレンスと簡単な指示)を与えるだけで、エージェントがディレクターとして創造的な判断を下します。コードは形状、線、グラデーション、テクスチャに強く、フォトリアリズムや表情の演技には弱いため、その点を考慮したスタイル提案が行われます。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/JAYANTCH1797/animate-skill/tree/HEAD

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

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

ドキュメント

animate は何をしますか?

参照とざっくりしたアイデアを、すべてのフレームがコードで描画され、サウンドが合成されたMP4に変換します。 ユーザーが味覚を持ち込み、あなたが演出を行います。ざっくりしたブリーフで十分なので、創造的な判断は自分で行い、作品全体を変えるようなことだけを質問してください。

すべては animations/<slug>/ に格納されます:

refs/  study/  style.md  beats.md  piece.html  score.json  out/<slug>.mp4

必要に応じて、そこにヘルパースクリプトやメモを追加します。このスキルのフォルダ内にある examples/bee-dance/ は、完成した作品例です。

以下のコマンドで、$SKILL はこのスキルのフォルダを意味します。ユーザーのプロジェクトから、$SKILL/.venv/bin/python が存在する場合はそれを使って、存在しない場合は python3 を使って実行してください。パッケージが不足している場合は、README.md のセットアップを参照してください。ffmpeg と Chrome が必要です。

ジョブを選ぶ

ユーザーの希望ジョブ方法
「この画像をアニメートして」Move the artwork画像をレイヤーに分割して動かします。references/move-an-image.md を読んでください。ステージ3〜4の piece.html はスキップし、レンダリングはPythonスクリプトを使用します。
「これを描いて」「このシーンを再現して」Repaintシーン全体を piece.html で描画し、参照に忠実に合わせます。
トピックやストーリーを「このスタイルで」New film以下の全プロセスを実行します。参照がルックを設定し、題材は新しいものになります。

長さや形状が指定されていない場合、ムービーは15秒、動く画像は5秒で、1080x1920 を使用します。

コードは、形状、線、グラデーション、テクスチャに強みがあります。フラットベクター、線画、ペーパーカット、リソグラフ、水彩、アニメ背景、植物図版などです。フォトリアリズムや表情の演技には弱いです。参照がフォトリアリスティックな場合は、そのことを事前に伝え、イラスト風の解釈を提案してください。

ステージ1:すべての参照を研究する

ユーザーが多くの参照を渡す場合があるので、それぞれに役割を与え、平均化して台無しにしないようにします。

python3 $SKILL/scripts/study.py animations/<slug>/study <files or folders...>

これにより、参照ごとに、コンタクトシート、パレット、ビデオの場合はカットとペーシングカーブが得られます。ビデオの一部だけが重要な場合は、秒単位で範囲を追加します(例:"reel.mp4@0-12")。トーキングヘッドの映像は結果を歪めます。次に、自分でシートを確認し、テクスチャが重要な部分をクロップします。数値だけでは、なぜ良い感じがするのかを教えてくれません。

style.md を書きます:

  • 各参照が私たちに与えるもの、それぞれ一行:これからテクスチャ、あれからタイプ、別のものからペーシング。
  • コピーしないもの:ポーズ、キャラクター、ロゴ、署名、正確な構図。スタイルを取り、作品は取りません。例外は、ユーザーがアニメートするよう依頼した画像に対するRepaintまたはMoveジョブです。
  • パレット(16進数値)、タイプ(assets/fonts/ には最初に2つあります。またはオープンフォントをコピーします)、テクスチャ、モーションの雰囲気。
  • 作品をまとめる一つの仕掛け:レンズ、さざ波、決して途切れない線。これがない映画はスライドショーのように感じられます。

新しい参照ごとに animations/library.md に短いカードを追加し、その教訓がこのプロジェクトを超えて生き続けるようにします。ユーザーが以前使ったスタイルを指した場合はカードを再利用し、新しいことを学んだ場合のみ拡張します。

ゲート: この作品がどのような見た目で、なぜそれがトピックに役立つのかを一文で言えること。

ステージ2:ビート

作品に事実がある場合は、最初にそれらを確認します。間違った主張を美しく描いても依然として間違っており、一般的な「事実」はしばしば曖昧です。最終報告のためにソフトにしたことがあればメモしてください。

beats.md を一つの表として書きます。映像と音響は一緒に計画します。なぜなら、その同期が作品を高級に見せるからです:

時間映像音響
0-1.5 秒オレンジの雫が落ちて広がる滴る音、濡れたブロッサム、パッドが入る
1.5-3 秒タイトル行、詳細がポップオン単語ごとにプラック、小さなチック音

ゲート: 最初の0.5秒以内に動きがあること。形はフック、構築、ブレス、見返り。2秒以上新しい映像のアイデアがないストレッチがないこと。エンドは約1.5秒保持して読めるようにすること。新しいアイデアは言葉ではなく映像が運ぶこと。各キャプションは約1.5秒画面に表示される必要があるため、キャプションを短くする前に削減すること。縦長フレームの場合、上部12%と下部18%にテキストを配置しないこと。

ステージ3:画像を構築する

assets/piece-template.html を piece.html にコピーし、その中で描画します。契約は window.PIECE と window.renderFrame(t) です。

renderFrame(t) は t のみに依存しなければならず、非同期でも構いません。静止画は任意の時間に直接ジャンプするため、フレーム間で何かを記憶したり、シードされていない Math.random() を使用すると壊れます。高価な静的レイヤーは、シードされたジェネレータから window.ready 内で一度ペイントし、フレームごとにコンポジットします。

作品内に別のフィルムを表示するには、そのフレームを clips/ に番号付きJPEGとして抽出し、非同期 renderFrame 内で Image を使って必要なものを読み込み、キャンバスに描画します。

描画する前に references/styles.md を読んでください。ここには動作するレシピ(セル風の雲、葉、歩くフィギュア、水、水彩、紙)とコピー元のソースファイルがあります。奥行きは異なる速度で動くレイヤーから生まれ、生命感は小さな二次的な動き(揺れ、ドリフト、きらめき、ちらつき)から生まれます。

フルレンダリングのかなり前に、早期かつ頻繁に静止画をレビューします:

python3 $SKILL/scripts/render.py animations/<slug>/piece.html --stills 0.5 3 7 12

フルサイズで見て、参照と並べて比較し、ずれている箇所を修正します。数ラウンドを想定してください。最初の静止画は通常ラフドラフトであり、このループが品質を生み出します。

python3 $SKILL/scripts/compare.py animations/<slug>/out/compare.jpg <stills and reference images...>

ゲート: 中間の静止画が、参照と同じ素材(同じ紙、絵の具、線、色)で作られたように見えること。題材は新しくても構いません。参照のクリップアート版は合格しません。

ステージ4:サウンド

beats.md と同じ時間に対して score.json を書きます。scripts/synth.py のヘッダーで利用可能なサウンドを確認してください:プラック、ベル、パッド、ドリップ、チック、スウェル、ウーッシュ、インパクト、キック、ノイズベッド。

python3 $SKILL/scripts/synth.py animations/<slug>/score.json animations/<slug>/out/score.wav

一つのキーに留めてください。グリッドではなく、映像イベントにヒットを合わせてください。見返りの前は本当に静かにしてください。コントラストが決め手になるからです。長い音符の連続は手打ちせず、数行のPythonで生成してください。

音が聞こえないので、synth.py が出力するレベルレポートを読んでください。計画していなかったディップや、シグネチャーサウンドが他に埋もれていないかを確認します。

作品にナレーションが入る場合

ナレーションは映像の前に来ます。なぜなら、言葉のタイミングがすべてのビートを設定するからです。ユーザーが持っている任意の音声ツールで録音し、単語タイミング付きで文字起こし(faster-whisperが有効)し、そのタイミングからビートとキャプションを構築します。Whisperは単語をその前の無音部分で早めに開始することがあるので、ポーズをカットする前に波形を確認してください。

ナレーションをスコアにミックスし、その結果を --audio としてレンダリングします。スコアはナレーションの下でダッキングされ、ポーズ中に音楽が浮かび上がります:

python3 $SKILL/scripts/mix.py animations/<slug>/out/voice.wav animations/<slug>/out/score.wav animations/<slug>/out/mix.wav

ステージ5:レンダリング、チェック、修正

python3 $SKILL/scripts/render.py animations/<slug>/piece.html --audio animations/<slug>/out/score.wav
python3 $SKILL/scripts/qc.py animations/<slug>/out/<slug>.mp4

render.py は out/<slug>.mp4 を書き出し、-14 LUFS でマスタリングします。進捗を表示し、一般的な作品で15秒あたり約1〜2分かかります。作品が重い場合はバックグラウンドで実行してください。サウンドのみの変更後は、--remux を追加して再描画せずに数秒でオーディオを差し替えます。

qc.py はデッドストレッチ、1フレームのグリッチ、ラウドネスをフラグし、コンタクトシートを書き出します。モーションが良いかどうかは判断できないので、シートも読み、リスクのある瞬間(トランジション、テキストのオンオフ、レイヤーの重なり、繰り返しモーションの全サイクル)をクローズアップクロップでフレームごとに確認します。修正し、クリーンになるまで再レンダリングします。

引き渡し

ユーザーの平易な言葉で報告します:何を作成したか、各参照がどのように使用されたか、何をチェックしたか、チェックできなかったもの。スコアを聞いたり、速度で見たりすることはできないので、その旨を伝えます。追加で:

  • 知っておくべき事実:主張をソフトにした場合。
  • 簡単な調整案:次に依頼できる具体的な変更を3〜4つ。
  • 参照が他の誰かの作品であり、商用利用について検討が必要かどうか。

関連スキル