Communitygithub.com

maverickmaltin/stick-figure

アイデアや質問を、棒人間とペット、小道具で構成された漫画風の解説動画(1080×1920 MP4)に変換します。

stick-figure とは?

このスキルは、ユーザーが提示したアイデアや質問(「なぜあくびはうつるのか?」「なぜ猫はものをテーブルから落とすのか?」など)に対して、棒人間アニメーションによる簡潔な解説動画を生成します。5〜7秒の無音MP4ファイルとして出力され、フレームチェックを経てレンダリングされます。対応プラットフォームはClaude Code、Cursor、CodexなどのAIエージェント環境で、ブラウザがない場合でもHTML版を生成可能です。仕様JSONファイルでシーン、キャラクター、ビート(動作とタイミング)、小道具、吹き出しなどを細かく定義でき、ユーザーは結果のMP4を確認後、バリエーションの変更をリクエストできます。

対応✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/maverickmaltin/claude-animate-skills/tree/HEAD/skills/stick-figure

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

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

ドキュメント

/stick-figure: 棒人間で作る漫画解説

ユーザーがアイデアや質問(「なぜあくびはうつるのか?」「なぜ猫はものをテーブルから落とすのか?」「なぜ先延ばしにするのか?」)を入力します。あなたはその答えを一行で書き、それを示す小さなシーンを構成し、数フレームを確認した後、動画をレンダリングして無音のMP4(5〜7秒)を手渡します。

${CLAUDE_SKILL_DIR} はこのスキルが配置されているフォルダ(このSKILL.mdがあるフォルダ)です。環境が自動で埋め込まない場合は、そのフォルダのパスを手動で指定してください。すべてのファイルはユーザーのカレントフォルダ、またはユーザーが指定したフォルダに保存してください。

0. セットアップ確認

python3 "${CLAUDE_SKILL_DIR}/scripts/render.py" --check

数秒かかります。このコンピュータがセットアップ済みか不明な場合は実行してください。"ready": true なら問題ありません。そうでなければ、"fix" にリストされたコマンドを実行し、ユーザーに「一度だけのインストールです」と伝えてください:python3 -m pip install playwright(ブラウザドライバ)、python3 -m playwright install chromium(Google Chrome や Edge がインストールされていない場合のみ、約150 MB)、python3 -m pip install imageio-ffmpeg(ffmpeg がない場合のみ)。pip が「外部管理環境」を理由に拒否した場合は、プライベート環境を一度作成し、すべてのコマンドにそのPythonを使用します:python3 -m venv ~/.animate-skills && ~/.animate-skills/bin/pip install playwright imageio-ffmpeg、必要に応じて ~/.animate-skills/bin/python -m playwright install chromium。Windows の場合は python3 の代わりに py を使用してください。ここでブラウザが使用できない場合(Claude アプリのサンドボックスなど)は、このファイルの末尾を参照してください。

1. シーンを計画する(簡潔に)

  • タイトル: 質問やアイデアの短いもの(最大約40文字)。
  • 答え: 一行での説明で、真実かつ簡潔(最大約45文字)。これは 1 秒ほど経ってから表示されます。
  • シーン: 1〜4人のキャラクターが、5〜7秒の間に3〜8ビートで答えを表現します。現象が起きている様子を見せます:あくびが人から人へ移る、猫がテーブルからマグカップを落とす、犬が起きて尻尾を振る。最後のビートがオチとなり、画面に残ります。

2. 仕様を書く

stick-<topic>.json を保存します。例(examples/knock-things-off.json):

{
  "title": "Why do cats knock things off tables?",
  "answer": "Hunting instinct, and it gets your attention",
  "scene": "room",
  "props": [{"type": "table", "x": 0.62}, {"type": "cup", "x": 0.70, "on": "table", "wobbleAt": 1.6, "fallAt": 2.15},
            {"type": "plant", "x": 0.08}],
  "figures": [{"id": "cat", "kind": "cat", "x": 0.52, "on": "table", "head": "#F4A261", "hatColor": "#F4A261"},
              {"id": "you", "x": 1.2, "label": "You", "hat": "hair", "hatColor": "#6B4423"}],
  "beats": [
    {"who": "cat", "do": "look", "at": 0.0, "for": 1.0, "to": 0.7},
    {"who": "cat", "do": "swipe", "at": 1.0, "for": 1.2, "to": 0.7, "say": "Boop"},
    {"who": "you", "do": "run", "at": 2.3, "for": 0.8, "to": 0.86},
    {"who": "you", "do": "surprised", "at": 3.1, "for": 0.9, "say": "My mug!"},
    {"who": "cat", "do": "sit", "at": 3.3, "for": 1.0},
    {"who": "you", "do": "point", "at": 4.1, "for": 1.2, "to": "cat"},
    {"who": "cat", "do": "love", "at": 4.4, "for": 1.0}
  ],
  "arrows": [{"from": "cat", "to": "you", "at": 3.6, "for": 0.4}]
}

その他の例:examples/contagious-yawns.json(3人)、examples/procrastination.json(オフィス、誰かが入ってくる)、examples/dog-wags.json(犬と子供、公園)。

シーン:street(空、歩道、道路)、park(太陽、丘、芝生)、room、office(窓から街並み)、classroom(黒板に "board": "text" を追加)、night(星と月)、plain("background": "#hex" を追加)。

フィギュア(x は0=左端、1=右端。登場前や退場時は -0.2 や 1.2 を使う)。縦長の動画には3人が快適に収まります(x 0.2、0.5、0.8)。4人目を追加する場合は scale を約0.85、間隔を約0.22にします。犬や猫の横顔はフレーム幅の約0.35の大きさ(x は体の位置、鼻は約0.2前方)。ペットが走り寄る人物から約0.3の距離で止まるように設定してください。名前ラベルは短く(「Bill」、長い説明は避ける):

  • kind:person(デフォルト)、cat、dog(横顔、人の身長の約3分の1)。
  • id、x、label(足元に表示される名前:「You」、「Your brain」)、scale(子供は0.6〜0.8)、facing(left / right。指定がない場合は中央を向き、最後に動いたり、指さしたり、スワイプした方向を向く)。
  • on:家具の上に立つ:table、desk、bench、shelf、bed(同じ x に家具プロップを配置)。
  • 人物:hat(cap、tophat、beanie、crown、bow、hair)、hatColor(髪の色にもなる)、head(肌の色)、glasses(true)、tie(色)。ペット:head(毛の色)、hatColor(耳の色)。

ビート({"who", "do", "at", "for", "to", "say"}、単位は秒)。to は別のフィギュアのidか、x座標(0〜1)。

do(人物)見た目do(人物)見た目
walk、runto に向かって移動talk口が動き、片手でジェスチャー
wave手を振り、大きな笑顔yawn両腕を上げ、大きなあくび、目を閉じる
look顔を to に向けるpointto を指さす(フィギュアの頭、またはテーブルの高さのx座標)
think手をあごに当てる(say があれば思考吹き出し)shrug「さあね?」
jump嬉しそうにジャンプcheer両手をV字に上げる
surprised飛び上がり、「!」sadうつむき、涙
sleep目を閉じ、Zzzlaugh跳ねながら大笑い
dance踊る、音符idea手を上げ、電球
loveハートfall倒れてそのまま
raise片手を上げる(投票、質問、「私!」)write机で書いたり署名したりする
relabel名前タグを変更:{"who": "bill", "do": "relabel", "at": 4, "text": "Law"}

ペット:walk、run、jump、sit、swipe(to に向かって前足で払う、物を落とす動作)、sleep(丸くなり、Zzz)、meow / bark / talk(口を開ける;say を追加)、surprised(背中を丸め、「!」)、look(to の方を向く)、wag(嬉しそうに尻尾を振る)、love、idea、sad。

say はそのビートの間、そのフィギュアの上に吹き出しを表示します(最大5単語。think は思考吹き出し。吹き出しはそのビートの小さなアイコンに置き換わります。他の人の顔に重ならないように調整されます)。各フィギュアの最後のビートは終了時までポーズを保持します(walk、run、talk、yawn を除く)。シーン内で最後に発せられた台詞もそのまま表示されるので、オチで終わるようにしてください。point は遠くのフィギュアの頭を、近くのフィギュアの胸を狙います。

小道具({"type", "x", ...}):家具とセットピース bus-stop、tree、bench、desk(ノートパソコン付き)、table、door、sign(text 付き)、car("drive": 1 で通り過ぎる)、house、plant、lamp、tv、bed。小さなオブジェクト cup、mug、glass、vase、bottle、plate、ball、book、phone、box、paper(書類)。小さなオブジェクトは床に置くか、"on": "table"(または desk、bench、shelf、bed)と指定します。x はその家具の横幅(その x を中心に約±0.15)の範囲内に設定します。"wobbleAt": s でぐらつかせ、"fallAt": s で落とします("fallDir": -1 で左に)。カップ、グラス、花瓶、ボトル、皿は割れて「CRASH」と表示されます("sound": "SMASH!" で変更可能)。ボールは跳ねて飛び去ります。その他 color、scale、front: true(キャラクターの前面に描画)。

矢印({"from", "to", "at", "for", "color", "hold"}):頭から頭への点線の矢印で、「それが伝わる」様子を表現。hold は描画後に表示され続ける時間(デフォルト 0.9 秒)。

その他のフィールド:answer は適切な位置(1行あたり約24文字)で自動改行されます。改行位置を指定したい場合は | を挿入します。answerAt(秒、デフォルト約1.1)、size("1080x1920" デフォルト、"1080x1080"、"1920x1080")、duration(デフォルト:最後のビートの終了時間 + 1.3 秒、最低 5 秒)、fps(デフォルト 30)。

ステージングのコツ:最初のビートは 0.0 秒から始め、誰も最初から静止しないようにします。ビートを少し重ねて常に何かが動いているようにします。各ビートは 0.8〜1.6 秒。倒したり、重要な瞬間は中盤に配置し、その後のリアクションを入れます。

3. 3フレームを確認

python3 "${CLAUDE_SKILL_DIR}/scripts/render.py" stick-<topic>.json --still 0.5 --out stick-<topic>-check1.png
python3 "${CLAUDE_SKILL_DIR}/scripts/render.py" stick-<topic>.json --still 2.5 --out stick-<topic>-check2.png
python3 "${CLAUDE_SKILL_DIR}/scripts/render.py" stick-<topic>.json --still end --out stick-<topic>-check3.png

--still には秒数または end を指定します。重要な瞬間(物が倒れる、明かされる瞬間)の時間も確認してください。画像を見て:キャラクターが画面にいて正しい方向を向いているか、誰かが他の人を通り抜けていないか、吹き出しが顔やタイトルを隠していないか、音声なしでストーリーが理解できるかを確認します。問題があれば位置やタイミングを調整し、再度確認します。

4. 動画をレンダリング

python3 "${CLAUDE_SKILL_DIR}/scripts/render.py" stick-<topic>.json --out stick-<topic>.mp4

約10〜25秒かかります。確認用画像は削除します。

5. 引き渡し

ユーザーにMP4のパスを伝えます(環境がファイルを表示できるなら表示します)。音声は含まれていないので、音楽やナレーションを後から追加できます。必要に応じて、1つのバリエーション(別のエンディング、別のシーン)を提案します。

ここでブラウザが使えない場合(Claude アプリのサンドボックスなど)

セットアップ確認でブラウザが起動できない場合は、代わりにアニメーションをページとして出力します: python3 "${CLAUDE_SKILL_DIR}/scripts/render.py" stick-<topic>.json --html stick-<topic>.html。このページは任意のブラウザで再生できます(可能であればアーティファクトとして表示します)。ユーザーには、MP4が必要な場合はコンピューター上のClaude Codeを使用するか、ページをスクリーン録画するよう伝えます。

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

関連スキル