mcpField
C
cli-demo-generator

cli-demo-generator

github.com/daymadeクリエイティブ・メディア1.5k947 回インストール今日更新
リポジトリ

cli-demo-generator について

cli-demo-generatorは、アニメーション付きのターミナルデモをGIFにするスキルです。コマンドからの自動生成、バッチ処理、対話録画、VHSテープの手動作成に対応します。

主な機能

  1. 01コマンド一覧からGIFを生成
  2. 02YAML設定によるデモの一括作成
  3. 03対話型ターミナルセッションの録画
  4. 04VHSテープファイルの手動作成
  5. 05テーマ・サイズ・再生速度の調整

活用シーン

  1. 01ドキュメントへのターミナルデモ追加
  2. 02再現可能なコマンドワークフローの録画
  3. 03単一の設定から複数デモを作成

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/daymade/claude-code-skills --skill cli-demo-generator

インストール後、Claude Code で/cli-demo-generatorを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

assets/examples/
batch-config.yaml
assets/templates/
basic.tape
interactive.tape
self-bootstrap.tape
references/
advanced_patterns.md
best_practices.md
vhs_syntax.md
scripts/
auto_generate_demo.py
batch_generate.py
record_interactive.sh

詳細

CLI デモジェネレーター

プロフェッショナルなアニメーション付き CLI デモを作成します。完全自動からピクセル単位の精密な手動制御まで、4 つの方法があります。

クイックスタート

最も簡単な方法 — コマンドを指定して GIF を作成します:

python3 ${CLAUDE_SKILL_DIR}/scripts/auto_generate_demo.py \
  -c "npm install my-package" \
  -c "npm run build" \
  -o demo.gif

自動セットアップデモ — 状態を自動でクリーンアップする、繰り返し録画可能なデモ向けです:

python3 ${CLAUDE_SKILL_DIR}/scripts/auto_generate_demo.py \
  -c "npm install my-package" \
  -c "npm run build" \
  -o demo.gif \
  --bootstrap "npm uninstall my-package 2>/dev/null" \
  --speed 2

重要:VHS パーサーの制限事項

VHS の Type 文字列には $、\"、バッククォートを含められません。これらがあると解析エラーになります:

# FAILS — VHS parser rejects special chars
Type "echo \"hello $USER\""
Type "claude() { command claude \"$@\"; }"

回避策:コマンドを base64 でエンコードし、実行時にデコードします:

# 1. Encode your complex command
echo 'claude() { command claude "$@" 2>&1 | grep -v "noise"; }' | base64
# Output: Y2xhdWRlKCkgey4uLn0K

# 2. Use in tape
Type "echo Y2xhdWRlKCkgey4uLn0K | base64 -d > /tmp/wrapper.sh && source /tmp/wrapper.sh"

このパターンは、出力フィルタリング、関数定義、シェルの特殊文字を含むあらゆるコマンドで不可欠です。

方法

1. 自動生成(推奨)
python3 ${CLAUDE_SKILL_DIR}/scripts/auto_generate_demo.py \
  -c "command1" -c "command2" \
  -o output.gif \
  --title "My Demo" \
  --theme "Catppuccin Latte" \
  --font-size 24 \
  --width 1400 --height 600
フラグデフォルト説明
-c必須含めるコマンド(繰り返し指定可能)
-o必須出力 GIF のパス
--titleなし冒頭に表示するタイトル
--themeDraculaVHS のテーマ名
--font-size16フォントサイズ(pt)
--width1400ターミナルの幅(px)
--height700ターミナルの高さ(px)
--bootstrapなし非表示のセットアップコマンド(繰り返し指定可能)
--filterなし出力から除外する正規表現パターン
--speed1再生速度の倍率(gifsicle を使用)
--no-executefalse.tape のみを生成

スマートタイミング:install/build/test/deploy → 3 秒、ls/pwd/echo → 1 秒、その他 → 2 秒。

2. 一括生成

1 つの設定から複数のデモを作成します:

# demos.yaml
demos:
  - name: "Install"
    output: "install.gif"
    commands: ["npm install my-package"]
  - name: "Usage"
    output: "usage.gif"
    commands: ["my-package --help", "my-package run"]
python3 ${CLAUDE_SKILL_DIR}/scripts/batch_generate.py demos.yaml --output-dir ./gifs
3. インタラクティブ録画

ライブのターミナルセッションを録画します:

bash ${CLAUDE_SKILL_DIR}/scripts/record_interactive.sh output.gif --theme "Catppuccin Latte"
# Type commands naturally, Ctrl+D when done

asciinema が必要です(brew install asciinema)。

4. 手動テープファイル

最大限に制御するには、テープを直接記述します。テンプレートは assets/templates/ にあります:

  • basic.tape — シンプルなコマンドシーケンス
  • interactive.tape — タイピングのシミュレーション
  • self-bootstrap.tape — 非表示のセットアップを含む、自動クリーンアップ対応デモ(繰り返し使用するデモに推奨)

高度なパターン

これらのパターンは、実際の運用で使われています。詳しくは references/advanced_patterns.md を参照してください。

自動セットアップデモ

以前の状態をクリーンアップし、環境をセットアップして、それらすべてを視聴者から隠すデモです:

Hide
Type "cleanup-previous-state 2>/dev/null"
Enter
Sleep 2s
Type "clear"
Enter
Sleep 500ms
Show

Type "the-command-users-see"
Enter
Sleep 3s

Hide → コマンド → clear → Show の順序が重要です。clear はターミナルバッファーを消去し、非表示のコマンドが GIF に残るのを防ぎます。

出力ノイズのフィルタリング

冗長な出力を生成するコマンドから、不要な進捗行をフィルタリングします:

# Hidden: create a wrapper function that filters noise
Hide
Type "echo <base64-encoded-wrapper> | base64 -d > /tmp/w.sh && source /tmp/w.sh"
Enter
Sleep 500ms
Type "clear"
Enter
Sleep 500ms
Show

# Visible: clean command, filtered output
Type "my-noisy-command"
Enter
Sleep 3s
フレームの検証

録画後、主要なフレームを抽出して GIF の内容を検証します:

# Extract frames at specific positions
ffmpeg -i demo.gif -vf "select=eq(n\,100)" -frames:v 1 /tmp/frame.png -y 2>/dev/null

# View the frame (Claude can read images)
# Use Read tool on /tmp/frame.png to verify content
録画後の高速化

再録画せずに、gifsicle を使って録画を高速化します:

# 2x speed (halve frame delay)
gifsicle -d2 original.gif "#0-" > fast.gif

# 1.5x speed
gifsicle -d4 original.gif "#0-" > faster.gif
テンプレートのプレースホルダーパターン

プレースホルダーを使ってテープファイルを汎用化し、ビルド時に置換します:

# In tape file
Type "claude plugin marketplace add MARKETPLACE_REPO"

# In build script
sed "s|MARKETPLACE_REPO|$DETECTED_REPO|g" template.tape > rendered.tape
vhs rendered.tape

タイミングとサイズの参考値

用途幅高さフォント再生時間
README/ドキュメント140060016-2010-20 秒
プレゼンテーション18009002415-30 秒
コンパクトな埋め込み120060014-1610-15 秒
幅広の出力16008001615-30 秒

詳しいガイドラインは references/best_practices.md を参照してください。

トラブルシューティング

問題解決策
VHS がインストールされていないbrew install charmbracelet/tap/vhs
gifsicle がインストールされていないbrew install gifsicle
GIF のサイズが大きすぎる寸法やスリープ時間を小さくするか、--speed 2 を使用します
テキストが折り返される/途切れる--width を大きくするか、--font-size を小さくします
$ または \" で VHS の解析エラーが発生するbase64 エンコードを使用します(上記の「重要」セクションを参照)
非表示のコマンドが GIF に残るShow の前に clear と Sleep 500ms を追加します
前のコマンドが完了する前に次のコマンドが実行されるSleep の時間を長くします

テープファイルの構文

references/vhs_syntax.md は VHS テープファイルの完全なリファレンスです。すべてのコマンド、設定、キー名と、それぞれが受け付ける引数の形式を記載しています。手動でテープを作成するとき、テープの解析には成功するものの動作が予想と異なるとき、またはこの SKILL.md に例のないコマンドが必要なときに参照してください。

Dependencies

Required: VHS (brew install charmbracelet/tap/vhs)

Optional: gifsicle (speed-up), asciinema (interactive recording), ffmpeg (frame verification), PyYAML (batch YAML configs)

コメント