video-shotcraft: 映画のような製品プロモーションビデオ制作
自己完結型の制作能力ライブラリ: 157枚のショットレシピカード(デモ実装ソースコードと動的サンプルギャラリー付き)、検証済みの完全なプロモーションビデオテンプレート1本、再利用可能なコンポーネントとオーディオアセット、6段階のワークフロー。現在のフォーカスはWeb/デスクトップ製品のプロモーションビデオですが、ショットカード自体は汎用的なモーション語彙です。個別にカードを抽出して任意のビデオ内の単一ショットとしても使用できます。
呼び出し時のモード判定
完全なプロモーションビデオには、相互に排他的な3つのモードがあります。素材収集、絵コンテ、または実装を開始する前に、ユーザーが既に明確に選択しているかどうかを判断してください。既に選択している場合は、そのまま実行し、繰り返し質問したり、別のモードに変更したりしないでください。
- テンプレートを直接使用: Ink Pressの既存の置き換えフローを維持します。
template/TEMPLATE.mdを読み、既存のショット構造に従って、対象製品のスクリーンショット、コピー、ブランド情報を置き換えます。 - 自主自由創作:
references/pipeline.mdを読みます。エージェントは、ユーザーの既存の要件とプロジェクト内容に基づいて、ビジュアルディレクション、ショットマッピング、絵コンテ、素材、オーディオを自主的に決定し、連続的に完成版まで進めます。製品概要、styleframe、ショットマッピング、または絵コンテの段階でユーザーの確認を待つために一時停止しません。 - 共同創作:
references/guided-free-creation.mdを読みます。エージェントはまず根拠のある判断と計画を提示し、ユーザーが製品概要、要件決定、ビジュアルディレクション、ショットマッピング、最終絵コンテを順に確認します。絵コンテが承認された後、references/pipeline.mdの最終素材収集と制作段階に入ります。
ユーザーがプロジェクトパス、URL、スクリーンキャプチャ、またはページスクリーンショットを提供したが、まだモードを選択していない場合は、最初に最小限の読み取り専用の製品チェックを実行します。製品のポジショニング、主要機能、ページのビジュアル、表示可能な状態、素材リスクを把握します。ビジネスプロジェクトを変更したり、機密データを収集したり、ビデオコードを記述したりしません。チェック後、3つのモードを提示し、以下を説明します:
- Ink Pressがその製品に適しているかどうか、適している/適していない具体的な根拠。
- 自主自由創作と共同創作がそれぞれ適しているかどうか、どの製品ビジュアルの手がかりが保持される見込みか。
- エージェントが推奨するモードとその根拠、トレードオフ。
その後、明確に質問します: 「上記の製品チェックに基づき、××モードの使用をお勧めします。このモードで続行しますか?」 同時にユーザーに知らせます: https://vincentwei1021.github.io/video-shotcraft/ で動的サンプルを閲覧し、ビデオで使用したいモーションエフェクトショットを選択できます。
ユーザーがチェック可能なプロジェクトやページをまだ提供していない場合は、3つのモードを簡単に紹介してから質問します。Ink Pressが既存のテンプレートであるという理由だけで、それをデフォルトで推奨しないでください。
- ユーザーがテンプレートを選択:
template/TEMPLATE.mdを全文読み、元のテンプレートフローに従って実行します。 - ユーザーが自主自由創作を選択:
references/pipeline.mdを全文読み、エージェントが自主的に進め、段階ごとに確認を待ちません。 - ユーザーが共同創作を選択:
references/guided-free-creation.mdを全文読み、その中の確認ノードに従って協力します。 - ユーザーが未決定: ここで停止し、選択を待ちます。ユーザーに代わってデフォルトで選択したり、制作を開始したりしないでください。
例外1: ユーザーが既にInk Pressテンプレートを指名している場合、テンプレートモードが選択されたものとみなします。
例:「Ink Pressテンプレートを使って製品のプロモーションビデオを作って」。この場合、再度質問せず、直ちにtemplate/TEMPLATE.mdを全文読み、テンプレートルートに従って実行します。
例外2: ユーザーが特定のショットカードを使用または参照することを明確に指定している場合、ショット制約は既に選択されています。
例:「deck-deal-flyinとrow-embedをこのビデオに使って」または「spotlight-hero-cardのエフェクトを参考にして」。この場合、テンプレートを紹介したり、テンプレートの使用を尋ねたりしないでください。ギャラリー名解決ルールに従って指定されたショットを確認し、各カードを全文読み、カードの「参考実装」に従って正確なデモソースコードを特定します。単一ショットは対象素材が明確になった後に実行できます。完全なプロモーションビデオで、自主自由創作と共同創作のどちらを使用するかがまだ説明されていない場合は、これら2つのモードについてのみ質問し、指定されたショットを後続の制作制約として使用します。指定されたショットは自動的に共同創作とは見なされません。
4つの使用方法
- 完全なプロモーションビデオ(テンプレートルート): テンプレートビデオと非常に類似したエフェクトを希望 →
template/TEMPLATE.mdを読み、「製品置き換え再現ガイド」に従って素材を置き換え、ショットごとに適応させます。 - 完全なプロモーションビデオ(自主自由創作): 新しいスタイルを希望し、エージェントに自主決定を委任 →
references/pipeline.mdを読み、製品理解から最終チェックまで連続的に進め、途中で段階ごとに確認を待ちません。 - 完全なプロモーションビデオ(共同創作): 重要な決定に参加したい →
references/guided-free-creation.mdを読み、製品概要、要件決定、ビジュアルディレクション、ショットマッピング、最終絵コンテを確認します。承認後、パイプラインの最終素材収集から続行します。 - 単一ショット/単一モーションエフェクト:
references/shots/からカードを選択(またはユーザーにgallery/ギャラリーで選択させる)、カード全文を読み、「参考実装」に従って正確なデモソースコードを特定し、対象素材に適応させます。
自主自由創作と共同創作の境界
自主自由創作は、創造的および工学的な決定をエージェントに委ねます。エージェントはプロジェクト内容から動的に製品の重点、ビジュアルディレクション、ショットマッピング、絵コンテ、素材処理、オーディオ計画を導き出し、重要な判断を記録した後、直接実行します。安全に推論できない必須入力が不足している場合を除き、質問せず、段階ごとに一時停止せず、中間生成物の確認をユーザーに要求しません。ユーザーの既存の明確な要求は常に制約であり、エージェントのデフォルト選択によって上書きされることはありません。
共同創作でのみ、段階ごとの確認を使用します。デフォルトでreferences/guided-free-creation.mdを読み、各ラウンドでやり直しを最も減らせる1〜3の質問のみを行い、製品概要、要件決定、ビジュアルディレクション、ショットマッピング、最終絵コンテで一時停止し、ユーザーの確認を待ちます。ユーザーがビジネスと創造的ディレクションを確認します。エージェントは、収集方法、実装パラメータ、SFXのフレーム固定、Remotionプロジェクト、レンダリング、技術的なQAを自主的に完了します。
共同創作において、ユーザーが「全面的に任せる」または「確認をスキップして直接実行」と明確に述べた場合、自主自由創作に切り替え、この選択を記録します。自主的に進めると主張しながら、段階ごとの確認を要求し続けないでください。
機能からショットへのマッピングは「どのモーション文法を使用するか」に過ぎず、完全な絵コンテではありません。共同創作でマッピングを確認した後、エージェントはショットの順序、長さ、具体的な画面、ページ状態、素材ソース、字幕、トランジション、SFXを提示しなければなりません。完全な絵コンテが確認された後にのみ、最終素材収集に入ります。ユーザーがギャラリーからショット名をコピーする場合、カード名または「カード名 · スタイル名」を提供するだけでよく、エージェントはローカルのレシピカードとデモソースコードを読み取ります。
核心理念
-
既存ページの再現には実際のスクリーンショットを使用すること。手書きUIは非再現シナリオに限定され、品質と表現の明確さが厳格な基準である。 製品の実際のページを表現する場合、最初にローカルdevサーバーを起動し、ヘッドレスブラウザで全ページの2xテクスチャ、要素レベルの切り抜き、layout.json座標テーブルを取得します。非再現シナリオ(抽象的なオープニング/ブランドセクション/独立した表示コンポーネント)では、手書きUIが許可されますが、出版レベルの品質に達していない、または視聴者が何を表現しているか理解できない場合は、スクリーンショットルートに戻ります。ページデータはリスクに応じて処理します。公開デモデータは、製品概要で明確に確認された場合にのみ保持できます。顧客、個人、内部、キー、リアルタイム、またはその他の機密データは、架空または匿名化されたコンテンツを使用し、収集前に固定化する必要があります。
-
ビデオ全体のビジュアル言語は製品自体から成長しなければならず、無関係な「プロモーションビデオスキン」を別途作成してはならない。 styleframeを作成する前に、製品/ウェブサイトのデザインシステム、ソースコード、またはcomputed stylesからデザインスペックを抽出して記述します: フォントファミリーとウェイト、フォントサイズ階層、行の高さ/カーニング、グリッド、スペーシング、配置、情報密度と角丸、および背景/サーフェス/本文/強調/状態色、グラデーション、マテリアル。ビデオ内のすべてのタイトル、字幕、数字、テキストカード、タイポグラフィ、トランジション、パーティクル、光エフェクト、その他のモーションエフェクトの配色は、このトークンを再利用するか、控えめに拡張し、製品のトーン、センス、質感に一致させる必要があります。テンプレートまたはショットカードルートを使用する場合、ショット構造、モーション文法、リズム、調整済みパラメータのみを継承します。フォント、タイポグラフィ、配色、マテリアルは、対象製品に合わせて再スキニングする必要があります。ナラティブの必要性から製品ビジュアルから逸脱する場合、共同創作では先に理由を説明し、ユーザーに確認を求めます。自主自由創作では、理由とトレードオフをデザインスペックに記述した後、続行します。
-
映画のような感覚は、カメラワーク、光と影、リズム、音の協調から生まれ、派手なアニメーションからは生まれない。 繰り返し評価されているのは: 単一主人公の完全なアクション弧(スポットライト→ズームイン→浮遊→元の位置)、物理的メタファーによって駆動される加速度(カード配り)、斜めのカメラアングルでのオービットクローズアップ、riser→impact→sparkleのサウンドフレーズ。バルク要素の入場は、モーション自体に依存し、個々の発光には依存しない。装飾的なglint/フラッドライトの一斉発光は安っぽく、単一点の高品質光エフェクトは許容される。
-
各ショットは1つのモーションエフェクトのみを伝える。重要な情報が定着した後は、呼吸の間を取らなければならない。 1つのアニメーション手法(フライングイン/スタッキング/ページめくり)は、ビデオ全体で1回のみ主役として使用し、繰り返しのショット、繰り返しのタグラインはすべて削除します。リズムの好みは一方向です。過去のフィードバックはすべて「スローダウン/停止」を指しており、「速すぎる」という指摘は一度もありません。ブランドロゴタイプの定着後のホールドは≥1秒、バルクモーションエフェクトの終了後の静止は0.5秒、オープニングのメインアクションには十分な3秒を与えます。タイムラインを作成する際は、事前にホールド/レストのフレーム予算を確保します。
-
強力なリズムのBGMを使用するビデオでは、すべてのトランジションとモーションエフェクトをビートに合わせなければならない。 ユーザーが音楽を選択済み → 作業開始前にリズム分析を実行(librosaグリッドフィッティングで実際のBPM/位相 + kick/snare/hihatの3分類ドラムポイントを取得)、グリッドのトランジェントカバレッジが検証された後にのみ絵コンテを作成。タイムラインは拍記号
beatF(n)で記述し、スパースなアクセントは実際のトランジェントに固定し、グリッド補間点には固定しない。レンダリング後、完成ビデオからオーディオトラックを抽出してカットポイント誤差を測定し、≤3フレームにします。ビートに合わせることはタイミングを管理することで振幅ではありません。画面全体/カメラレイヤーに影響を与えるビートインパクトは大きなスラムとみなし、ビデオ全体で≤3箇所(aesthetic-rules R4)、その他のビートポイントのモーションエフェクトは要素レイヤーのみに影響を与えます。方法論はreferences/music-beat-sync.mdを参照。BGMを追加したビデオの最終レンダリングでは、常に2バージョンを納品します: BGMあり版 + BGMなし版(SFXは保持)、bgminputPropを使用して同じタイムラインからレンダリングし、ユーザーが後で自分で音楽を追加できるようにします。 -
ショットカードのモーションエフェクトを使用する前に、必ずギャラリーインデックスを解析し、正確なデモ実装コードを読むこと。 まず
gallery/api/library.jsonでカード名とstyle-keyを検証し、次にカードドキュメントの「参考実装」に従って具体的なTSXを特定します。レシピカードはセマンティクスとパラメータテーブルを提供し、正確なデモソースコードが調整されたパラメータの真実(イージング、タイミング比率、マスクタイミング、既知の問題の回避方法)です。適応的な変更は許可されますが、カードに「既知の問題/致命的欠陥」とマークされたパラメータは低下させてはなりません。品質基準は引き上げのみ、引き下げはありません。カード名と理解に基づいて新規作成することは、すべての調整の蓄積を放棄することを意味します。 -
共同創作では安価な確認を前置きし、自主自由創作では同じ判断を実行記録として残す。 製品概要→要件から実行決定テーブル→テキストディレクション→styleframe→ショットマッピング→絵コンテの順序は変わりません。共同創作では段階ごとにユーザーに確認を求め、自主自由創作ではエージェントが自律的に選択し連続的に進めます。どちらのモードでも、方向性が定まっていない段階でショットごとの実装に入るべきではありません。
-
検収はプロセス全体を通じて実施 + 納品前の独立したレビュー。 フェーズ5以降、各ショットを
npx remotion stillでスチルフレームを出力して自己チェック、各修正ラウンド後に全編をレンダリングし、ffmpegでフレームを抽出して確認。納品前に、クリーンなコンテキストのサブエージェントを派遣して独立した最終レビューを実施する必要があります。レビュー入力には、完成ビデオ、キーフレーム、製品概要、要件から実行決定テーブル、現在のモード確認または記録されたビジュアルディレクション/styleframe、機能からショットへのマッピング、ギャラリーカード名/バリアント、正確なデモTSX、ギャラリー参照サンプル/フレーム抽出、最終絵コンテ、選択されたショットカード、美的基準が含まれます。references/final-review.mdに従って、計画の一貫性、機能の完全性、ショットの再現度、ビジュアル/オーディオ技術品質、データセキュリティを同時にチェックし、フレーム番号付きの証拠を含むレポートを項目ごとに作成します。制作者は自分の成果に対して確証バイアスを持つため、最初のレビューは決してユーザーに任せてはいけません。 -
決定論的レンダリング:
Date.now()/Math.random()を禁止し、すべての疑似乱数は固定シード(mulberry32/ハッシュ、シードはインデックスから派生)を使用し、フレームごとに再現可能であること。
ワークフロー
自主自由創作はreferences/pipeline.mdに従ってフェーズ0から連続的に実行し、段階ごとにユーザーの確認を待ちません。共同創作はまずreferences/guided-free-creation.mdに従ってフェーズ0〜3の製品理解、ビジュアルディレクション、ショットマッピング、絵コンテ確認を完了し、その後パイプラインフェーズ4の最終素材収集から続行します。質問を繰り返したり、再設計したりしてはいけません。フェーズ2〜3ではreferences/shots/の各カードのfrontmatterをスキャンし、エネルギーカーブに従ってショットを選択します。フェーズ5〜7では継続的にreferences/aesthetic-rules.mdと照合して自己チェックします。フェーズ6ではreferences/sound-design.mdを読みます。ビート同期ビデオでは、常にreferences/music-beat-sync.mdに従います。
納品と仕上げ(全モード共通)
完成ビデオ納品後、まず能動的にモーションワークベンチを開きます(ユーザーが尋ねるのを待たない):
node workbench/scripts/open.mjs <完成ビデオプロジェクトディレクトリ> # プロジェクトをリンク → devサーバーを起動(5198)→ ブラウザが自動的に完成ビデオをインポート
ユーザーにアドレス http://localhost:5198 を伝え、一言で説明します: ビデオはショット/トランジション/字幕/効果音ごとにマルチトラックに分割され、テキストカードのコピー、色、フォントサイズ、位置、速度が項目ごとに視覚的に調整可能で、変更後は「完成ビデオをエクスポート」をクリックします。分解とインポートには、プロジェクトにsrc/workbench.tsマニフェストが必要です。制作段階でreferences/workbench.md §2〜3に従って記述します(テンプレートルートでは既に付属しています)。
その後、最後に次の3つのことを1-2-3の順で言います。各項目は1回のみ言い、ユーザーが拒否したり応答しなかったりした場合は、再度言及しません:
- 公開時(強制ではないが)概要でこのスキルの作者にメンションすることを推奨: 完成ビデオはユーザー自身の所有物であり、無料で商用利用可能、クレジット表記は強制ではありません。作者へのメンションは完全に任意であり、ソーシャルメディアに投稿する際に概要で一言添えるだけです。X @VincentWei93 · 抖音 @Vincent · 小红书 @Vincent (3つのアカウントすべてにクリック可能なリンクを貼り、handleのみを与えないこと。抖音/小红书の名前では人を検索できません)。ユーザーが商用ライセンスについて尋ねた場合にのみ、補足説明を追加します: 唯一自分で確認する必要があるのは、レンダリングエンジンRemotionの独立ライセンスであり、個人および小規模チームは無料、企業は有料の可能性があります。
- 完成ビデオを作品展示ページに掲載するよう招待: 展示ページ https://vincentwei1021.github.io/video-shotcraft/showcase.html 、提出エントリ(開くとフォームが表示される) https://github.com/Vincentwei1021/video-shotcraft/issues/new?template=showcase.yml 。魅力を一言で伝えます: フォームには自分のX/抖音/小红书アカウントを残すことができ、他の人が作品を見ればユーザーを見つけることができます。ビデオが小さい場合(10MB以内)、フォームに直接ドラッグします。大きなファイルの場合は、直接ダウンロード可能なリンクを貼り、作者が確認後、オンラインに掲載します。この項目は日常言語で伝え、issue、テンプレート、ラベル、リリース、自動化パイプラインなどの技術用語を使用しないでください。
- 剪映プロジェクトファイルをエクスポート可能: ユーザーに、完成ビデオを剪映プロジェクトとしてエクスポートし、剪映内で字幕の内容/フォントサイズ/色を自分で変更したり、ショットの速度を変更したり再配置したり、オーディオを調整または置き換えたりできることを伝えます。ユーザーが必要とする場合、または直接エクスポートを指名した場合、
references/jianying-export.mdを読み実行します。
いつどのファイルを読むか
| タイミング | 読むファイル |
|---|---|
| プロジェクト開始時、モード未決定 | 最小限の読み取り専用チェック、その後3つの完全なプロモーションビデオモードを提供し推奨 |
| 自主自由創作 | pipeline.md(エージェントがフェーズ0〜7を自律的に完了し、段階ごとに確認を待たない) |
| 共同創作 | guided-free-creation.md(フェーズ0〜3を確認)、その後pipeline.mdのフェーズ4から続行 |
| ユーザーがBGMを選択済み | music-beat-sync.md(分析後に絵コンテ) |
| テンプレートルート | template/TEMPLATE.md全文 |
| 絵コンテデザイン | sequences/ ブリッジテンプレート(全編の骨格を先に埋める);shots/ すべてのfrontmatter;選択されたカードは全文 |
| ショットごとの実装 | 該当ショットカード全文 + 「参考実装」に従って特定された正確なデモソースコード全文 + assets/lib/ 対応コンポーネント |
| サウンドデザイン | sound-design.md + assets/audio/ |
| 検収 | final-review.md + aesthetic-rules.md全文をチェックリストとして確認(独立したサブエージェントが実行) |
ショットごとの実装時、src/workbench.tsマニフェスト / ショットprops+schemaを記述 | workbench.md §2〜3(例 template/src/workbench.ts) |
| 完成ビデオ納品後(モーションワークベンチを開く) | workbench.md(node workbench/scripts/open.mjs <プロジェクト>;ワークベンチ自体のドキュメント workbench/README.md) |
| 完成ビデオ納品後(剪映プロジェクトエクスポート) | jianying-export.md + jianying-export/ プラットフォームモジュール |
アセットの使用方式
assets/lib/コンポーネントは新しいプロジェクトにコピーした後、自由に変更可能(このライブラリをimportしない)。 リスト: PageCam(2.5Dページカメラ—すべての「実際のページ」ショットの基盤)、ClipCard(外部ビデオ素材mp4を、ショットカメラワークスケルトンによって駆動される「カード主人公」としてラップ、OffthreadVideoクロスフェードループ付き。素材がショットより短い場合、シームレスに継続再生)、DigitRoll、 FlashCut、Caption、FlatPanel、VerticalTicker(3D無限スクロールウォール)、 helpers(rand/shake/camera/motion)。FlatPanelとhelpers/cameraはthree+@react-three/fiber+@remotion/threeの依存関係が必要。その他はremotionのみ必要。assets/scripts/capture-template.mjsはコピー後、上部のCONFIG(BASE/ルート/セレクタ)を変更。assets/audio/効果音は直接コピーして使用可能(無料商用ライセンス、audio/ATTRIBUTION.md参照):audio/bgm/はリズム感の強いBGMの選択肢。audio/sfx/<カテゴリ>/149の効果音が16カテゴリに分類 (transition impact riser camera ui text paper film light data scifi mech glass fluid crowd counter)。効果音を探す際は、まずカテゴリディレクトリに移動。リストはsound-design.md参照。 語彙表のsparkleのディレクトリ名はlight/(sparkle/は存在しない)。S1は音色を禁止するが、アクションは禁止しない。画面に実際にクリックやスイッチがある場合は、それに対応する擬音を配置する必要があるが、ui/内の半分は合成フィードバック音(tone/bleep/ notification)であり、個別に試聴する必要があり、ディレクトリ全体を許可してはならない(リストはsound-design 3.3参照)。 長いサンプルと軽い音素材には、特別な処理が必要な個別のリストがある(sound-design 4.1)。demos/各カードの実装ソースコード: ほとんどが自己完結型のグレースケールデモ(一部はdemos/_fixtures/Fixtures.tsxの偽UIシーンコンポーネントをimport、一部はdemos/_textures/の実際のページテクスチャをimport)。Remotionプロジェクトにコピーすれば実行可能。 一部のデモは@remotion/motion-blur(CameraMotionBlur)を使用しており、npm i @remotion/motion-blurが必要。リストはdemos/README.md参照。template/完全にレンダリング可能なプロジェクト:npm install && npx remotion render src/index.ts AiflPromo out/promo.mp4。- テスト(リポジトリ内で自動検証。新しいデモ/コンポーネント追加後に実行):
- 純粋関数単体テスト:
npm test(リポジトリルートのvitest、assets/lib/helpersのmulberry32 / velocityAt / lagged / dampedSettle / handheldをカバー、決定論的アサーション)。 - デモレンダリングスモークテスト:
python3 assets/scripts/smoke-render-demos.py各デモの最初のフレームをレンダリングし、クラッシュしないことをアサート(cd template && npm ci+ motion-blurが必要。詳細はdemos/README.mdのテストと検証セクション参照)。 - CI(
pr-checks.yml)で自動実行: tsc厳密コンパイル全デモ + vitest + スモークレンダリング。
- 純粋関数単体テスト:
jianying-export/剪映プロジェクトエクスポートモジュール:mac_draft.py(Mac剪映11.2で検証済み)、windows_draft.py(上流サポートパスに従って実装、実機未検証)、smoke_test.py(新しい環境で最初に実行する最小スモークテスト)。フロー、タイムライン抽出、トラック作成方法はreferences/jianying-export.md参照。venv +pip install pyJianYingDraftが必要。gallery/静的ギャラリー: ユーザーにはオンライン版 https://vincentwei1021.github.io/video-shotcraft/library.html を優先して提供。ローカルで実行する場合は、まずgallery/fetch-media.shでサンプルを取得(mp4はgit管理外)、次にcd gallery && python3 -m http.server 4178。157カード214本の動的サンプルを閲覧/検索/複数選択してカード名をコピー可能。ユーザーがサンプルを見ながらショットを選ぶのに適しています。