Communitygithub.com

zriptic/roclicks-skills

Robloxゲームのゲームプレイトレーラーを、エンドツーエンドで作成します。GAME.mdからショットリストを計画し、Studioのプレイテストで人間が操作しているようにキャラクターを動かし、映画のようなカメラワークを追加し、録画・編集を行い、Robloxアップロード用とShort/TikTok用の複数のバージョンを出力します。

roclicks-skills とは?

このスキルは、Robloxゲームのプロモーショントレーラーやゲームプレイ動画を、エンドツーエンドで自動生成するものです。GAME.mdからショット構成を計画し、Studioプレイテスト内でキャラクターを自律走行させ(TrailerDriver.luau)、シネマティックなカメラワーク(CameraRig.luau)を適用し、macOSのスクリーンキャプチャで録画、ffmpegで編集します。出力はRobloxビデオサムネイル用の30秒・1920x1080カットと、9:16のShort/TikTokカットの2種類を生成し、コンタクトシートによるQAも行います。Claude Code環境で、MCP経由でStudioと連携しながら動作するため、ユーザーが「トレーラーを作って」「録画して」「編集して」などと依頼した際に使用します。

対応~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/zriptic/roclicks-skills/tree/HEAD/roblox-trailer

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

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

ドキュメント

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.mdshots.jsonの記述時;ドライバーとリグのAPI、ターゲット、アクション、トリガー、プリセット
references/recording.md最初のテイクの前;キャリブレーション、同期、フォールバック、2プレイヤーショット
references/editing.md編集ブロック、トランジション、カード、フォントと絵文字、オーディオ、縦長
references/roblox-video-specs.mdRobloxのアップロード制限とコンテンツルール(ソース付き)
references/worked-example.md + example.shots.json完全な実例(ペット孵化ロールゲーム「🥚 Pet Roll」)

スクリプト

スクリプト目的
scripts/TrailerDriver.luau、scripts/CameraRig.luauランタイム(クライアント)
scripts/build_kit.pyrbxmxキット、評価スニペット、インラインペイロードフォールバック、サーバースニペット、ショットリスト
scripts/record.py(record.sh ラッパー)Windows、キャリブレーション、ショット、ステッチ、クリーン
scripts/edit.pyカットのビルド、カードのプレビュー、フォントのリスト表示
scripts/qa.pyクリップと最終チェック、コンタクトシート
scripts/check_luau.shRobloxグローバルプロローグを使用した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 させるようにしてください。パターン:TrailerHook Script(トレーラー専用、プレイスに保存しない)がゲーム自身のモジュールをゲームのサーバー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が失われます。

Individual skills in this repo

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

関連スキル