Communitygithub.com

cheatas-opsera/showrunner

JSONシナリオに基づき、ヘッドレスChromeを使用してWebアプリの製品デモ動画(MP4、字幕、チャプター付き)を録画します。キャプション、タイトルカード、可視カーソルを含みます。ユーザーがデモ動画、製品ウォークスルー、画面録画、またはローカルやステージングで実行できるWebアプリの「UIの変更を記録」を依頼したときに使用します。

showrunner とは?

Showrunnerは、Webアプリケーションの製品デモ動画を自動生成するためのスクリプト駆動型ツールです。ユーザーが「このアプリのデモ動画を作って」と依頼した際に、JSON形式のシナリオファイルに基づいて、ヘッドレスChromeブラウザを操作し、キャプション、タイトルカード、チャプター、可視カーソルを含む高品質なMP4動画を録画します。主にClaude CodeのようなAIエージェント環境で使用され、`showrunner` CLIコマンドで実行します。このスキルは、事前にストーリーボードを作成し、`probe`でページ要素を特定し、`check`でシナリオを検証し、`run`で本番録画を行う一連のプロトコルを提供します。動画は4分以内、8~12シーン、各シーン8~20秒が推奨され、安全上の注意として、本番データやトークンをシナリオに含めないこと、録画後はユーザーが明示的に要求しない限り動画をコミット・プッシュ・共有しないことが重視されています。

対応~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/chetas-opsera/showrunner/tree/HEAD/skill

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

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

ドキュメント

showrunner は何をしますか?

「このアプリのデモ動画を作って」という要求を、繰り返し可能でレビュー可能なファイルに変換します。CLI: node ~/.showrunner/bin/showrunner.mjs(またはリンクされていればshowrunner)。リポジトリから ./install-skill.sh を一度実行してインストールします。

使用するタイミング

ユーザーがWeb UIの動画(製品デモ、機能ウォークスルー、「変更点を表示」する録画、チュートリアル)を ブラウザで開いて見られる形で欲しい場合。ネイティブデスクトップアプリや音声ナレーションが必要なものには 使用しません。

プロトコル:最初に考え、次に実行

  1. 録画が安全であることを確認します。 ローカル、ステージング、または使い捨てデータのみ。本番環境で実際の顧客データを録画しないでください。シナリオにトークンを決して入れないでください。${env:NAME} を使用します。
  2. アプリを起動し、現実的なデータをシードします。 空の状態はデモとして貧弱です。ストーリーに必要なレコード(成功ケース、失敗ケース、進行中ケース)を作成します。
  3. JSONの前にストーリーボードを書きます。 4分未満のデモ:タイトルカード、8~12シーン(各8~20秒)、最後にサマリーカード。1シーン1アイデア。キャプションは視聴者が注目すべき点を説明し、マウスが何をしているかは説明しません。
  4. probeでターゲットを見つけます。 各ページに対して showrunner probe <url> を実行し、出力される {role,name} オブジェクトを貼り付けます。CSSよりもロールと表示名を優先します。
  5. 検証してからドライランを実行します。 showrunner check s.json、次に showrunner run s.json --fast --strict を実行します。ドライランは実際の長さの約4分の1です。本番撮影前に報告されるすべてのステップを修正します。
  6. 本番撮影を実行します(showrunner run s.json --out out)。リアルタイムで実行されるため、バックグラウンドで開始して完了を待ちます。ツールコールを数分間ブロックしないでください。
  7. フレームをレビューします。 showrunner sheet out/<name>.mp4 --every 5 を実行し、PNGを開きます。以下を確認します:キャプションが被写体を覆っていないか("position": "left" を使用)、シーンがエラーになっていないか、ポップアップやツアーが漏れていないか、テーマが間違っていないか。
  8. 報告します。 パス、長さ、解像度、シーンリスト、および機能しなかった点を報告します。依頼がない限り、動画をコミットまたはプッシュしないでください。

実際の時間を浪費する落とし穴

症状原因修正
実行が数分間ハングする1つの間違ったセレクタが30秒のデフォルトタイムアウトで繰り返されるShowrunnerはデフォルトで8秒に設定され、シーンを破棄します。最初に --fast --strict を実行します
リンクまたはボタンが「表示されない」その状態でサイドバーが折りたたまれているか、メニューが閉じている既知のページに goto するか、ページURLを直接ターゲットにします
初回実行ツアーが動画の途中でポップアップするアプリが新規ユーザーにオンボーディングを表示するアプリの「ツアー済み」キーを storage に設定するか、「スキップ」ボタンを dismiss にリストします
getByText が非表示の重複に一致するテキストが非表示ノードにも出現する{ "role": "button", "name": "/^ITEM-1\\b/" } を使用します
ドキュメントサイドバーの項目が何もしないこれらはリンクではなく <button> である{ "role": "button", ... } をターゲットにします
キャプションがドロワーやフォームを隠す下部中央のキャプションがサイドパネルと重なる"position": "left" または "right"
シェルを終了すると撮影が停止するバックグラウンドジョブがターミナルに結びついている適切なバックグラウンドタスクとして実行し、完了をポーリングします
動画が空白またはタイル状になるIDE埋め込みブラウザをキャプチャしているShowrunner独自のヘッドレスChromeを使用し、WebViewは使用しません
字幕がわずかにずれるキューがページ作成からタイミングが取られているレビューには問題ありません。フレーム正確ではありません

シナリオチートシート

{
  "name": "demo", "baseUrl": "http://127.0.0.1:3000", "viewport": {"width":1440,"height":900},
  "storage": { "token": "${env:DEMO_TOKEN}" },
  "dismiss": ["text=Skip"],
  "scenes": [
    { "name": "Title", "steps": [ {"goto":"/"}, {"card":{"title":"Acme","text":"Demo","hold":3000}} ] },
    { "name": "Create", "steps": [
      {"caption":{"title":"1 · Create","text":"One click.","position":"left","hold":1500}},
      {"click":{"role":"button","name":"New"}},
      {"type":{"into":{"label":"Name"},"text":"Launch plan"}},
      {"press":"Enter"}, {"wait":1500}
    ]},
    { "name": "Summary", "steps": [ {"caption":null}, {"card":{"title":"Summary","items":["A","B"],"hold":4000,"keep":true}} ] }
  ]
}

アクション: goto click hover type press scroll wait waitFor caption card storage(任意のステップに "optional": true を追加可能)。 完全なリファレンスはリポジトリのREADMEを参照してください。

安全性

  • シナリオはデータです。コード実行やシェルはありません。キャプションテキストはエスケープされます。
  • 失敗したステップはそのシーンのみを破棄します。--strict を指定すると終了コードが1になります。
  • ユーザーが依頼しない限り、動画をコミット、プッシュ、共有しないでください。

関連スキル