Communitygithub.com

pedro-cmyks/explainer-video-skill

ユーザーがアニメーション製品説明ビデオ、ローンチ動画、デモリール、またはこのハウススタイル(暗いネイビーのステージ、スタイライズされたUIカード、グライドしてクリックするカートゥーンカーソル、下部のキャプション)のソーシャルビデオを求めている場合に使用します。単一のHTMLファイルからMP4にレンダリングし、オプションで合成された音楽ベッドを追加します。また、この方法で作成された既存のビデオを編集または再レンダリングする場合にも使用します。

explainer-video-skill とは?

このスキルは、特定のハウススタイルに従ったアニメーションビデオ(製品説明、ローンチ、デモリール、ソーシャルビデオなど)を生成するためのものです。ユーザーは単一の自己完結型HTMLファイルを作成し、それをMP4にレンダリングします。ビデオは、暗いネイビーのステージ、スタイライズされたUIカード、グライドしてクリックするカーソル、下部にキャプションが表示されるという統一されたルック&フィールを持ちます。このスキルは、テンプレート、テーマ(house、studio、ember、tide)、レンダリングスクリプト、そして音楽ベッドを合成するスクリプトを提供し、開発者はそれらを使用してワークフローを効率化できます。Claude Code、Cursor、CodexなどのAIエージェントと連携して、ユーザーの要求に応じてビデオを構築し、編集し、再レンダリングするように設計されています。このスキルは、プロのビデオ制作ワークフローをコードベースのアプローチで再現し、一貫した品質と効率的な反復を可能にします。

対応✓Claude Code~Codex CLI✓Cursor
npx skills add pedro-cmyks/explainer-video-skill

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

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

ドキュメント

説明ビデオ、ハウススタイル

すべてのビデオは同じルックとモーション言語を共有しており、最初はCRM説明ビデオ用に構築されました。 ゴールドリファレンスは reference/desk-crm-explainer.html(84.5秒、9シーン、架空の製品Desk CRM)と そのフレームグリッド reference/contact.png です。不明な点がある場合は、リファレンスを開いてパターンをコピーしてください。

このスキルのファイル:

パス説明
templates/explainer-template.htmlここから始めてください。完全なヘルパーキットと3つのサンプルシーン(タイトル、カーソルクリック付きカード、アウトロ)が含まれています。
templates/apply-theme.mjsthemes/ からビデオのHTMLにテーマを適用します(--theme studio --html explainer.html、--list)。その場で実行します。
themes/*.jsonテーマごとのルック&サウンド(house、studio、ember、tide):色、グラデーション、フォント、カードの半径、ロゴマーク、音楽のキー、進行、テンポ、アルペジオ。house がデフォルトです。
templates/render.mjsPlaywrightのフレームステッパーをffmpegにパイプします。ビデオ、ポスター、コンタクトシート、スチルを生成します。その場で実行し、コピーしないでください。
templates/compose.pyシーンのローカル時間に同期されたNumpy音楽ベッドとSFXをマスタリングしてミックスします。ビデオごとにコピーします。
templates/voiceover.shオプションのmacOS say ボイスオーバーで、音楽の下にダッキングされます。引数を使用してその場で実行します。
checklist.md批評チェックリスト。納品前にすべての項目に合格する必要があります。
reference/リファレンスHTMLとそのコンタクトシート。編集しないでください。
examples/tidy-tasks/テンプレートから構築された短い完成ビデオ(20秒):HTML、その compose.py、コンタクトシートが含まれています。

セットアップ(マシンごとに1回):スキルフォルダ(package.json があります)で npm install と npx playwright install chromium を実行し、さらにffmpegとPython 3(numpy付き)をインストールします。render.mjs は起動できない場合に不足しているものを説明します。

ルック

1つのモーション言語、複数のルック。以下はすべてデフォルトテーマ house を説明しています。テーマはパレットトークン、グラデーション、フォント、カードの半径、ロゴマーク、音楽を変更しますが、モーション、カーソル、キャプション、チェックリストは変更しません。同じテーマとシーンは、フレームごとに同じビデオを生成します。テーマは themes/*.json(house、studio、ember、tide)にあります。node $SK/apply-theme.mjs --list でそれらを表示し、--theme <name> --html explainer.html でHTMLの先頭にある THEME ブロックにテーマを適用します。compose.py は同じブロックから音楽設定を読み取ります。ブリーフはテーマを指定します。指定がない場合は house を使用します。新しいテーマの場合は、jsonをコピーし、トークンを変更し、gr、am、rd がそれぞれ緑、琥珀、赤として認識可能であることを確認し、レンダリングするマシンに存在するフォントを選択し、使用する前にコンタクトシートでコントラストを確認してください。 シーンごとのテーマ(オプション):THEMES にさらにテーマオブジェクトを貼り付け、シーンに theme: 'studio' を指定します。パレット、グラデーション、カードの半径は1秒のクロスフェードでモーフィングし、フォントとロゴマークは境界で切り替わります。音楽は最初のテーマのままです。ビデオ自体がバラエティに関する場合に使用します。通常は1つのテーマが標準です。

ステージ:1920x1080 SVG、フォント 'Avenir Next', 'Helvetica Neue', Helvetica, Arial, sans-serif(テーマ font)。

背景は3つのレイヤーで、テーマ内で変更されることはありません:

  • 50% / 30% を中心とした放射状グラデーション、r 75%: #172638 -> #111b26 (60%) -> #0f1720
  • ドットグリッド:40 pxパターン、r 1.6ドット #22303f、70%不透明度
  • キャプションバンド:下部200 px(y 880..1080)が #0b121a に90%でフェード

パレットトークン(テンプレートでは C、名前は保持):

トークン16進数用途
bg#0f1720ページ、フェードトゥブラックターゲット
s1#141d27カード表面
s2#1b2733行、インセット、内部パネル
bd#2a3a4b境界線、グリッド線、空のドット
tx#e6edf3主要テキスト
mu#a0b1c5二次テキスト、列ヘッダー
bl#3b82f6アクション、選択、パケット、カーソルバースト、ブランドアクセントワード
gr#2fca73完了、ライブ、ゲイン、成功
am#f59e0b注意、ホット、外れ値
rd#ef4444損失またはエラーのみ
off#3a4a5c非アクティブステータスドット
paper / ink#f3f6fa / #1b2733ライトなドキュメントページ
light blue#93c5fd、core #dbeafe投げ縄、ハイライト、パケットコア
click spark#ffd166クリックバーストの代替スポーク

グラデーション:logoG は青 #3b82f6 から緑 #2fca73(斜め)でロゴタイルと下線バー用。hotG は琥珀から赤で「ホット」バー用。blueBar は #2563eb から #3b82f6。areaG は緑 38% から 0 でチャートの下用。

形状:

  • カード:半径26、塗りつぶし s1、2 px bd ストローク、影 dy 16, blur 20, black 42%(card())。
  • 行:半径14..18、塗りつぶし s2、高さ52..80、ピッチ64..96 px。
  • チップ:完全なピル型、高さ40、色を16%の塗りつぶし、ラベル24 px/600 でその色で表示(chip())。
  • プライマリボタン:半径22、高さ84、ベタ塗り bl、白34 px/700 ラベル、クリックされるまでソフトグローパルス。
  • アイコンとピル用の小さな影:dy 8, blur 8, black 45%(#shs)。
  • アプリウィンドウ(リファレンス dashboard()):上部バー66 px(s2、交通信号ドット r 8(rd、am、gr、80%))、サイドバー214 px(#111922 内)、ナビゲーション項目は高さ48、半径14、アクティブ項目は bl 20%、KPIタイルは半径18。
  • ステータスドット r 14。アバターリング4 px プラス25%のハロー。lock() からの南京錠。
  • ブランドバグ:ロゴ46 px プラス名前28/700 を (56, 40) に、85%不透明度で、シーン2からアウトロまで表示。

タイプスケール(px/ウェイト):ワードマーク132/700(アウトロは96)、タグライン58/500 mu、クロージングライン56/600、キャプション50/600、大きな数字52..64/700 表形式、カードタイトル34..40/700、行テキスト26..28/600、ラベルとチップ24/600、22未満はなし。ワードマークの文字間隔は -1%。

構図ルール:

  • コンテンツは y 120..860、x 140..1780 に収める。キャプションバンドとブランドバグのコーナーは空けておく。これには静止カーソルも含まれます。その先端を y <= 800 に保つ(矢印は先端から約75 px下に達します)。
  • テキストにサイズ設定されたもの(取り消し線、下線、ハイライトボックス、ピル)は textW(str, size, weight) から幅を取得し、決して推測された定数を使用しない。
  • フレームの3分の2以上を空のままにしないこと。コンテンツが左右に分割されている場合は、フローライン、パケット、またはページのファンで中央を接続する。シーングループ全体(G(s, {x: SX}))を移動して中央に再配置する。
  • 1シーン1アイデア。最大で2枚のカードを並べ、さらに1枚の詳細カードを配置可能。
  • データは常に架空のもの:Client A、Northwind、Maple Ridge、Bluebird、Harbor Point、ACC 01。

モーション言語

イージングキット(テンプレート内):E は3次インアウト(デフォルト)、EO は3次アウト(落ち着き)、EB はバックアウトで約10%のオーバーシュート(ポップ:カード、チップ、バッジ、アイコン)、esine は描画パス用、fadeIO(t, a, b, 0.35) はカーソル不透明度用、5次アウトイージング 1 - (1 - x)^5 はカウンター用。決定性:rng(seed) のみを使用し、Math.random や壁時計は使用しない。

エントランス:

  • カード:0.5秒でフェードイン、20 px上昇(0.6秒)、または mix(0.92, 1, EB) でスケール(0.7秒)。
  • リスト行:0.08..0.12秒のスタガー、x -20/-30 または y +16 からスライドイン、各0.5秒。
  • ポップ:EB で0.5..0.7秒。バッジは 0.7 -> 1 にスケール。
  • ワードマーク:中央からクリップワイプで開く(0.8秒、34 pxの上昇)。ロゴマークは pathLength で描画。

カーソルキット(drawCursor、curPos):

  • 白い矢印パス ARROW、#0b1118 3.4 px アウトライン、ドロップシャドウ dx 4 dy 7 blur 4(50%)、ベーススケール 1.1。
  • keys: [[t, x, y], ...] をローカル秒で指定。(x, y) は矢印の先端。グライドは3次インアウトと、距離の12%(最大110 px)のサイドアークを使用。傾きは水平速度に従う(pxあたり0.35度、最大14度)。
  • 典型的なグライドは0.7..1.5秒。シーン開始から約1.5秒後にフレーム外(1880, 1080)から進入。
  • クリックの少なくとも0.15秒前に到着し、コントロールの中心に正確に静止する。
  • クリック:xを+16%、yを-22%にスカッシュし、クリックでピーク(0.34秒のウィンドウ、0.1秒早く開始)、その後0.6秒のバースト:青いリング r 8 -> 54、太さ6 -> 1 px、さらに8本のスポークが白 / #ffd166 を交互に表示。
  • クリックされたコントロールは press() でスケール0.93にディップし、グローパルスが停止する。
  • アクション後、静かな休息スポット(カードの間、例:(1010, 800))にグライドして保持。シーンとともにフェードアウト。
  • trail は描画中に12ドットの青いコメットを追加。pos はカスタムパス(投げ縄)用にキーを置き換える。

シグネチャームーブ(コピーするリファレンスシーン):

  • 投げ縄:カーソルが esine でゆらぐ楕円を描き、点線の #93c5fd 5 px(16 12、流れる)、閉じるときはベタ塗りで0.35秒のグローフラッシュと7%の塗りつぶし、その後アイコンが曲線パスに沿ってゴーストフレームに飛び込み、それがアプリウィンドウに固まる(sBefore)。
  • パケット:発光ドット(r 22 グロー プラス r 12 #dbeafe コア)と6ドットのコメットテールがS字曲線上を移動、3次インアウトで1.2..1.45秒、点線のガイドラインが24 px/sで流れ、送信者が青くフラッシュし、到着時に緑のリング(packet()、sClose)。
  • ステータスドット:グレーから緑にリングバースト(r 14 -> 40、0.6秒)と1.25倍のポップ、その後 0.25 + 0.2 sin(3t) で呼吸するグロー。警告:琥珀、1.3秒ごとに繰り返しリング、短いシェイク(statusDot()、sStatus)。
  • チャート描画:pathFrom がラインを1.5..3.7秒で表示、6..7 pxの緑、areaG の塗りつぶし、発光ヘッドドット(r 18 グロー プラス r 10 白)。バーは0から0.18秒のスタガーで成長。ヒートマップセルはスタガーでポップ(sAlgos、sHistory)。
  • カウンター:5次アウトイージングで1.0秒かけてカウントアップ、表形式の数字。
  • ページファン:ページがボタンを離れ、中央を通ってファン状に広がり(回転 -10、-3.5、3.5、10度、60 pxのホップ)、その後各ページが110 pxホップしてトレイにスケール0.56で収まり、0.55秒のスタガー。トレイは満杯になると緑に光る(sReports)。
  • 組織ファン:クリックされたアバターからチーム列にラインが描画され、南京錠が閉じ、点線のアウトラインがデスクをグループ化する(sBook)。
  • チェックリスト(テンプレートキット):checkbox() はクリック時にディップし、緑にポップしてチェックマークを描画する丸いチェックボックス。strike(x, y, textW(...) + 8, u) はラベルに取り消し線を引く。各チェックは packet() を progressRing() に送信し、到着ごとに1ステップずつイージングし、閉じると光る。リストシーンはcheckbox + strike + packet + ring(examples/tidy-tasks/ を参照)。

トランジション:シーンは連続して配置されます。各シーンは最後の0.5秒でフェードアウトし、次のシーンは最初の0.5秒でフェードインし、0.985 -> 1 のスケールセトル(背景を通るディップ)が適用されます。最初のシーンはベタ塗りで開始し、アウトロは独自の0.6秒のフェードで bg に終わります。トランジションフレームは意図的にほぼ空白です。「修正」しないでください。

ホールドとアイドルモーション:すべてのフレームで何かが動いています。流れるダッシュオフセット、呼吸するグロー(sin(3t))、bob() による3..5 pxのフロート、スロースピナー(60度/秒)、ドリフトアイコン(18/14 px)を使用します。シーンの最後のビートの後、キャプションが読み終わるように少なくとも1.5秒のホールドを維持します。

コピールール

  • 英語のキャプション、文の大文字小文字、ピリオドで終わる。1行または2行で、各行最大約48文字。
  • 画面に表示される時間(キャプションは0.45..1.05秒でフェードイン、dur - 0.75 でフェードアウト)は、4語あたり少なくとも1秒、かつ2.5秒未満であってはなりません。実際には、シーンは約5秒より短くなることはありません。
  • キャプションや画面上で、句読点としてダッシュ(emダッシュ、enダッシュ、スペース入りハイフン)を使用しないでください。コンマとピリオドを使用してください。
  • 真実の主張のみ。画面上の数字(クライアント、アカウント、間隔)はユーザーまたは製品からのものであり、決して発明されたものではありません。テンプレートの数字はPLACEHOLDERとマークされています。真実の数字(ティーザー、架空の製品)がない場合は、アウトロの STATS をプレーンワード、['Simple lists', 'Daily focus', 'Clear progress'] にします。ピルがカウントの代わりにポップします。
  • 実際のクライアントデータなし:実際の名前、アカウント番号、残高、メール、クライアントのロゴは使用しないでください。架空のセットを使用してください。
  • タイトルとアウトロにはキャプションはありません。タグラインとクロージングラインがその役割を果たします。

アーキテクチャ

  • 1つの自己完結型HTMLファイル。ネットワーク不要、ライブラリ不要。SVGステージと1つのIIFEスクリプト。
  • render(t) は純粋関数です。t のみから #frame のinnerHTMLを再構築します。window.renderAt(t) として公開され、window.TOTAL_DURATION と window.SCENES_INFO も公開されます。URLに #manual がない場合は、リアルタイムでループします。
  • SCENES = [{ id, start, dur, fn, cap }]、連続して配置されます。各エントリをこのキー順序で1行に保ち、const TOTAL = <number>; をリテラルとして保持します。compose.py は両方を正規表現で解析します。
  • シーンは fn(lt, dur) -> { svg, cursor? } で、ローカル時間 lt を受け取ります。シーン内のすべてのビート時間はローカル定数(click、send(i)、onT(i))であり、オーディオスクリプトがミラーリングするものです。
  • ヘルパー:数学(clamp lin E EO EB mix f rng fadeIO bob)、svg(T G R Ci card chip check avatar lock logo wordmark textW)、チャート(pathFrom walk scalePts spark areaChart bez)、モーション(ring statusDot packet press progressRing checkbox strike)、カーソル(curPos drawCursor)、caption。G() は不透明度が約0の場合は '' を返すため、非表示のレイヤーはコストがかかりません。
  • 描画順序:シーンコンテンツ、キャプション、ブランドバグ、カーソルが最後。
  • const STATS = [...] は行の先頭に1行で保持します。compose.py がアウトロのサウンドのために読み取ります。

ワークフロー

  1. ブリーフ。対象者、製品、実際の数字を含む3..6個の真実の主張、長さ(フル60..90秒、ティーザー20..40秒)、投稿先、テーマ(house、studio、ember、tide、または新しいjson)。
  2. ストーリーボード。シーンID、時間、キャプション、視覚的メタファー、カーソルアクション、ビート時間を含む表。アーク:フック(ロゴ、タグライン)-> ビフォー(ペイン)-> 機能ごとに1シーン -> アウトロ(統計またはワードピル、クロージングライン)。構築前にキャプションのタイミングをコピールールに照らして確認します。
  3. 構築。作業フォルダで、SK をこのスキルの templates フォルダに設定します(例:SK=~/.claude/skills/explainer-video/templates): cp $SK/explainer-template.html explainer.html && cp $SK/compose.py . スキルのコピーは決して編集しないでください。 テーマを適用:node $SK/apply-theme.mjs --theme <name> --html explainer.html(house の場合はスキップ)。 BRAND を設定し、サンプルカードシーンを置き換え、マークされたブロックにシーンを追加し、開始時間と TOTAL を更新し、STATS を設定します。リファレンスからパターンを借用します。
  4. プレビュー。ブラウザでHTMLを開き(ループします)、次にすべてのクリック、着地、境界でスチルをレンダリングします: node $SK/render.mjs --html explainer.html --stills 3.2,4.9,8.6 --stills-dir critique/v1。
  5. レンダリング。node $SK/render.mjs --html explainer.html --out name.mp4 でMP4、-poster.png、-contact.png を出力します。
  6. 批評。checklist.md に照らしてコンタクトシートとスチルを確認します。すべての項目に合格する必要があります。修正、再レンダリング、再批評を繰り返します。
  7. オーディオ。compose.py はシーンと同期します。再生し、音楽のキー/テンポを確認し、必要に応じてテーマの music 設定を微調整してから再実行します。python3 compose.py --html explainer.html --out name.mp3。ビデオレンダラーと組み合わせて --audio name.mp3 を指定するか、後でffmpegでミックスします。
  8. 配信。納品フォルダに name.mp4 と name-poster.png を含めます。ソースの explainer.html と compose.py はプロジェクトフォルダに保管します。

批評チェックリスト(checklist.md)

  • すべてのテキストが読みやすい(ステル、スチル、コンタクトシートの背景に対して。apply-theme のコントラストチェックはスチルを必要としません)。
  • キャプションがコピールールに従っている(48文字、2.5秒以上、ダッシュなし、真実の数字のみ)。
  • カーソルがすべてのクリックに正確に着地している。
  • グライドのタイミングが良く、フレームの前後に十分な余裕がある。
  • すべてのシーンアクションに少なくとも1.5秒のホールドがある(キャプション読み取り時間)。
  • 遷移境界でスケール/不透明度がクリッピングしていない。
  • TOTAL が実際の合計と一致する(render --check または手動で検証)。
  • STATS はアウトロのサウンドスキームと一致する(単語はポップ、数字はカウンター)。
  • タイトルとアウトロ以外のすべてのシーンにキャプションがある。
  • アウトロのフェードアウトが bg で一貫している(黒色のフラッシュがない)。
  • テーマのパレットが透過/彩度/神秘性の点で正しい。
  • ブリーフに明記されている限り、実際のクライアントデータが使用されていない。

関連スキル