Communitygithub.com

broomva/skills — リキッドグラス製品ローンチビデオ

暗黒の背景、3Dパースペクティブの浮遊UIパネル、パーティクルエフェクト、スプリングアニメーション、映画的ペーシングを特徴とするリキッドグラス美学の製品ローンチビデオを制作します。Remotion、Imagen 4.0、Veo 3.1を活用。

skills — リキッドグラス製品ローンチビデオ とは?

このスキルは、製品デモやローンチビデオをプロフェッショナルかつ映画的に演出するためのものです。「リキッドグラス」美学(暗黒の虚空、3Dパースペクティブの浮遊ガラスパネル、まばゆいパーティクル、有機的なスプリングアニメーション)を採用し、Remotionフレームワーク上で実装します。スキルは8つのシーンタイプ(タイトルカード、プロンプト入力、分割パネル、製品デモ、詳細ズーム、CTA、Imagen 4.0で生成したシネマティックフレーム、Veo 3.1のBロール)を定義。アセット生成にはGoogle Imagen 4.0とVeo 3.1を、映像編集・合成にはRemotionを使用します。Claude Code、Cursor、Codexなど、Remotionプロジェクトを扱える任意のAIエージェントプラットフォームで動作し、/remotion-best-practices、/content-creation、/arcan-glass、/google-veo、/blog-post などのスキルと連動します。

対応~Claude Code~Codex CLI~Cursor✓Gemini CLI
npx skills add https://github.com/broomva/skills/tree/HEAD/skills/video/launch-video

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

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

ドキュメント

ローンチビデオ — リキッドグラス製品ショーケース

リキッドグラス美学(暗黒の虚空、3D浮遊パネル、パーティクルエフェクト、スプリングアニメーション、確かなペーシング)を用いて、映画的な製品ローンチビデオを制作します。

複合スキル

スキル役割
/remotion-best-practices構成構造、spring()、<Sequence>、レンダーパイプライン
/content-creationAIアセット生成 (Imagen 4.0、Veo 3.1)
/arcan-glassBroomVAブランドトークン (AI Blue、ダークファーストパレット)
/google-veo映画的なBロール生成プロンプト
/blog-post配信パイプライン (X、LinkedIn、Instagramへの公開)

リキッドグラス美学

コアビジュアル原則

  1. 暗黒の虚空背景 — ピュアブラック (#000000) またはニアブラック (#0A0A0A)。ベースにグラデーションはなし。コンテンツは暗闇に浮かびます。
  2. 3Dパースペクティブパネル — スクリーンショットとUIレンダリングを8〜15°傾け、perspective(1200px) を適用。決してフラットではなく、常に浮遊感を持たせます。
  3. ガラス素材 — パネルは曇りエッジ、微妙な反射、角丸とグロー、半透明の境界線を持ちます。
  4. パーティクルフィールド — 小さな浮遊パーティクル (2〜4px、低透明度、ゆっくり漂流) が虚空を満たし、奥行きと生命感を生み出します。
  5. スプリングモーション — すべての出入りはRemotion spring() を使用。CSSトランジションは不使用。リニアも不使用。有機的で確かな動き。
  6. 確かなペーシング — 各シーン最低3〜5秒。素早いカットは避け、それぞれのビジュアルを味わわせます。
  7. 最小限のタイポグラフィ — サンセリフ (Inter、SF Pro、またはシステムフォント)、白字、中央揃え。タイトルカードは最大8ワード。

カラーパレット

トークン値用途
void#000000背景
panel-bgrgba(20, 20, 25, 0.85)ガラスパネル塗りつぶし
panel-borderrgba(255, 255, 255, 0.08)ガラスエッジ
panel-glowrgba(59, 130, 246, 0.15)エッジグロー (AI Blue)
text-primary#FFFFFFタイトルテキスト
text-secondaryrgba(255, 255, 255, 0.6)サブタイトル、URL
accent#3B82F6AI Blue ハイライト
success#22C55Eチェックマーク、ポジティブ状態
particlergba(255, 255, 255, 0.15)背景パーティクル

3DパネルCSS (Remotion)

const panelStyle: React.CSSProperties = {
  perspective: '1200px',
  transform: `rotateY(-8deg) rotateX(5deg)`,
  borderRadius: 16,
  border: '1px solid rgba(255, 255, 255, 0.08)',
  boxShadow: `
    0 25px 50px rgba(0, 0, 0, 0.6),
    0 0 30px rgba(59, 130, 246, 0.1),
    inset 0 1px 0 rgba(255, 255, 255, 0.05)
  `,
  background: 'rgba(20, 20, 25, 0.85)',
  backdropFilter: 'blur(20px)',
  overflow: 'hidden',
};

スプリング設定

import { spring, useCurrentFrame, useVideoConfig } from 'remotion';

// 標準的な入場
const entrance = spring({
  frame,
  fps,
  config: { damping: 15, stiffness: 80, mass: 0.8 },
});

// 微妙な漂流 (浮遊パネル用)
const drift = spring({
  frame: frame - delay,
  fps,
  config: { damping: 200, stiffness: 10, mass: 2 },
  durationInFrames: 120,
});

シーンタイプ

1. タイトルカード

長さ: 3〜4秒 内容: 製品名またはキャッチフレーズ、中央揃え、白字、黒背景 アニメーション: 微妙なスケールスプリング (0.95 → 1.0) でフェードイン 例: 「Build your ideas with Gemini」

2. プロンプト / 入力シーン

長さ: 4〜6秒 内容: チャット入力またはターミナルプロンプト、角度付き3Dパネル アニメーション: パネルが下からスプリングイン、テキストはタイプライターエフェクト テクニック: 3D CSSトランスフォームを適用したスクリーンショットを <Img> で表示、タイプライターはフレームベースの文字列スライスで実現

3. 分割パネルシーン

長さ: 4〜5秒 内容: 2つのUIパネルを並べて表示 (例: プロンプト + コード出力) アニメーション: パネルが両側からスプリングイン、パネル間にパーティクル テクニーク: 2つの <Img> コンポーネントを逆向きの rotateY トランスフォームで配置

4. 製品デモシーン

長さ: 5〜8秒 内容: 製品UI全体を浮遊ガラスパネルとして表示 アニメーション: ゆっくりとしたドリフト回転 (微妙な rotateY 振動)、映画的なズーム テクニック: <Img> または <OffthreadVideo> をアニメーション付き scale および rotateY で使用

5. 詳細ズームシーン

長さ: 3〜4秒 内容: 特定のUI要素や機能にズームイン アニメーション: 全体表示からトリミング詳細へのスプリングスケール テクニック: パネル画像にアニメーション付き scale + translate を適用

6. CTA / ブランドカード

長さ: 3〜4秒 内容: ロゴ + URL またはインストールコマンド アニメーション: フェードイン、静止、フェードアウト テクニック: 中央揃えテキスト、ブランドアイコン、微妙なグロー

7. AIシネマティックフレーム (Imagen 4.0)

長さ: 3〜5秒 内容: AI生成のヒーローレンダリングまたはコンセプトアートをGlassPanel内に配置 アニメーション: スプリング入場、ゆっくりとしたドリフト回転、微妙なズーム テクニック: Imagen 4.0で生成し、public/に配置。GlassPanel内で3Dトランスフォームを使って <Img src={staticFile('render.png')} /> で表示 使用タイミング: 抽象概念、アーキテクチャ図、ムードビジュアルなど、スクリーンショットよりもAI生成画像が効果的な場面

<GlassPanel rotateY={-10} rotateX={6} delay={5}>
  <Img src={staticFile('imagen-hero-render.png')} style={{ width: '100%' }} />
</GlassPanel>

8. AIビデオBロール (Veo 3.1)

長さ: 4〜8秒 内容: 映画的なAI生成ビデオクリップをトランジションまたは雰囲気として使用 アニメーション: ガラスパネルの背後または内部で再生、オプションでオーバーレイテキスト テクニック: Veo 3.1で生成、ffmpeg -movflags +faststart で前処理、Remotionで <OffthreadVideo> を使用

// フルブリードの映画的Bロール (シーン間)
<OffthreadVideo
  src={staticFile('veo-broll-corridor.mp4')}
  style={{ width: '100%', height: '100%', objectFit: 'cover' }}
/>

// ガラスパネル内のBロール
<GlassPanel rotateY={-5} rotateX={3}>
  <OffthreadVideo
    src={staticFile('veo-product-demo.mp4')}
    style={{ width: '100%', borderRadius: 12 }}
  />
</GlassPanel>

Veo 3.1のBロール用プロンプトパターン:

[カメラの動き]、[被写体/環境]、[動作/モーション]、[照明 + ムード]。
暗い背景、[アクセントカラー]のグロー。映画的、プロフェッショナル。[アスペクト比]。

使用タイミング: シーングループ間のトランジション、雰囲気のあるイントロ/アウトロ、静止スクリーンショットよりも動きが価値を高める映画的な製品デモ。

前処理 (<OffthreadVideo> + parseMedia() に必須):

ffmpeg -i veo-clip.mp4 -c:v libx264 -crf 18 -movflags +faststart -r 30 processed.mp4

ハイブリッド構成パターン

最も洗練されたビデオは、3つのアセットタイプすべてを組み合わせます:

タイトルカード (テキスト)
  → GlassPanel内のImagenフレーム (コンセプトアート)
    → Veo Bロールトランジション (映画的4秒)
      → GlassPanel内のスクリーンショット (製品デモ)
        → Remotionアニメーションデータ (パイプラインノード、ファイルツリー)
          → Veo Bロールアウトロ (雰囲気)
            → CTAカード (テキスト)

ルール: Remotionがタイミング、トランジション、テキストを制御します。AIアセットは視覚的な豊かさを提供します。AIにペーシングを制御させないでください — それはRemotionの役割です。

制作パイプライン

1. ストーリーボード → シーンをタイプ(1-8)、長さ、コンテンツで定義
2. アセット → すべてのビジュアルアセットを生成/キャプチャ
   a. スクリーンショット — agent-browserまたは手動キャプチャで製品UIを取得
   b. Imagen 4.0 — ヒーローレンダリング、コンセプトアート、抽象ビジュアル
      → ai.models.generateImages({ model: 'imagen-4.0-fast-generate-001', prompt: '...' })
      → public/ ディレクトリに保存
   c. Veo 3.1 — 映画的なBロールクリップ (各4〜8秒)
      → ai.models.generateVideos({ model: 'veo-3.1-fast-generate-preview', prompt: '...' })
      → 前処理: ffmpeg -i clip.mp4 -c:v libx264 -movflags +faststart -r 30 processed.mp4
      → public/ ディレクトリに保存
3. コンポーズ → Remotionコンポジションを構築
   - プリロード用のpremountForを備えた <Sequence>
   - 画像には <Img> + staticFile() (決して <img> は使わない)
   - Veoクリップには <OffthreadVideo> + staticFile() (決して <video> は使わない)
   - 3Dトランスフォームと入場には GlassPanel + spring()
   - 背景レイヤーとして ParticleField
   - テキストオーバーレイ用の Subtitle コンポーネント
4. レンダリング → npx remotion render src/Root.tsx CompositionId out/video.mp4
5. 後処理 → 別ファイルのオーディオを追加する場合
   - ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac final.mp4
6. レビュー → /creative-review でスタイルブリーフに対するスコアを評価 (目標: ≥75)
7. 配信 → /blog-post 公開パイプラインでプラットフォームにプッシュ

Remotionプロジェクト構造

launch-video/
├── src/
│   ├── Root.tsx                 # registerRoot
│   ├── Composition.tsx          # <Sequence> シーンを含むメインコンポジション
│   ├── scenes/
│   │   ├── TitleCard.tsx        # シーンタイプ1
│   │   ├── PromptScene.tsx      # シーンタイプ2
│   │   ├── SplitPanel.tsx       # シーンタイプ3
│   │   ├── ProductDemo.tsx      # シーンタイプ4
│   │   ├── DetailZoom.tsx       # シーンタイプ5
│   │   └── CTACard.tsx          # シーンタイプ6
│   ├── components/
│   │   ├── GlassPanel.tsx       # ガラス素材の3Dパースペクティブパネル
│   │   ├── ParticleField.tsx    # 背景パーティクルシステム
│   │   ├── TypewriterText.tsx   # フレームベースのタイプライターアニメーション
│   │   └── SpringFade.tsx       # 再利用可能なスプリングフェードラッパー
│   └── styles/
│       └── tokens.ts            # リキッドグラスの色/スペーシングトークン
├── public/                      # staticFile() アセット (スクリーンショット、レンダリング)
├── package.json
└── remotion.config.ts

パーティクルフィールドコンポーネント (参考)

const ParticleField: React.FC<{ count?: number }> = ({ count = 40 }) => {
  const frame = useCurrentFrame();
  const particles = useMemo(() =>
    Array.from({ length: count }, (_, i) => ({
      x: (i * 37 + 13) % 100,
      y: (i * 53 + 7) % 100,
      size: 2 + (i % 3),
      speed: 0.1 + (i % 5) * 0.05,
      opacity: 0.05 + (i % 4) * 0.04,
    })), [count]);

  return (
    <AbsoluteFill>
      {particles.map((p, i) => (
        <div key={i} style={{
          position: 'absolute',
          left: `${p.x}%`,
          top: `${(p.y + frame * p.speed) % 110}%`,
          width: p.size,
          height: p.size,
          borderRadius: '50%',
          background: `rgba(255, 255, 255, ${p.opacity})`,
        }} />
      ))}
    </AbsoluteFill>
  );
};

GlassPanelコンポーネント (参考)

const GlassPanel: React.FC<{
  children: React.ReactNode;
  rotateY?: number;
  rotateX?: number;
  scale?: number;
}> = ({ children, rotateY = -8, rotateX = 5, scale = 1 }) => (
  <div style={{
    transform: `perspective(1200px) rotateY(${rotateY}deg) rotateX(${rotateX}deg) scale(${scale})`,
    borderRadius: 16,
    border: '1px solid rgba(255, 255, 255, 0.08)',
    boxShadow: '0 25px 50px rgba(0,0,0,0.6), 0 0 30px rgba(59,130,246,0.1), inset 0 1px 0 rgba(255,255,255,0.05)',
    background: 'rgba(20, 20, 25, 0.85)',
    overflow: 'hidden',
    transition: 'none',
  }}>
    {children}
  </div>
);

品質チェックリスト

  • 背景はピュアブラックまたはニアブラック (グラデーションなし)
  • すべてのパネルが3Dパースペクティブトランスフォームを使用 (フラットなスクリーンショットは不可)
  • すべての入場にスプリングアニメーション (CSSトランジションは不使用)
  • 背景にパーティクルフィールドが存在する
  • 各シーンは最低3〜5秒保持 (素早いカットは避ける)
  • タイポグラフィ: サンセリフ、白字、中央揃え、タイトルカードあたり最大8ワード
  • ガラス素材: ボーダーグロー、シャドウ、角丸、半透明
  • オーディオあり (アンビエントエレクトロニックまたはナレーション)
  • 合計時間 20〜45秒
  • 最終レンダリングに -movflags +faststart

Individual skills in this repo

This repo contains 7 individual skills — each has its own dedicated page.

broomva/skills

Local TTS, voice cloning, voice design, and video dubbing via the OmniVoice Studio MCP server (open-source ElevenLabs alternative; nothing leaves the machine, runs on MPS/CUDA/CPU). Use when: (1) generating speech from text in any of 646 languages, (2) cloning a voice from a 3-second reference clip, (3) designing a voice by gender/age/accent/pitch/style, (4) dubbing a video into another language, (5) listing voice profiles or personality presets, (6) producing narration where privacy, cost, or absent API keys matter, (7) non-English narration where Edge TTS/kokoro fall short, (8) batch audio for blog posts or content pipelines. Triggers: 'omnivoice', 'voice clone', 'clone this voice', 'tts', 'narrate', 'generate speech', 'voice synthesis', 'dub video', 'voice design', 'local tts', 'multilingual voice', 'narrate this post', 'elevenlabs alternative'.

broomva/skills

>- Speak an explanation out loud while working in any project — tiered text-to-speech with a pluggable backend (ElevenLabs by default and quota-guarded, macOS `say` via `--fast` for free instant local speech, local OmniVoice as an unlimited private tier). Markdown-aware, so code fences, URLs and deep paths collapse to short spoken placeholders instead of being dictated character by character, while snake_case identifiers survive intact so the listener can still search for them. Every utterance is saved to disk for later replay. Also carries a **talk mode** toggle: turn it on and the agent speaks a full readback of every turn, for as long as that session lasts — the whole response, not a summary of it, with `brief` and `marker` levels for when you want less. Talk mode is off by default and scoped to the single session that enabled it, so parallel agents in other worktrees stay silent. Use when the user asks to hear something rather than read it — an explanation of a change, a walkthrough of what just happen...

broomva/skills

Shop Tiendas D1 (Colombia, d1.com.co) from the command line — search the catalogue, resolve your nearest physical store, price a basket against that store's real stock, and quote delivery. D1 runs VTEX IO (account `d1tiendas`), so this drives its public storefront API with no admin key at all — catalogue and cart work fully anonymously, and a one-time emailed code unlocks order history. Handles the two traps that make naive D1 automation wrong — availability is regionalized (an unregioned query reports a national catalogue nobody can actually buy from) and prices arrive in two different units (search reports whole pesos, checkout reports hundredths, a silent 100x). Builds and prices baskets; it deliberately cannot pay, handing a checkout URL to a human instead. USE WHEN the user wants to find D1 products or prices, check whether D1 delivers somewhere, build or cost a D1 grocery basket, compare D1 items, or review their D1 orders. NOT FOR other Colombian retailers (Éxito, Jumbo, Ara, Alkosto), and not for c...

broomva/skills

Stateful, local-first household toxics inventory + swap engine. Identify the items in a home that carry endocrine disruptors and persistent chemicals (BPA/BPS, phthalates, PFAS/PTFE, parabens, flame retardants, VOCs, microplastics), score each by *real* exposure (severity x presence x how it's used x condition), and track the swap to a safer alternative from "flagged" -> "sourced" -> "swapped". Ships a grounded, cited knowledge graph of ~20 hazards, ~40 item-classes, and ~40 alternatives. Hands sourcing off to the `procurer` skill. The skill's state is the source of truth — the agent is the app.

broomva/skills

Tekton — the shared architecture-intent substrate for co-designing systems with the agent. One typed graph across six tiers (system / journey / data / infra / decisions / qualities); views are queries, not separate diagrams. The canonical artifact is a diff-friendly YAML model both human and agent read and write; it renders to Mermaid (agent-legible, GitHub-native) and a self-contained tabbed HTML viewer (human-visual). Cross-tier traceability (`tekton query <from> <to>`) answers "which infra does this user-journey step touch?" as a path query. USE WHEN: designing or thinking deeply about architecture, a system, a data model, user journeys/flows, or a technical plan WITH the agent; when a Category-C HTML doc isn't enough because you need to see AND edit AND traverse the design across tiers; "let's design X", "architect this", "model the system", "draw the flow", "how does this fit together", "diagram this", "/tekton". NOT FOR: a one-off throwaway diagram (use Mermaid inline); prose-only ADRs (write the ADR...

broomva/skills

Generate a polished Remotion video and X thread showcasing the full agent skills inventory. Use when creating social media content about skills, rendering category-based skill visualizations, or producing animated showcases of agent capabilities. Triggers on "skills video", "showcase skills", "skills thread", "render skills", "social content for skills", or requests to visualize the skills inventory.

broomva/skills

OpenCaptions extension for Content Engine — adds intent-driven CWI (Caption With Intent) captions to the post-production pipeline. Hooks into the grade → caption → final stage. Generates captions that understand video intent (pitch, volume, emotion, emphasis) and style themselves accordingly with variable font weight, size, and color. Uses the OpenCaptions CLI or MCP server. Triggers on: 'add captions', 'opencaptions', 'CWI captions', 'intent captions'.

関連スキル