Roblox トレーラー
SK=<このスキルフォルダへのパス>。このスキルが作られたブリーフ: 「録画して、自分がプレイしているように見せて、編集もして。」
各ゲームごとのデータは <game>/trailer/ に置きます: shots.json、clips/、out/。スクリプトは汎用的で、ゲーム固有の名前(タグ、リモート、プロンプトテキスト、アイテムID)はすべて shots.json に記述します。
基本ルール(最初に読むこと)
- 実際のユーザー画面を録画します。 録画前に、チャットでユーザーにStudioを前面に表示し、カバーを外し、マウスをゲームビューの外に置き、完了と言うまでコンピュータに触れないよう伝え、同意を得てください。キャリブレーションしたビューポート領域のみを録画します。テストテイクや不要なテイクは
record.py cleanで削除してください。-C(カーソル)は使用しないでください。 - Studioエチケット: このスキルでは1つのStudio MCPサーバーを使用します(コミュニティの
robloxstudioサーバーに対して記述されており、ビルトインの Roblox_Studio サーバーではありません)。プレイテストを開始する前に、他のエージェントがStudioを使用していないことを確認してください。キットは編集モードでインポートし、使用後は削除し、キットを保存したままプレイスを保存しないでください。 - 誠実さ: Robloxは、ゲームにない機能、拡張グラフィック、広告主張を示す動画を拒否します。カメラ上で どの 実際の結果が発生するかを演出する(テイクの確率を強制する、アイテムを付与する)ことは問題ありません。ゲームができないことを偽造することは許可されていません。その場合は代わりにショットを再構成してください(例のGold→Rainbowモンタージュを参照)。
- コンピューター使用はなし。 すべてMCP評価呼び出し、Python、ffmpegを経由して行われます。
- カードとテキストは控えめに(「ノイズのないテーマ」: ツールに余計なノイズを加えない)。ゲーム自身のUIが最良のテキストです。
ワークフロー
1. 計画
references/shot-list-template.md を読んでください。ゲームの GAME.md、FINISHED.md、ソースコードから、ショットテーブル(最初の2〜3秒でフック、コアループ、レアな瞬間、ソーシャル、ベース/進行、追加システム、タイトルカード、ソーシャル専用のCTA)を作成し、録画前にユーザーに提示します。その後、<game>/trailer/shots.json を記述します(スキーマは references/luau-api.md にあります。assets/shots.template.json から開始するか、完全な例として references/example.shots.json を参照してください)。python3 $SK/scripts/build_kit.py list --shots <shots.json> で生のフッテージの合計時間を確認します。
2. ゲームプレイ視点とシネマティックショット(Luau)
scripts/TrailerDriver.luauは、プレイテストクライアント上で1つのショットを実行します:開始位置にテレポートし、キーボードコントロールを無効にし、ウェイポイントを歩き(Humanoid:MoveTo、経路探索、ジャンプ、人間的なジッター)、ターゲットの方向を向き、ProximityPrompt(InputHoldBegin/End)を押し、リモートやバインダブルを呼び出し、キューやゲームイベントに応じてカメラを切り替えます。プレイヤーカメラは、マウスのようなドリフト、震え、一瞥を伴う遅延フォローです。ゲームHUDはゲームプレイショットではオン、シネマティックではオフになります。Robloxのトップバー、CoreGui、カーソルは常にオフです。各実行は最初に前の実行を停止し、その後すべてを元に戻します。scripts/CameraRig.luauはシネマティックプリセットを持っています:ドリー/スプライン/フライオーバー、ベジェ、オービット、クレーン、プッシュイン、ウィップ(モーションブラー付き)、静止画。すべてTweenServiceカーブでイージングされ、設定可能な持続時間を持ちます。- これらを導入するには:
build_kit.py rbxmx→import_rbxmをReplicatedStorageに(編集モード) → プレイテストを開始 →build_kit.py call --shot IDをeval_client_runtimeで送信します。ショットにセットアップがある場合は、最初にbuild_kit.py server --shot IDをeval_server_runtimeで実行します。詳細と完全なアクションリストはreferences/luau-api.mdを参照してください。
3. 録画
references/recording.md を参照してください。簡潔に:record.py calibrate を一度実行します(ドライバーがビューポートをシアンに塗り、スクリプトがその位置を見つけます)。その後、各ショットに対して record.py shot ID --start-ms <startsAtMs> --dur <dur> を実行します。ドライバーのスケジュールされた開始を待ち、プリロール+ショット+テールをビューポートのみ録画し、正確なトリムオフセットを保存します。画面録画が利用できない場合は、record.py stitch で保存された capture_screenshot フレームをクリップに変換します。
4. 編集
references/editing.md を参照してください。edit.py build --cut roblox --format landscape でRobloxアップロード用(最大30秒、1080p60 H.264、CTAなし)を作成します。--cut social --format both で16:9と9:16の両方を作成します。テキストはPillowで描画されます(Homebrewのffmpegにはdrawtextがない可能性があるため)。Fredoka Oneがインストールされていない場合は、assets/fonts/ にダウンロードする前に確認を求めます。フォールバックとしてArial Rounded Boldを使用します。
5. QA
録画後、qa.py clips --shots ... を実行します。編集後、qa.py final <mp4> --roblox を実行します。ドロップフレーム、黒フレーム、フリーズフレーム、Studio UIの端の帯、カーソルフラグ、Roblox制限をチェックし、コンタクトシートを書き出します。Readでシートを開いて確認してください:余分なStudioパネル、カーソル、間違ったHUD状態がここに表示されます。その後、ユーザーにカット(パスとシート)を見せ、リカットのためのメモを取りましょう。リカットには edit.py のみが必要です。
6. クリーンアップ
プレイテストを停止し、ReplicatedStorage.TrailerKit を削除し、record.py clean --out <trailer> --shots <shots.json> を実行し、<trailer>/build/ を削除します。clips/(ソースフッテージ)と out/ は保持します。
リファレンスマップ
| ファイル | 読むタイミング |
|---|---|
references/shot-list-template.md | 計画時;GAME.mdをショットに変換する |
references/luau-api.md | shots.jsonの記述時;ドライバーとリグのAPI、ターゲット、アクション、トリガー、プリセット |
references/recording.md | 最初のテイクの前;キャリブレーション、同期、フォールバック、2プレイヤーショット |
references/editing.md | 編集ブロック、トランジション、カード、フォントと絵文字、オーディオ、縦長 |
references/roblox-video-specs.md | Robloxのアップロード制限とコンテンツルール(ソース付き) |
references/worked-example.md + example.shots.json | 完全な実例(ペット孵化ロールゲーム「🥚 Pet Roll」) |
スクリプト
| スクリプト | 目的 |
|---|---|
scripts/TrailerDriver.luau、scripts/CameraRig.luau | ランタイム(クライアント) |
scripts/build_kit.py | rbxmxキット、評価スニペット、インラインペイロードフォールバック、サーバースニペット、ショットリスト |
scripts/record.py(record.sh ラッパー) | Windows、キャリブレーション、ショット、ステッチ、クリーン |
scripts/edit.py | カットのビルド、カードのプレビュー、フォントのリスト表示 |
scripts/qa.py | クリップと最終チェック、コンタクトシート |
scripts/check_luau.sh | Robloxグローバルプロローグを使用したluau-analyze(Roblox型定義がインストールされていなくても動作) |
スクリプト変更後の検証:python3 -m py_compile $SK/scripts/*.py および $SK/scripts/check_luau.sh $SK/scripts/*.luau。
既知のギャップ(遭遇したらここを修正してください)
- ドライバーはGUIボタンをクリックできません。ボタンが呼び出すリモートを使用してください(
invoke)。ハッチショットのように。 - タグからの固定
localOffsetは最初の推測です。各ショットの最初のテイク後に調整することを想定してください。 - プレイヤーカメラはマウスホイールズームをモデル化しません。
look.distを使用してビート間の距離を変更してください。 - サーバーセットアップはライブゲームモジュールを
requireできません:execute_luau/eval_server_runtime は新しい require キャッシュを取得します(2026-10-11にペット孵化ゲームで測定:プレイヤーがロードされている間、PlayerState.all()が空でした)。セットアップは、キットの隣にインポートされた RunContext=Server の Script に配置し、BindableFunction を公開し、serverスニペットで:Invokeさせるようにしてください。パターン:TrailerHookScript(トレーラー専用、プレイスに保存しない)がゲーム自身のモジュールをゲームのサーバーVM内からrequireし、ServerStorage.TrailerHook(BindableFunction、:Invoke(cmd, args) -> (ok, result))を作成します。セットアップステップごとに1つの小さなコマンド(キャッシュを与える、特定のティアのアイテムを追加する、タイマーを準備する、次のロールのオッズを強制する、restore)を持ちます。変更したすべての設定値を保存し、restore時およびScriptが破棄されたときに復元します。build_kit.pyがキットをパッケージ化するのと同じ方法で.rbxmxにパッケージ化します。 - Studioのビューポート(Explorer/Propertiesがドッキングされている場合)は、1470x956 ptの画面で約1.26:1です。キャリブレーション前にパネルを非表示にするか(表示 > 全画面表示)、16:9のトリミングで画像の3分の1が失われます。