一键导入
mv-composer
Remotion + Kling i2v でプロモーションMV動画・バイラルショート動画を生成するスキル。 「MV作成」「動画を作って」「プロモーション動画」「TikTok動画」等のリクエストで発動。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Remotion + Kling i2v でプロモーションMV動画・バイラルショート動画を生成するスキル。 「MV作成」「動画を作って」「プロモーション動画」「TikTok動画」等のリクエストで発動。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Slack検索・TODO抽出・タスク管理を行うサブエージェント。 複数データソースからタスクを抽出し、優先順位付けを行う。 「Slackを検索」「タスクを抽出」「TODO確認」「メンション確認」等のリクエストで発動。
BigQuery/Snowflake接続、EDA、可視化、Marimoノートブック作成を行うサブエージェント。 データ分析関連の4つのルール(data_analysis, visualization, notebook, marimo_variable_naming)を統合。 「データ分析して」「BigQueryに接続」「EDAを実行」「Marimoで分析」等のリクエストで発動。
Remotionコンポジションを20項目チェックリストで品質レビューする。 「動画レビュー」「motion review」「Remotion品質チェック」等のリクエストで発動。
Slackチャンネルやメッセージをセマンティック検索するスキル。 「Slackで検索して」「チャンネルを探して」「発言を探して」等のリクエストで発動。
Slackの未返信メッセージを検出し、返信ドラフトを生成するスキル。 「未返信メッセージ」「返信してないメッセージ」「Slack確認」等のリクエストで発動。
YouTube Data API v3 を使用した動画アップロードスキル。 Shorts自動検出、UTMリンク自動挿入、予約投稿に対応。 「YouTube投稿」「動画アップロード」「Shorts投稿」等で発動。
| name | mv-composer |
| description | Remotion + Kling i2v でプロモーションMV動画・バイラルショート動画を生成するスキル。 「MV作成」「動画を作って」「プロモーション動画」「TikTok動画」等のリクエストで発動。 |
| status | draft |
| triggers | ["MV作成","動画を作って","プロモーション動画","TikTok動画を作って","ショート動画","mv-composer","Remotion動画","バイラル動画"] |
MV作成, 動画を作って, プロモーション動画, Remotion動画, アニメMV, 宣伝動画, 広告動画, TikTok動画, ショート動画, バイラル動画, リール, Short動画の台本, バズる動画
Draft: i2v のバッチ生成と自動 Video QA は未実装。実在する補助ツールと手動レビューの範囲で使用する。
Remotion(React ベース動画フレームワーク)と Kling 3.0 i2v を組み合わせ、 プロモーションMV動画・バイラルショート動画を自動生成するスキル。
主な用途:
| プリセット | 解像度 | アスペクト比 | 用途 |
|---|---|---|---|
| horizontal | 1920x1080 | 16:9 | YouTube, LP埋め込み, SNS広告 |
| vertical | 1080x1920 | 9:16 | TikTok, YouTube Shorts, Reels |
| square | 1080x1080 | 1:1 | Instagram フィード |
Root.tsx で PRESETS.horizontal / PRESETS.vertical / PRESETS.square を切り替え。
MVComposition.tsx の useScale() で自動スケール。
台本(AIDA 8シーン or バイラル Hook→Body→CTA)
↓
┌─────────────────────────────────────────────────┐
│ 素材生成(並列実行) │
│ ├─ Gemini 3 Pro: イラスト生成 + ロゴ生成 │
│ ├─ ElevenLabs: ナレーション音声 (TTS) │
│ └─ Kling 3.0 (fal.ai): i2v アニメーション (1-2本)│
└─────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────┐
│ Remotion コンポジション │
│ ├─ シーンコンポーネント │
│ │ ├─ i2v動画背景 (OffthreadVideo) │
│ │ ├─ 静止画背景 (Img + Ken Burns) │
│ │ └─ React MG (SVGチャート/ターミナル等) │
│ ├─ テロップ(グラデーション背景バー付き) │
│ ├─ ナレーション音声 + BGM │
│ ├─ ロゴ/ウォーターマーク │
│ └─ CrossFade トランジション │
└─────────────────────────────────────────────────┘
↓
npx remotion render → MP4 (H.264)
8シーンの AIDA 構成で台本を作成する。
F1: Hook(フック) — 共感を引く問題提起
F2: Problem(課題) — 具体的な痛みの描写
F3: Insight(気づき) — パラダイムシフトの一言
F4: Evidence(証拠) — 市場データ/成長曲線
F5: Split(比較) — Before/After の対比
F6: Demo(実演) — 実際の操作画面
F7: Proof(信頼) — ツール連携/実績
F8: CTA(行動喚起) — 価格 + ボタン + ブランド
各シーンに必要な情報:
dur: ナレーション尺(秒)terop: テロップテキスト(main / sub)motion_type: i2v | ken_burns | react_mg | staticイラスト生成(Gemini 3 Pro):
python3 skills/nanobanana/scripts/nanobanana.py \
"Anime style, frustrated person at desk with laptop, warm amber lighting, dark room" \
--output public/assets/illustrations/f1_scene.jpg
ナレーション生成(ElevenLabs):
# voice_id: Hajime = SOuiRq8aXqyALuq5QIQ8(日本語男性)
# 生成後 ffmpeg atempo=1.15 で高速化
ffmpeg -i narration_raw.mp3 -filter:a "atempo=1.15" -y narration_fast/frame_01.mp3
重要: 1動画あたり i2v は 1-2シーンに限定。コスト最適化のため。
汎用 i2v バッチスクリプトは未実装。承認済みの動画生成ワークフローで必要な1-2シーンを個別生成し、mv-composer/public/assets/i2v/ に配置する。
MVComposition.tsx の scenes 配列を編集し、各シーンコンポーネントを実装。
# 横型レンダリング
npx remotion render src/index.ts MV01-anime output/mv01_final.mp4 --codec h264
# 縦型レンダリング
npx remotion render src/index.ts MV01-vertical output/mv01_vertical.mp4 --codec h264
# フレーム抽出で目視確認
ffmpeg -ss 2 -i output/mv01_final.mp4 -vframes 1 -q:v 2 /tmp/check_f1.jpg
python3 skills/viral-short-video/scripts/generate_viral_script.py \
--topic "AIで業務を自動化する方法" \
--duration 30 \
--target "30代のビジネスパーソン" \
--session "ai_automation"
出力の viral_script.json を読み、scenes 配列を MVComposition.tsx に反映して Remotion でレンダリング。
# プリセット素材をダウンロード(初回のみ)
bash skills/viral-short-video/scripts/download_assets.sh
# バズ動画のフックを分析
python3 skills/viral-short-video/scripts/generate_viral_script.py \
--analyze-video hook_viral_10 \
--topic "AI自動化" --duration 30
| Parameter | Default | Description |
|---|---|---|
| --topic | (必須) | 動画のトピック |
| --product | - | 商材/サービス名 |
| --duration | 30 | 動画の長さ: 15, 30, 60 |
| --target | - | ターゲット層 |
| --tone | casual | casual / professional / energetic / storytelling |
| --hook-style | auto | auto / curiosity / fomo / social_proof / pattern_interrupt / contrarian |
| --split-screen | false | スプリットスクリーン指示 |
| --analyze-video | - | ピークフック抽出(プリセット名 or ファイルパス) |
| --dry-run | false | 結果表示のみ |
useScale() でフォントサイズ自動調整(s = width / 1920)データ: 3秒維持率65%超 → 4-7xインプレッション / エンゲージメント+340%
7つの心理トリガー (バイラル動画の84.3%で使用):
| # | トリガー | 日本語フック例 | 英語フック例 |
|---|---|---|---|
| 1 | パターンインタラプト | 「ちょっと待って、これ見て」 | "Wait, look at this" |
| 2 | キュリオシティギャップ | 「99%の人が知らない○○」 | "Nobody tells you this about..." |
| 3 | FOMO | 「今だけ」「これ見逃したら損」 | "You're missing out on..." |
| 4 | ソーシャルプルーフ | 「100万人が使ってる」 | "1M people already use this" |
| 5 | 感情的覚醒 | 「マジでヤバい」「信じられない」 | "I can't believe this works" |
| 6 | サプライズ | (目を見開く + 沈黙1秒) | (wide eyes + 1s pause) |
| 7 | 個人的関連性 | 「○○な人だけ見て」 | "If you're a [target], watch this" |
[Hook: 0-3秒] → [Body: 3-15秒] → [CTA: 15秒+]
Hook部分だけ差し替えてA/Bテスト。制作コスト-40%、テスト速度2x。
atempo=1.15 で後処理mv-composer/
├── src/
│ ├── index.ts # registerRoot
│ ├── Root.tsx # Composition 定義(PRESETS: horizontal/vertical/square)
│ └── MVComposition.tsx # 全シーンコンポーネント + useScale() + メイン構成
├── public/
│ ├── bgm.mp3
│ ├── narration/
│ ├── narration_fast/ # frame_01.mp3 ~ frame_08.mp3
│ └── assets/
│ ├── logo.png
│ ├── i2v/ # Kling 生成動画(1-2本)
│ ├── illustrations/ # Gemini 生成イラスト
│ ├── logos/ # ツール/企業ロゴ
│ ├── hooks/ # フック分析用素材(download_assets.sh で取得)
│ └── gameplay/ # ゲームプレイ背景素材(同上)
├── scripts/ # プロジェクト固有の生成補助スクリプト
├── output/ # レンダリング済み MP4
├── package.json
└── tsconfig.json
| 項目 | 値 |
|---|---|
| Node.js | 18+ |
| Python | 3.11+(i2v / スクリプト生成用) |
| FAL_KEY | fal.ai APIキー(Kling 3.0 用) |
| ELEVEN_API_KEY | ElevenLabs APIキー(TTS 用) |
| GEMINI_API_KEY | Gemini API(イラスト/ロゴ/スクリプト生成) |
| 項目 | 単価 | 数量 | 小計 |
|---|---|---|---|
| Kling 3.0 i2v | $0.35/5秒 | 2本 | $0.70 |
| ElevenLabs TTS | ~$0.05/シーン | 8本 | $0.40 |
| Gemini イラスト | 無料枠 | 6枚 | $0.00 |
| Gemini スクリプト | 無料枠 | 1回 | $0.00 |
| Remotion レンダリング | ローカル | 1回 | $0.00 |
| 合計 | ~$1.10 |
| 問題 | 解決策 |
|---|---|
| テロップが小さくて読めない | 52px+、グラデーション背景バー追加 |
| ロゴが小さくて存在感ない | 入れるなら大きく。小さいなら入れない |
| 全シーン同じ色で単調 | 暖色/寒色を混ぜる、React MG シーンを挟む |
| 棒グラフがつまらない | 折れ線の描画アニメーション + グローライン |
| 静止画が動かなくて安っぽい | 1-2シーンだけ i2v、残りは Ken Burns |
| CTA が目立たない | 白背景 + 大きいロゴ + パルスするボタン |
| ナレーションが遅い | atempo=1.15 で高速化(ピッチ変化なし) |
| 縦型でレイアウト崩れ | useScale() でスケールファクター適用 |
| 絵文字アイコン3連が安っぽい | UIモックアップパネルに置換(下記テンプレート参照) |
| テロップとシーン内テキストが被る | テキスト内蔵シーンは terop: null にする(下記ルール参照) |
ElevenLabs eleven_multilingual_v2 は漢字の誤読が頻発する。 必ず Whisper STT で検証し、NG なら読みがなヒントで再生成する。
| 原文 | 誤読 | 修正(ひらがな/カタカナ) |
|---|---|---|
| 承認 | チョンキン | しょうにん |
| 着金 | ちゃくきん(OK) / 着きん | ちゃくきん |
| 60日 | 翌日 | ろくじゅうにち |
| 払った | はばった | 支払った |
| 成果 | 成功 | せいか |
| ClearPay | クリアペー | クリアペイ |
| USDC | (無音/不明瞭) | ユーエスディーシー |
| CPA | (不明瞭) | シーピーエー |
| 承認率 | 成人率 | しょうにんりつ |
| 品質スコア | — | ひんしつスコア |
1. ElevenLabs TTS で音声生成
2. fal.ai Whisper で書き起こし(language: "ja")
3. 原文と比較(句読点除去で部分一致チェック)
4. NG → ひらがな読みヒントに置換して再生成
5. 再度 Whisper で検証 → PASS まで繰り返し
ナレーションのトーンを変える場合(丁寧語、カジュアル等):
原則: シーンに複合テキスト要素が内蔵されている場合、Terop オーバーレイは付けない。
| シーンタイプ | テキスト内蔵 | terop |
|---|---|---|
| i2v 背景のみ | なし | あり(main + sub) |
| Ken Burns + シンプル背景 | なし | あり |
| ブランドリビール(ロゴ+タグライン) | あり | null |
| UIモックアップ(パネル+ラベル) | あり | null |
| ダッシュボード(メトリクス+チャート) | あり | null |
| CTA(ロゴ+スローガン) | あり | null |
被りが発生すると情報が二重になり安っぽく見える。 テキスト内蔵シーンではシーンコンポーネント内でフォントサイズ・配置を完結させる。
ガラスモーフィズムの2パネル構成。プロダクトのUXを視覚化する。
Phase 1 (0–50f): パネルが左右からスライドイン
- 左パネル: 操作ステップ1(タイプライターURLなど)
- 右パネル: 操作ステップ2(カウンターアップなど)
Phase 2 (50–70f): 各パネルにチェックマーク出現
Phase 3 (70f+): パネルが左右に退場 → パンチラインテキスト中央表示
パネルスタイル:
background: "rgba(255,255,255,0.04)",
backdropFilter: "blur(20px)",
borderRadius: 20 * s,
border: "1px solid rgba(255,255,255,0.08)",
boxShadow: "0 12px 48px rgba(0,0,0,0.4), inset 0 1px 0 rgba(255,255,255,0.06)",
タイプライター演出:
const urlChars = Math.min(Math.floor(Math.max(0, frame - delay) * 1.8), fullText.length);
// カーソル点滅: frame % 12 < 6 ? 1 : 0
カウンターアップ:
const amount = interpolate(frame, [startF, endF], [0, targetValue], {
extrapolateLeft: "clamp", extrapolateRight: "clamp",
});
暗い背景 + グリッドオーバーレイ + 3枚のカード + バーチャート。 KPI を視覚化する汎用テンプレート。
- メトリクスカード: spring で順次出現、値はカウントアップ
- バーチャート: 各バーが spring で下から伸びる
- グリッド背景: transform: translateY(frame * 0.3 % 60) でゆっくり流れる
汎用構造: 「見せる → 完了 → 退場 → パンチライン」
// Phase 1: 要素が登場
const enterSpring = spring({ frame: Math.max(0, frame - delay), fps, ... });
// Phase 2: 完了マーク
const checkSpring = spring({ frame: Math.max(0, frame - 30), fps, ... });
// Phase 3: 要素が退場
const exit = interpolate(frame, [70, 85], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
// Phase 4: パンチラインが登場
const punchSpring = spring({ frame: Math.max(0, frame - 78), fps, ... });
用途: 操作フロー説明、Before/After、機能紹介 → 一言キャッチコピー
汎用BGMではなくプロジェクト固有のBGMを生成する。
import fal_client
result = fal_client.subscribe("fal-ai/stable-audio", arguments={
"prompt": "cinematic electronic, fintech technology, 118bpm, ...",
"seconds_total": 35,
"steps": 200,
})
# 出力は WAV → ffmpeg で MP3 変換
# ffmpeg -i output.wav -b:a 192k bgm_project.mp3
プロンプト例:
"cinematic electronic, fintech, professional, 118bpm, building tension""uplifting corporate, inspirational, 110bpm, warm piano""modern tech, minimalist electronic, 120bpm, clean""epic orchestral, cinematic tension, 100bpm, rising strings"BGM音量: volume={0.15〜0.20}(ナレーションの邪魔にならない程度)
| トランジション | 秒数 | 用途 |
|---|---|---|
| 標準 | 0.3s | 通常のシーン切替 |
| ロング | 0.8s | 問題→解決、暗→明など劇的な転換 |
| なし | 0s | Hook 冒頭(即座にインパクト) |
const transDur = Math.round(0.3 * fps);
const longTransDur = Math.round(0.8 * fps);
// Problem→Solution 間のみ longTransDur を適用
{i === 2 ? longTransDur : transDur}