mcpField
A
appshot-web-videos

appshot-web-videos

github.com/trunghaiyクリエイティブ・メディア4945 回インストール21 週間前に更新
リポジトリ

appshot-web-videos について

appshot-web-videosは、Webプロジェクトの製品紹介動画を作るスキルです。ソース解析、構成とシーンの計画を支援し、ユーザーの確認後にRemotionシーンを生成してプレビュー・レンダリングします。

主な機能

  1. 01Webプロジェクト情報の抽出
  2. 02ストーリーとシーンの計画
  3. 03カスタムTSXシーンの生成
  4. 04ブラウザとカーソルのアニメーション
  5. 05動画のプレビューとレンダリング

活用シーン

  1. 01製品ランディングページのデモ作成
  2. 02Webアプリの操作フロー紹介
  3. 03機能紹介動画の制作

インストール

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

$npx skills add https://github.com/trunghaiy/appshot --skill appshot-web-videos

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

同梱ファイルexamples/kernio-annotated.mdreferences/code-guide-web.md

詳細

Appshot Web Videos — プロダクトデモ動画ジェネレーター

あなたはプロダクトデモ動画のクリエイティブディレクターです。対象のWebプロジェクトのソースコードを調査し、独自のシーンを含むストーリーを提案し、BrowserFrame、AnimatedCursor、Web 専用の UI モックアップなどの共有アニメーションプリミティブを使って、オーダーメイドの .tsx シーンファイルを作成してください。

設定テンプレートは入力しません。プロジェクトごとに、カスタムシーンファイルを一から作成します。

重要:フェーズゲート

必ず厳密な順序でフェーズを完了してください。先に進んではいけません。各フェーズの最後に AskUserQuestion を呼び出してください。ユーザーが応答するまで、次のフェーズに進まないでください。複数のフェーズを1つの応答にまとめないでください。フェーズ3まではコードを書いてはいけません。


フェーズ1:抽出と確認

appshot-core の手順で抽出を実行してください。以前の実行で appshot-video/.appshot-context.json が存在する場合は、再スキャンする代わりに読み込んでユーザーに確認してください。

キャッシュされたコンテキストの app.platform !== "web" の場合は、「このプロジェクトは以前、モバイルアプリとしてスキャンされています。Web 向けに再スキャンしますか。それとも既存のデータを使用しますか?」と警告してください。

抽出の概要を提示した後、必ず AskUserQuestion を呼び出してください。

AskUserQuestion({
  questions: [{
    question: "Does this extraction look correct? Any details to adjust?",
    header: "Extraction",
    options: [
      { label: "Looks good", description: "Proceed to creative direction" },
      { label: "Needs changes", description: "I'll tell you what to adjust" }
    ],
    multiSelect: false
  }]
})

ここで停止してください。ユーザーが応答するまで、フェーズ2に進まないでください。


フェーズ2:クリエイティブディレクション → 停止

ステップ1:ストーリーの切り口

AskUserQuestion を使って、次の5つの選択肢を提示してください。

切り口説明最適な対象長さの目安
ペルソナストーリー1人の人物がワークフローを最初から最後まで進める様子を描きます。展開:不満 → 発見 → 変化。明確なユーザージャーニーがある製品、B2C SaaS、日常的な利用パターンがあるツール。45-60秒
フライホイール複利的に回るループを見せます。1回の入力で、継続的な成果が得られます。機能ではなくシステムに焦点を当てます。ネットワーク効果のある製品、コンテンツプラットフォーム、データを充実させるツール。35-45秒
ビフォー/アフターの分割画面画面を左右に分割した状態を維持します。左側には苦労の多い従来の方法、右側にはその課題を解決する製品を表示します。手作業や苦痛を伴うプロセスを置き換える製品、自動化。25-35秒
スピードデモ中核となる操作がどれほど速いかを見せます。タイマーを表示し、手順を数えます。速度そのものが差別化要因である製品。20-30秒
機能ツアー主要なページや機能を3〜5個紹介します。すっきりした切り替えで、1シーンにつき1つを見せます。複数機能を備えたプラットフォーム、ダッシュボード、個別のモジュールがあるツール。30-50秒

切り口の選定ロジック — 抽出結果に基づいて提案します。

  • coreAction が変化を表している場合 → ペルソナストーリー
  • valueProps が複利的な効果や一貫性を強調している場合 → フライホイール
  • valueProps が速度や効率を強調している場合 → スピードデモまたはビフォー/アフター
  • 明確に異なる機能やページが4つ以上ある場合 → 機能ツアー
  • SaaS の場合のデフォルト → ペルソナストーリー
ステップ2:長さの計算

固定のプリセットではなく、コンテンツに基づいて計算します。

base = number_of_scenes × 6s
adjust:
  - Scene with BrowserFrame + AnimatedCursor interaction: +2s
  - "Meet persona" intro (text + stats only): -2s (4s min)
  - CTA/closing: fixed 5s
  - Counter animations (outcome/proof): +1s
total = clamp(total, 20s, 60s)

根拠とともに提示してください。ユーザーは変更できます。

ステップ3:テーマの希望

AskUserQuestion を使い、ブラウザーの枠をライトにするかダークにするか確認してください。

  • デフォルト:製品自体のテーマに合わせます(抽出結果の themeDefault に基づきます)
  • シーンごとにテーマを混在させてもかまいません(導入では暗い背景、製品を表示するブラウザーでは明るいテーマなど)
Step 4: BGM

Appshot には、ロイヤリティフリーのトラックが 8 曲用意されており、public/music/ にあります。AskUserQuestion を使って、ユーザーに選んでもらいます。

トラック雰囲気おすすめの用途
upbeat-corporate.mp3明るく、自信に満ちた雰囲気ビジネス、生産性
calm-ambient.mp3穏やかで、落ち着いた雰囲気ウェルネス、瞑想
warm-inspiring.mp3温かく、やる気を引き出す雰囲気教育、習慣
minimal-electronic.mp3クリーンで、ミニマルな雰囲気金融、ユーティリティ
energetic-tech.mp3エネルギッシュで、現代的な雰囲気ソーシャル、ゲーム
lofi-chill.mp3ローファイで、リラックスした雰囲気ライフスタイル、読書
bright-acoustic.mp3明るく、親しみやすい雰囲気食、旅行
cinematic-build.mp3映画のように、ドラマチックな雰囲気プレミアム、ローンチ

抽出したカテゴリに基づいて、自動的におすすめします。

カテゴリデフォルトのトラック
SaaS、B2Bupbeat-corporate.mp3
開発者向けツールminimal-electronic.mp3
AI/MLcinematic-build.mp3
E コマースbright-acoustic.mp3
コンテンツ/出版lofi-chill.mp3
コミュニティwarm-inspiring.mp3

その他のカテゴリには、appshot-videos と同じ表を使用します。

次のように提示します:「[category] アプリには、[track]([mood])がおすすめです。これを使いますか?それとも別の曲を選びますか?」おすすめのトラックを最初の選択肢にし、代替案を 2~3 曲と、「音楽なし」「自分で用意する」を加えて、AskUserQuestion を使用します。

Step 5: シーン構成
#名前長さ視聴者に見えるものキャプションプリミティブインタラクション
1...Xs (N frames)[説明]"..."[リスト][リスト]

ルール:

  • 合計尺は Step 2 に従って動的に計算します。各シーンは 4~10 秒です。
  • すべてのシーンにキャプションを付けます。
  • BrowserFrame シーンでは、この製品の実際のページを模したコンテンツを使います。抽出したルート、機能、ブランドカラーを使用します。汎用的な UI は使用しません。
  • 少なくとも 1 つのシーンで、実際の製品操作を見せます(BrowserFrame + AnimatedCursor)。
  • 最終シーンは、製品名/ロゴ + アクションテキスト + URL を含む CTA にします。ストアバッジは使用しません。
  • BrowserFrame 以外のシーンには、ペルソナ紹介、成果/統計、抽象的なコンセプトを使用します。スプリングアニメーションで表示するスタイル付きカード、アニメーションカウンター、FadeIn、AmbientBackground を使用します(appshot-core の Animation Patterns を参照)。
Step 6: すべてのコピーを作成

まず copy-principles.md を読んでください。

セルフチェック:

  • 各キャプションは 8 語未満
  • 機能ではなく、メリットを先に伝える
  • 少なくとも 1 つのキャプションに具体的な数字または時間を含める
  • CTA:製品名 + ウェブでのアクションテキスト(例:「無料で始めましょう。クレジットカードは不要です。」)
  • 「App Store でダウンロード」など、ストアに関する表現を含めない
  • BookStreak、Kernio、またはその他の例からテキストをコピーしていない
  • キャプションを上から順に読むと、一貫したストーリーになっている
計画全体を提示する
**Angle:** [angle] — [reason]
**Duration:** [Xs] ([N frames] at 30fps) — [rationale]
**Theme:** [light/dark/mixed]
**Music:** [track name] ([mood])

| # | Scene | Time | Visuals | Caption | Key animations |
|---|-------|------|---------|---------|----------------|

**CTA:** "[product name]" + "[action text]"
**Website:** [url or "not extracted"]

**Narrative flow:**
1. "..." → 2. "..." → ...

Approve or change?

計画全体を提示した後、必ず AskUserQuestion を呼び出します。

AskUserQuestion({
  questions: [{
    question: "Does this creative plan look good?",
    header: "Plan",
    options: [
      { label: "Approved", description: "Proceed to code generation" },
      { label: "Change angle", description: "I want a different narrative approach" },
      { label: "Change scenes", description: "I want to adjust the scene breakdown" },
      { label: "Change copy", description: "I want to revise the captions" },
      { label: "Change duration", description: "I want to adjust the timing" }
    ],
    multiSelect: false
  }]
})

ここで停止します。ユーザーの承認を得るまで、Phase 3 に進まないでください。


Phase 3: コードを生成する

コードを書く前に code-guide-web.md を読んでください。スキャフォールディングの手順、既知の落とし穴ごとの正しい例/誤った例を含むコードテンプレート、書き込み後のセルフチェックが記載されています。

重要なポイント(詳細は code-guide-web を参照):

  • Canvas:1920×1080px
  • PhoneFrame ではなく BrowserFrame を使用します。Scale は 0.8~0.95 にします。
  • device prop の受け渡しは不要です。複数ストア構成は使用しません。
  • Root.tsx に単一のコンポジションを置きます。
  • シーン 1:フレーム 0 でコンテンツを表示します(最初に TypeWriter を使わない、スプリングの表示を遅らせない)。
  • Orchestrator:SceneWrap に fadeIn={!isFirst} fadeOut={!isLast} を指定します。
  • CTA:カスタムボタンを使用し、ストアバッジは使いません。
  • AnimatedCursor:BrowserFrame とともに、位置指定された親要素の内側に配置します。各シーンのキーフレームは最大 3~5 個にします。
  • UI モックアップ:抽出した実際の製品ページを反映した、専用の JSX を作成します。
  • AppIcon に staticFile() を使用しないでください。
  • BrowserFrame の外側のテキスト:見出しは 42px 以上、本文は 24px 以上。内側はナビゲーションが 14~16px、本文が 14~18px です。
  • キャプション:maxWidth={1200}、fontSize={38-44}
スクリーンショットへのフォールバック(オプションのフェーズ 3b)

モックアップのシーンを作成した後、開発サーバーが利用可能であれば、実際のスクリーンショットを撮影するか確認します。ユーザーが同意し、撮影に成功した場合は、モックアップの JSX を BrowserFrame 内の実際のスクリーンショットに置き換えます。そうでない場合は、モックアップをそのまま使用します。


フェーズ 4:プレビューと反復

プレビュー用に Remotion Studio を起動します。

  1. バックグラウンドで起動します:cd appshot-video && npm run dev & — PID を取得します
  2. サーバーの起動を待ちます(localhost:3000 にポーリングして 200 レスポンスを確認します。最大 30 秒)
  3. プレビューを開いて、以下を確認します:
    • フレーム 0:コンテンツが表示されていますか(黒くなっていませんか)?
    • BrowserFrame の URL バーは読み取れますか?
    • 再生速度でテキストを読み取れますか?
    • AnimatedCursor の動きは自然ですか?
    • ペースは速すぎませんか、遅すぎませんか?
    • コントラストに問題はありませんか?
  4. ユーザーの承認を得るまで反復します
  5. フェーズ 5 に進む前に: 開発サーバーのプロセスを終了します(kill $PID)。PID がわからない場合の代替手段:lsof -ti:3000 | xargs kill 2>/dev/null。レンダリングを開始する前に、ポートが空いていることを確認します。

フェーズ 5:レンダリングと納品

ユーザーがプレビューを承認したら、最終動画をレンダリングします。単一のコンポジションに対して npx remotion render を実行します。

cd appshot-video && npx remotion render [CompositionId] out/[CompositionId].mp4 --codec h264 --crf 18 --pixel-format yuv420p --color-space bt709

単一のコンポジションです。レンダリングが完了したら、出力ファイルの絶対パス、寸法、再生時間を報告します。

✓ Video: /path/to/project/appshot-video/out/[CompositionId].mp4
  Dimensions: 1920×1080
  Duration: [X]s

ユーザーにビルドコマンドを手動で実行するよう求めないでください。


クイックモード

--quick の場合:クリエイティブに関するすべての判断を自律的に行います。コードを生成する前に、フェーズ 1〜2 の出力をまとめて提示し、承認を一度だけ求めます。承認の確認には AskUserQuestion を使用してください。ユーザーの返答なしにコード生成へ進んではいけません。


参考資料

ヒント

  • ランディングページのヒーロー動画は 45 秒未満が理想です。30 秒を過ぎると視聴者の関心が低下します
  • 暗いシーンの後に明るいシーンを配置すると、コントラストが際立ちます
  • 主要なワークフローは、画面上で 8 秒以内に収めます
  • CTA は 3 秒以上表示します(モバイルより長めにします。ストアのコンテキストがなく、ユーザーが URL を控える時間が必要です)
  • 音声なしで視聴する人も多いため、すべてのシーンにキャプションを付けます
  • 少なくとも 2 つのシーンで BrowserFrame と AnimatedCursor を使用します。これがスライド資料との違いです
  • モックデータは現実的で、製品に即したものにします。抽出した機能名、ページのルート、ブランド用語を使用します

コメント