Communitygithub.com

デモ動画作成スキル

ブラウザ操作を自動化し、フレームをキャプチャして製品デモ動画を作成します。ユーザーがWebアプリケーションのデモ、ウォークスルー、製品紹介、インタラクティブ動画を録画したい場合に使用します。Playwright CDPスクリーンキャストによる高品質キャプチャとFFmpegによる動画エンコードに対応しています。

デモ動画作成スキル とは?

このスキルは、ブラウザ操作を自動化し、製品デモ動画を効率的に作成するためのものです。ユーザーは、OpenClawブラウザを起動し、Playwrightスクリプトを使ってナビゲーション、クリック、ホバー、入力などの操作を録画し、JPEGフレームとして保存します。その後、FFmpegを使用して、MP4/GIF/WebMなどの形式にエンコードします。特に、デモの計画、録画、エンコードの3つの工程に分かれており、フレームスキップやタイミング調整により、品質とファイルサイズをバランスよく調整できます。注意点として、コンテキスト制限や並行エージェントの干渉リスクがあるため、フレームキャプチャと分析は別々のパスで行い、同一ブラウザタブで複数のデモエージェントを同時実行しないようにします。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/exiao/skills/tree/HEAD/video/demo-video

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

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

ドキュメント

デモ動画作成ツール

ブラウザ操作を自動化して、洗練された製品デモ動画を作成します。

概要

  1. 計画:デモシーケンス(ページ、操作、タイミング)を計画します
  2. 録画:Playwright CDPスクリーンキャストを使用してフレームを録画します
  3. エンコード:FFmpegで動画にエンコードします

クイックスタート

前提条件

  • OpenClawブラウザが実行中であること(browser action=start profile=clawd)
  • アプリにブラウザからアクセスできること(localhostまたはリモート)
  • エンコード用にFFmpegがインストールされていること

録画ワークフロー

  1. OpenClawブラウザが起動していなければ起動します
  2. 手動で、またはbrowser action=openを使ってアプリに移動します
  3. ターゲットアプリに合わせてscripts/record-demo.jsをカスタマイズします
  4. 実行:node scripts/record-demo.js
  5. エンコード:bash scripts/frames-to-video.sh

デモの計画

references/demo-planning.mdに、以下のガイダンスがあります:

  • デモシーケンスの構造化
  • タイミングとペース
  • 操作パターン
  • 効果的なデモの要素

スクリプト

scripts/record-demo.js

Playwrightテンプレートスクリプト。以下の機能があります:

  • CDP経由でOpenClawブラウザに接続
  • スクリーンキャストキャプチャを開始(JPEGフレーム)
  • デモシーケンスを実行(ナビゲーション、クリック、ホバー、タイピング)
  • フレームを出力ディレクトリに保存

各デモごとにカスタマイズする項目:

  • DEMO_SEQUENCES配列 - ページと操作を定義
  • OUTPUT_DIR - フレームの保存先
  • FRAME_SKIP - スキップするフレーム間隔(小さいほどフレーム数が多い)

scripts/frames-to-video.sh

プリセット付きFFmpegエンコードスクリプト:

  • mp4 - H.264、品質とサイズのバランスが良い(デフォルト)
  • gif - 埋め込み用アニメーションGIF
  • webm - VP9、より小さいファイルサイズ

使い方:./frames-to-video.sh [入力ディレクトリ] [出力名] [フォーマット]

操作パターン

// ナビゲーション
await page.goto('http://localhost/dashboard');
await page.waitForTimeout(2000);

// 要素のクリック
await page.locator('button:has-text("作成")').click();
await page.waitForTimeout(500);

// ホバー(ツールチップ、ホバー状態の表示)
await page.locator('.card').first().hover();
await page.waitForTimeout(1000);

// テキスト入力
await page.locator('input[placeholder="検索"]').fill('クエリ');
await page.waitForTimeout(500);

// キー押下
await page.keyboard.press('Enter');
await page.keyboard.press('Escape');

// スクロール
await page.evaluate(() => window.scrollBy(0, 300));

ヒント

  • タイミング:ページ読み込みに2秒、操作間に0.5~1秒、結果表示に1.5秒
  • フレームスキップ:スムーズな動画には3~5、ファイルを小さくするには8~10
  • 品質:JPEG品質85~90で、サイズと鮮明さのバランスが良い
  • 解像度:ブラウザウィンドウサイズが出力解像度を決定します
  • ループ:GIFはシームレスにループするよう、開始位置で終了する

注意点

  • スクリーンショットと動画の使い分け: ユーザーが機能を確認するだけであれば、フル動画を録画する代わりにインラインでスクリーンショットを取得してください。まずbrowser action=tabs profile=clawdで確認し、該当タブが開いていれば、サブエージェントを使わずに直接スクリーンショットを取得します。
  • コンテキスト制限: スクリーンショットを多用する録画ループは、コンテキストを急速に消費します(20万トークン制限)。範囲を絞り、すべてのフレームを先に録画してから分析するようにし、フレームキャプチャと分析をインターリーブしないでください。コンテキストが逼迫している場合は、フレームをディスクに書き込み、別パスで分析します。
  • 並行エージェントのリスク: 同じブラウザタブに対して複数のデモエージェントを同時に起動しないでください。互いのナビゲーション状態に干渉します。

Individual skills in this repo

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

関連スキル