Communitygithub.com

GPT 手描きアニメーションスキル

p5.js/p5.brush エンジン、ヘッドレス Chrome、FFmpeg を使って、水彩・インク風の手描きアニメーション動画、ショートアニメ、ミュージックビデオ、リリックビデオ、アニメループを作成します。この塗りスタイルや明示的な gpt-hand-drawing-skill のリクエストに使用してください。通常の動画編集や Remotion プロジェクトはそれぞれのワークフローを使ってください。

GPT 手描きアニメーションスキル とは?

このスキルは、Codex エージェントが p5.brush 描画エンジン、ヘッドレス Chrome、FFmpeg を組み合わせて、水彩画やインク画のような手描き風アニメーションを生成するためのものです。フレームは時間の純粋関数として計算されるため、Claude ランタイムや有料 API、画像生成モデルを必要としません。プロジェクトの初期化、ストーリーボードの作成、シーンの実装、フレームのプレビュー、エンコードまでの全工程をコマンドラインで実行できます。特徴的なキャラクター「Clawd」が組み込まれており、ユーザーの指定したキャストやスタイルに沿ってアニメーションを制作します。主な用途は、リリックビデオ、ミュージックビデオ、ショートアニメーション、アニメループで、各フレームは決定論的に生成されるため再現性が高く、並列レンダリングにも対応しています。

対応✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/chao69782/gpt-hand-drawing-skill/tree/HEAD

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

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

ドキュメント

GPT 手描きアニメーションスキル (Codex 向け)

動作するアニメーションプロジェクトと、要求された MP4 またはループを作成します。フレームは時間の決定論的関数であり、p5.brush で Chrome 内に描画され、FFmpeg でエンコードされます。Claude ランタイム、有料 API、画像生成モデルは必要ありません。Clawd はオプションの組み込みキャラクターです。ユーザーの選んだキャストとスタイルに従ってください。

プロジェクトの開始

ロードされた SKILL.md の場所からこのスキルのディレクトリを特定します。Claude のディレクトリをハードコードしないでください。以下を実行します:

python "<skill-dir>/scripts/new_project.py" "<project-dir>"

クロスプラットフォームの初期化ツールは template/ をコピーし、デモを切り離し、npm ci でロックされた依存関係をインストールし、ツールを報告します。デモまたはエンジンチェックの場合のみ --keep-demo を、スキャフォールディングのみの場合は --skip-install を、Node はあるが npm が PATH にない場合は --npm-cli /path/to/npm-cli.js を使用します。NPM_CLI_JS は同等の環境変数による上書きです。空でないプロジェクトは上書きしません。

デザインを始める前に、生成された ANIMATION_GUIDE.md をすべて読んでください。利用可能な画像ビューア(例: 実行ツールの view_image)で docs/emotions.jpg と docs/views.jpg を確認してください。ガイドにはエンジンとキャラクター API が含まれています。ミュージックビデオまたは約 20 秒より長い動画の場合は references/music-video.md を読んでください。ランタイムの問題、プラットフォームコマンド、レンダラーの制限については references/codex-runtime.md を読んでください。

計画と構築

ユーザーの既存の選択を使用します。作業に実質的に影響する不足情報のみを尋ね、回答済みの質問を繰り返さないでください。MV の場合は、オーディオとタイミングソースを収集します。リリックビデオには、提供された歌詞と LRC または同等のタイムスタンプが必要です。不足している歌詞を作成しないでください。インストゥルメンタル MV には LRC は必要ありません。クリエイティブの方向性が欠けている場合、1 つのオプションの質問で、ストーリー、ムード、繰り返し現れるイメージ、避けるべき点をカバーできます。ユーザーが方向性を委任した場合は、首尾一貫した解釈を提案して進めてください。

音楽を計測するには: python "<skill-dir>/scripts/beat_grid.py" song.mp3 --from=0 --to=30 --lrc=song.lrc(NumPy と FFmpeg が必要)。テンポは半拍/倍拍の曖昧さがある推定値として扱います。提供されたオーディオとタイムスタンプがタイミングを定義します。LRC は通常、行単位でタイミングを取るため、カラオケの文字単位の塗りつぶしは、ワードレベルのタイミングが提供されない限り近似値です。強制アライメントを主張しないでください。

STORYBOARD.md を作成します: ログライン、世界とパレットの弧、ビジュアルモチーフ、感情の弧、および時間範囲、アクション、視聴者の読み取り、トランジションを含むショット。必要に応じて方向性をレビューのために共有します。ユーザーが続行を依頼した場合は、そのまま進めてください。完全な実例は examples/xiaozhen/STORYBOARD.md にあり、そのシーンファイルも同じ場所にあります。

src/config.js に duration、bpm、offset、およびオプションの audio を設定します。シーンを src/scenes/ 内の IIFE として実装し、shots([[t0, fn], ...]) で登録し、それらのスクリプトを studio.html に含めます。まず読み取り可能なポーズをブロックします。ショット全体で共通のキャスト、パレット、および繰り返し現れるモチーフを使用します。

レンダリングと確認

プロジェクトディレクトリから、必要に応じて選択したフレーム、短いモーションストリップ、詳細をレンダリングします:

node render.mjs --sheet=0.1,0.8,1.6,2.4 --cols=4 --w=480 --out=out/check/poses.jpg
node render.mjs --strip=2.1:2.6 --out=out/check/motion.jpg
node render.mjs --sheet=2.3 --crop=760,420,500,400 --w=500 --out=out/check/face.jpg

生成された画像を開きます。各ショットのイベントと読み取り時間、顔、プロップの接触、キャラクターサイズ、トランジション、パレットを確認します。主要なアクションと継ぎ目の周りのモーションを検査します。観察された問題を修正し、その後影響を受けるフレームを再度検査します。コンタクトシートはポーズと連続性を検証します。重要なモーションタイミングについては、短いエンコード済みプレビューを検査します。ソースコードのみから視覚的なレビューを行ったと主張しないでください。

測定された ms/フレームとフレーム数を使用して最終コストを見積もります。このデスクトップ環境はローカルです。動画作成のリクエストは通常、ローカルレンダリングを許可します。明示的なローカル/クラウドの選択を尊重します。必須の場所承認ゲートを追加したり、許可なく有料/クラウドサービスを使用したりしないでください。作業が実際にリモートで、レンダリング場所が重要な場合は、フルレンダリングの前に明確にしてください。ユーザーがソースまたはローカルコマンドのみを要求した場合は、実行可能なプロジェクトとプレビューを保持します。

node render.mjs --clip --out=out/video.mp4
node render.mjs --frames --workers=4
node render.mjs --encode --audio=assets/song.mp3 --out=out/video.mp4

フレームレンダリングとエンコードで同じ --fps を使用します。フレームファイルは再開可能ですが、変更された時間範囲のキャッシュされたフレームは再レンダリング前に削除する必要があります。--encode は 0 からフレームを消費します。後半から始まる部分的な範囲には、独自の FFmpeg 開始番号と一致するオーディオトリムが必要です(ランタイムリファレンスを参照)。

ffprobe でエンコードされた duration、解像度、fps、オーディオを検証し、結果を検査します。動画とプロジェクトのパス、測定されたパフォーマンス、および実際の制限を返します。node_modules、フレームキャッシュ、および一時ファイルはポータブルソースアーカイブから除外します。

ビジュアルとエンジンの不変条件

  • paint() と inkLine() で描画します。加算光には glow() を使用します。フラットな 2D 描画のキービュー、ソフトなパレット、沸騰するインク。これらはスタイルのデフォルトです。明示的なユーザー要件が優先されます。
  • 不要なテキストは避けます。リリックカラオケと要求されたレタリングはサポートされています。timeline.js の後に src/karaoke.js をロードし、LY を埋め、アクションをその下部バンドより上に保ちます。実際のフォントと中国語のグリフを確認します。
  • すべてのショットには、イベント、原因とそれに続く反応、および読み取れる保持された意味が必要です。emotions() で顔をアニメーション化し、feel() でアイドル状態をアニメーション化します。トランジションをストーリーに合わせ、適切な場合はエンディングをオープニングに接続します。
  • すべてのフレームは t の純粋関数です。蓄積シミュレーション、シードされていない Math.random()、またはレンダリング順序への依存はありません。安定したバリエーションには hash() を使用し、独立した要素ごとに boilSeed(key) を使用します。
  • p5 のグローバル名前空間の衝突を避けるために、ヘルパーをシーン IIFE 内に保持します。退化したジオメトリと NaN をガードします。前景フレームでドア/窓の内容をマスクします。クローズアップではアウトラインの太さを減らします。
  • パフォーマンスはブラシの塗りつぶしとストロークに依存します。スケールアップする前に、代表的なフレームをいくつか測定します。GPU メモリが不足している場合は、過剰なジオメトリとワーカー数を減らします。--soft-gl はデフォルトの最適化ではなく、低速なフォールバックです。
  • ユーザーが明示的にエージェントを要求しない限り、チャプターを順次実装します。並列レンダリングワーカーはレンダラーの機能であり、サブエージェントを必要としません。

ソースとライセンス: references/upstream.md。エンジンまたはスキルを再配布する場合は、バンドルされた両方の MIT 通知を保持します。

関連スキル