browser-video-recording について
Codex のスキルで、アプリ内ブラウザーのスクリーンショットからデモ動画を作成します。ブラウザー状態の取得と、カーソルやカメラ移動を加えるレンダラーを組み合わせ、書き出し後の確認手順も備えています。
主な機能
- 01Codex のアプリ内ブラウザーで状態を取得
- 02カーソルとズーム追従付きで MP4 にレンダリング
- 03シーン、カーソル、カメラ、クリック時刻を設定
- 04動画の仕様とカーソル位置を確認
活用シーン
- 01ブラウザー操作から製品デモを作成
- 02意図的なカーソル移動を含む UI 紹介動画を制作
- 03解像度、フレームレート、尺、カーソル精度を確認
MCP 対応
新しい Codex アプリ内ブラウザーのスクリーンショット取得に Browser skill/MCP を使用します。ネイティブ録画 MCP はアプリ録画時のみ任意で使い、同梱レンダラーは MCP を必要としません。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ akillness/ jeo-skills --skill browser-video-recordingインストール後、Claude Code で/browser-video-recordingを入力して読み込まれたか確認します。
同梱ファイルSKILL.toonscripts/render_browser_demo.py
詳細
ブラウザー動画の録画
このスキルを使うタイミング
- ユーザーから、クリック、スクロール、ページ遷移などのブラウザー操作を録画または再録画し、洗練されたデモ動画にするよう依頼された場合に使います。
- 自然な macOS カーソル、意図的なクリックの演出、落ち着いたズーム追従のフレーミングが必要な Dribbble/UI インスピレーション動画や製品デモの録画を作成する場合に使います。
- Codex、Playwright、MCP で自然なブラウザーデモ動画を作成できるか尋ねられた場合に使います。このスキルでは、3 層の依存関係モデル(Codex アプリ内ブラウザーのキャプチャ、ローカルの ffmpeg/Pillow レンダラー、任意のネイティブレコーダー)を定義しています。
scripts/render_browser_demo.pyを使って、Codex アプリ内ブラウザーのスクリーンショットから、決定論的な 60 fps、4:3、4K の MP4 出力をレンダリングする場合に使います。- ffprobe と動画中盤のサムネイル確認を使って、納品する動画の解像度、フレームレート、長さ、カーソルの正確さを検証する場合に使います。
- Codex アプリ内ブラウザーとは関係のない一般的なデスクトップ画面の録画や、カーソル/ズームを使ったデモのレンダリングを超える動画編集には使いません。その場合は別の録画ツールまたは編集ツールが必要です。
依存関係モデル
ワークフローを次の 3 層に分けます。
- ブラウザーの操作とソースフレーム:Browser スキル/MCP を通じて Codex アプリ内ブラウザーを使います。ユーザーが Codex ブラウザーを指定している場合、またはプロジェクトで使用しないよう指示されている場合は、Chrome を使わないでください。ブラウザー層では、実際のスクリーンショットと、実際のクリック/スクロール/ページ遷移の状態を取得します。
- ローカル動画レンダラー:付属の Python スクリプトを使って、自然な macOS カーソル、控えめなクリック時のスケール効果、落ち着いたズーム追従のフレーミングを加えた MP4 にスクリーンショットをレンダリングします。これに画面録画 MCP は必要ありません。
- 任意のネイティブレコーダー連携:ネイティブ録画 MCP は、実際のアプリ録画の開始/停止や、生成されたプロジェクトを開く場合に、呼び出し可能で明確な利点があるときにのみ使います。利用できない、ブロックされている、または Codex ブラウザーの画面をキャプチャできない場合は、スクリーンショットから動画へのレンダラーに切り替え、その理由を説明します。
自己完結型の実行
スキルフォルダー全体(scripts/render_browser_demo.py を含む)がインストールされていれば、別の Codex インスタンスでもこのスキルだけで Python レンダリングを実行できます。Codex はレンダラーを作り直すのではなく、付属のスクリプトを実行してください。
必要なローカルツール:
python3- Python パッケージ
Pillow ffmpegとffprobe
任意の macOS カーソル抽出には swift と /usr/sbin/screencapture を使います。これらを利用できない場合は、cursor_asset で透過 PNG を指定し、設定で cursor_hotspot を設定してください。
新しい Codex アプリ内ブラウザーのスクリーンショットを取得するには、引き続き Browser スキル/MCP が必要です。利用できない場合は、利用可能な最適なブラウザー自動化のスクリーンショット取得元を使い、代替手段を明記してください。
任意のネイティブレコーダーのサポート
ネイティブアプリの録画では、MCP が次の設定に対応していることを確認してください。
frameRate: 60を使います。resolutionRawValue: "4K"を使います。- 範囲を指定して録画する場合は、
ratioPresetRawValue: "4:3"を使います。 - 埋め込みブラウザーのビューポートを切り抜く場合は、
selectedRegionOnScreenを明示的に指定します。
ローカルレンダラーでは、4K 4:3 は 3840x2880 です。ネイティブレコーダーで 4K 列挙値が提供されている場合は、アプリ側の解像度プリセットとして扱い、その MCP で録画するときは 4:3 の範囲選択と組み合わせてください。
キャプチャのワークフロー
まず browser:control-in-app-browser を使用します。ドキュメントを読み込んだ後、Node/browser API でアプリ内ブラウザーを操作します。
- 4:3 4K 出力用にビューポートを
1920x1440に設定し、終了前に元に戻します。 - 指定されたページに移動し、実際にクリック、戻る操作、検索、スクロールを行います。
- 重要な状態が変化するたびに、ブラウザーのみのスクリーンショットを保存します。
01-results-top.png、02-after-card-click.png、03-back-results.pngのような名前を付けます。 - 各クリック/スクロール対象のビューポート座標を記録します。最終的なカーソルの軌跡では、これらの位置に移動して一時停止し、クリックしてから、次の意味のある位置へ移動します。
ユーザーがシステム UI を明示的に必要としている場合を除き、デスクトップの座標による自動操作は避けてください。Codex のブラウザー表示ではキャプチャ可能な macOS 画面を取得できない場合があります。確実なソースはブラウザー API のスクリーンショットです。
モーションのルール
カーソルが意図的に動いているように見せます。
- カーソルの動きは控えめにし、ほとんどを直線にします。
- クリックする前に、対象の上で少し一時停止します。
- 関係のない UI 上をうろつかないでください。
- クリック後にページ遷移が起きるようにし、クリック前に遷移させないでください。
- クリックのフィードバックは控えめにし、装飾的なリングはリクエストがない限り使わず、縮小して戻る動きだけにします。
- ズームの追従はカーソルよりも落ち着かせます。カメラは細かなマウスの動きを追いかけず、クリックされたコンテンツを画面に収めます。
デフォルトの視覚的な目標:
- コンポジターから抽出した実際の macOS ポインター、または既存の透明なカーソルアセットを使用します。
- 編集済みのデモ録画でよく使われる大きなカーソルのスタイルに合わせ、カーソルのスケールを
3.0にします。 - 控えめなクリック時の縮小として、クリックアニメーションの強度を
15にします。 - 回転の強度は最大
8degとし、水平方向の速度に応じてのみ適用します。
レンダリングスクリプト
決定論的な 60 fps、4:3 4K 出力には scripts/render_browser_demo.py を使用します。
python3 /path/to/browser-video-recording/scripts/render_browser_demo.py \
--config /tmp/browser-demo-config.json \
--output /tmp/browser-demo-4x3-4k-60fps.mp4
初期設定を生成します。
python3 /path/to/browser-video-recording/scripts/render_browser_demo.py --write-template
設定には以下が含まれます。
shots:状態名とスクリーンショットの PNG パスのマップです。scene_starts:[time, shotName, transition]のエントリーです。cursor_keys:[time, x, y]のビューポート座標エントリーです。camera_keys:[time, x, y, zoom]のエントリーです。click_times:クリック時刻です。duration、fps、output_size、source_size、cursor_scaleです。
推奨されるデフォルト設定:
{
"fps": 60,
"output_size": [3840, 2880],
"source_size": [1920, 1440]
}
cursor_asset を省略すると、スクリプトは一時的に単色のオーバーレイを表示し、screencapture を使用して現在の macOS カーソルを透明な PNG として抽出します。これはローカルでのレンダリングをサポートする機能であり、MCP の依存関係ではありません。
検証
納品する動画は必ず検証します。
ffprobe -v error \
-show_entries stream=codec_name,width,height,r_frame_rate \
-show_entries format=duration,size \
-of json /path/to/output.mp4
動画の途中からサムネイルを少なくとも 1 枚抽出して確認します。
ffmpeg -y -ss 8 -i /path/to/output.mp4 -frames:v 1 -update 1 /tmp/browser-demo-thumb.png
以下を確認します。
- 解像度が指定された出力サイズであること。4:3 4K の場合は通常
3840x2880です。 - フレームレートが
60/1または同等であること。 - 尺がリクエストと一致していること。
- カーソルが表示され、自然に動き、対象に合っていること。
- 動画がデスクトップではなく、ブラウザーのコンテンツに合わせてクロップされていること。
- ブラウザーのビューポートの上書きがリセットされていること。
参考資料
- 上流のソース:MengTo/Skills — browser-video-recording
- scripts/render_browser_demo.py — 「レンダリングスクリプト」セクションで使用する、決定論的な 60 fps、4:3 4K レンダラー