Mv Composer logo

Mv Composer

Community
minicoohei
mv-composer

Remotion + Kling i2v でプロモーションMV動画・バイラルショート動画を生成するスキル。 「MV作成」「動画を作って」「プロモーション動画」「TikTok動画」等のリクエストで発動。

Overview

Publisherminicoohei
Repositoryai-agent-camp
Skill namemv-composer
Stars
346
Forks
13
Bundled files
4
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 4 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by minicoohei on GitHub. Read the source before you install it.

Installation

Install the Mv Composer AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/minicoohei/ai-agent-camp/tree/main/.claude/skills/mv-composer
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/minicoohei/ai-agent-camp.git /tmp/ai-agent-camp
mkdir -p .claude/skills
cp -r /tmp/ai-agent-camp/.claude/skills/mv-composer .claude/skills/mv-composer
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Mv Composer in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Mv Composer on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Mv Composer is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

トリガーキーワード

MV作成, 動画を作って, プロモーション動画, Remotion動画, アニメMV, 宣伝動画, 広告動画, TikTok動画, ショート動画, バイラル動画, リール, Short動画の台本, バズる動画

Draft: i2v のバッチ生成と自動 Video QA は未実装。実在する補助ツールと手動レビューの範囲で使用する。

MV Composer — Remotion + i2v 動画生成(横型 & 縦型)

Remotion(React ベース動画フレームワーク)と Kling 3.0 i2v を組み合わせ、 プロモーションMV動画・バイラルショート動画を自動生成するスキル。

主な用途:

  • 横型 (16:9): サービス/講座の宣伝MV、SNS広告動画、LP埋め込み動画
  • 縦型 (9:16): TikTok、YouTube Shorts、Instagram Reels
  • 正方形 (1:1): Instagram フィード

フォーマットプリセット

プリセット解像度アスペクト比用途
horizontal1920x108016:9YouTube, LP埋め込み, SNS広告
vertical1080x19209:16TikTok, YouTube Shorts, Reels
square1080x10801:1Instagram フィード

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)

制作フロー(横型プロモーションMV)

Step 1: 台本設計

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

Step 2: 素材生成

イラスト生成(Gemini 3 Pro):

bash
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):

bash
# voice_id: Hajime = SOuiRq8aXqyALuq5QIQ8(日本語男性)
# 生成後 ffmpeg atempo=1.15 で高速化
ffmpeg -i narration_raw.mp3 -filter:a "atempo=1.15" -y narration_fast/frame_01.mp3

Step 3: i2v アニメーション生成(Kling 3.0)

重要: 1動画あたり i2v は 1-2シーンに限定。コスト最適化のため。

汎用 i2v バッチスクリプトは未実装。承認済みの動画生成ワークフローで必要な1-2シーンを個別生成し、mv-composer/public/assets/i2v/ に配置する。

Step 4: Remotion コンポジション

MVComposition.tsx の scenes 配列を編集し、各シーンコンポーネントを実装。

Step 5: レンダリング & レビュー

bash
# 横型レンダリング
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

縦型動画(TikTok/Shorts)の制作フロー

バイラルスクリプト生成

bash
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
# プリセット素材をダウンロード(初回のみ)
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

viral-short-video 生成ツールのパラメータ

ParameterDefaultDescription
--topic(必須)動画のトピック
--product-商材/サービス名
--duration30動画の長さ: 15, 30, 60
--target-ターゲット層
--tonecasualcasual / professional / energetic / storytelling
--hook-styleautoauto / curiosity / fomo / social_proof / pattern_interrupt / contrarian
--split-screenfalseスプリットスクリーン指示
--analyze-video-ピークフック抽出(プリセット名 or ファイルパス)
--dry-runfalse結果表示のみ

縦型レイアウトの注意事項

  • テロップ: TikTokセーフゾーン Y位置55-65%(上15%・下20%は避ける)
  • 字幕: 1行5-8文字、最大2行、太字白+黒縁3px
  • useScale() でフォントサイズ自動調整(s = width / 1920)

バイラルテクニック チートシート

1. 冒頭3秒フック(最重要)

データ: 3秒維持率65%超 → 4-7xインプレッション / エンゲージメント+340%

7つの心理トリガー (バイラル動画の84.3%で使用):

#トリガー日本語フック例英語フック例
1パターンインタラプト「ちょっと待って、これ見て」"Wait, look at this"
2キュリオシティギャップ「99%の人が知らない○○」"Nobody tells you this about..."
3FOMO「今だけ」「これ見逃したら損」"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"

2. モジュラー構造

[Hook: 0-3秒] → [Body: 3-15秒] → [CTA: 15秒+]

Hook部分だけ差し替えてA/Bテスト。制作コスト-40%、テスト速度2x。

3. ループブリッジ

  • リウォッチ = アルゴリズムブースト+84%
  • 70%完視聴率 → アルゴリズム推進
  • パターン: 動画の最後で「さっき言った○○だけど...」→ 冒頭に戻る

4. フラッシュテキスト

  • 最後の2-3フレーム(0.1秒未満)に赤/黒文字を一瞬表示
  • 意識的に読めない速度 → リウォッチ誘導
  • テキスト例: 「もう一回見て」「隠しメッセージ」「気づいた?」

5. 字幕(キャプション)

  • 85%がミュート視聴 → 字幕で維持率+31%、エンゲージメント+38%
  • TikTokセーフゾーン: Y位置55-65%(上15%・下20%は避ける)

6. 音声ペース

  • 1.1-1.3xの速い音声 → 離脱防止
  • ElevenLabs の場合 atempo=1.15 で後処理

クオリティチェックリスト(v1→v16 で確立)

視認性

  • テロップ main: 52px以上(bold時 64px以上)※横型基準、縦型は自動スケール
  • テロップ sub: 32px以上
  • テロップ背景: 下部グラデーションバー必須
  • 吹き出し/ラベル: 24px以上、背景の不透明度 0.14 以上

ロゴ・ブランド

  • ロゴを入れるなら 存在感のあるサイズ にする(小さいなら入れない)
  • ウォーターマーク: 140px 幅、opacity 0.5 以上
  • ツールロゴ: コンテナ 88px、アイコン 60px、名前 20px

色彩・バリエーション

  • 全シーン同色系にしない。最低2色系統を混ぜる
  • F8 CTA は白背景推奨(暗い背景ではロゴが見えない)

モーション

  • i2v は 1-2シーン に限定(コスト+品質のバランス)
  • 静止画シーンは Ken Burns(scale 1→1.04~1.08)で動きをつける
  • React MG: spring animation + interpolate で生き生きと

データ可視化

  • 棒グラフより**折れ線グラフ(成長曲線)**のほうがダイナミック
  • SVG dashOffset アニメーションで線を描画する演出

ファイル構成

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.js18+
Python3.11+(i2v / スクリプト生成用)
FAL_KEYfal.ai APIキー(Kling 3.0 用)
ELEVEN_API_KEYElevenLabs APIキー(TTS 用)
GEMINI_API_KEYGemini API(イラスト/ロゴ/スクリプト生成)

コスト目安(1本あたり)

項目単価数量小計
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 にする(下記ルール参照)

日本語TTS発音QAパイプライン

ElevenLabs eleven_multilingual_v2 は漢字の誤読が頻発する。 必ず Whisper STT で検証し、NG なら読みがなヒントで再生成する。

既知の誤読パターン(ElevenLabsで確認済み)

原文誤読修正(ひらがな/カタカナ)
承認チョンキンしょうにん
着金ちゃくきん(OK) / 着きんちゃくきん
60日翌日ろくじゅうにち
払ったはばった支払った
成果成功せいか
ClearPayクリアペークリアペイ
USDC(無音/不明瞭)ユーエスディーシー
CPA(不明瞭)シーピーエー
承認率成人率しょうにんりつ
品質スコア—ひんしつスコア

QAフロー

1. ElevenLabs TTS で音声生成
2. fal.ai Whisper で書き起こし(language: "ja")
3. 原文と比較(句読点除去で部分一致チェック)
4. NG → ひらがな読みヒントに置換して再生成
5. 再度 Whisper で検証 → PASS まで繰り返し

丁寧語バリアント

ナレーションのトーンを変える場合(丁寧語、カジュアル等):

  • 全シーンのテキストを書き換えてからバッチ再生成
  • 丁寧語化で尺が伸びることが多い → シーン dur の再調整必須
  • 例: 「それだけ。」→「それだけです。」で +0.5s 程度

テロップ被り防止ルール

原則: シーンに複合テキスト要素が内蔵されている場合、Terop オーバーレイは付けない。

判定基準

シーンタイプテキスト内蔵terop
i2v 背景のみなしあり(main + sub)
Ken Burns + シンプル背景なしあり
ブランドリビール(ロゴ+タグライン)ありnull
UIモックアップ(パネル+ラベル)ありnull
ダッシュボード(メトリクス+チャート)ありnull
CTA(ロゴ+スローガン)ありnull

被りが発生すると情報が二重になり安っぽく見える。 テキスト内蔵シーンではシーンコンポーネント内でフォントサイズ・配置を完結させる。


React MG シーンテンプレート集

1. UIモックアップパネル(ClearPay F4実績)

ガラスモーフィズムの2パネル構成。プロダクトのUXを視覚化する。

Phase 1 (0–50f): パネルが左右からスライドイン
  - 左パネル: 操作ステップ1(タイプライターURLなど)
  - 右パネル: 操作ステップ2(カウンターアップなど)
Phase 2 (50–70f): 各パネルにチェックマーク出現
Phase 3 (70f+): パネルが左右に退場 → パンチラインテキスト中央表示

パネルスタイル:

tsx
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)",

タイプライター演出:

tsx
const urlChars = Math.min(Math.floor(Math.max(0, frame - delay) * 1.8), fullText.length);
// カーソル点滅: frame % 12 < 6 ? 1 : 0

カウンターアップ:

tsx
const amount = interpolate(frame, [startF, endF], [0, targetValue], {
  extrapolateLeft: "clamp", extrapolateRight: "clamp",
});

2. ダッシュボード(メトリクスカード + バーチャート)

暗い背景 + グリッドオーバーレイ + 3枚のカード + バーチャート。 KPI を視覚化する汎用テンプレート。

- メトリクスカード: spring で順次出現、値はカウントアップ
- バーチャート: 各バーが spring で下から伸びる
- グリッド背景: transform: translateY(frame * 0.3 % 60) でゆっくり流れる

3. 3フェーズアニメーション パターン

汎用構造: 「見せる → 完了 → 退場 → パンチライン」

tsx
// 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生成(fal.ai Stable Audio)

汎用BGMではなくプロジェクト固有のBGMを生成する。

python
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"
  • SaaS: "modern tech, minimalist electronic, 120bpm, clean"
  • ドラマティック: "epic orchestral, cinematic tension, 100bpm, rising strings"

BGM音量: volume={0.15〜0.20}(ナレーションの邪魔にならない程度)


CrossFade トランジション戦略

トランジション秒数用途
標準0.3s通常のシーン切替
ロング0.8s問題→解決、暗→明など劇的な転換
なし0sHook 冒頭(即座にインパクト)
tsx
const transDur = Math.round(0.3 * fps);
const longTransDur = Math.round(0.8 * fps);
// Problem→Solution 間のみ longTransDur を適用
{i === 2 ? longTransDur : transDur}

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Mv Composer AI skill do?

Remotion + Kling i2v でプロモーションMV動画・バイラルショート動画を生成するスキル。 「MV作成」「動画を作って」「プロモーション動画」「TikTok動画」等のリクエストで発動。

Why use Mv Composer on TypingMind?

Because you install it once and use it with any model. Mv Composer is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Mv Composer in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/minicoohei/ai-agent-camp/tree/main/.claude/skills/mv-composer. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Mv Composer?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Mv Composer?

As many as you like. As long as a model supports skills, you can use Mv Composer with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Mv Composer AI skill free?

It is published on GitHub by minicoohei. Check the repository for licensing terms. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇