Communitygithub.com

karmazin/simreel

iOSシミュレーターの実際の録画から、9:16のローンチリールとApp Storeプレビュー動画を作成します。ユーザーが起動動画、プロモリール、デモ動画、またはiOSアプリのApp Storeプレビューを依頼したときに使用します。

simreel とは?

SimReelは、iOSシミュレーターで動作しているアプリを実際に録画し、ソーシャルメディアやApp Store Connect向けに最適化された2つの動画ファイルを自動生成するAIエージェントスキルです。`reel-1080x1920.mp4`は、端末の筐体を重ねたグラデーション背景、各シーンのキャプション、エンドカードを含む、X(旧Twitter)、Reels、TikTok、Product Hunt向けの縦型動画です。`appstore-preview-886x1920.mp4`は、App Store Connectの仕様に合わせてサイズ・エンコードされたプレーンな録画です。Xcodeとffmpegのみで動作し、外部サービスや有料APIは不要です。このスキルは、シミュレーターの検出、録画の開始・停止、タイムスタンプ付きのストーリーボードJSONの作成、動画のレンダリングという一連のステップを提供します。Claude CodeやCursorなどのAIエージェント上で動作し、開発者が実際のアプリ動作を元にしたプロモーション動画を迅速に作成するのを支援します。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/karmazin/simreel/tree/HEAD/skills/simreel

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

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

ドキュメント

simreel は何をしますか?

ユーザーのiOSシミュレーターで実際のアプリを録画し、2つのファイルに書き出します。

  • reel-1080x1920.mp4: 端末の筐体を重ねたグラデーション背景、各シーンにキャプション、エンドカード付きの録画。X、Reels、TikTok、Product Hunt向け。
  • appstore-preview-886x1920.mp4: プレーンな録画で、App Store Connect向けにサイズ・エンコード済み。

すべてXcodeとffmpegでローカル実行します。アカウント登録不要、有料API不要。

ルール

  • アプリが実際に行っていることだけを表示すること。キャプションは画面に表示されている内容を説明し、映像にない主張、数字、レビューは決して追加しないこと。
  • 個人データをフレーム内に入れないこと。新しいシミュレーターかデモデータを使用し、納品前に各フレームを確認すること。
  • 操作指示があったシミュレーターのみを操作すること。他の起動中のシミュレーターは別の作業に使用されている可能性があるため、複数起動している場合は絶対にbootedを指定しないこと。
  • 特にユーザーから指示がない限り、録画中はトラッキングやCookieのプロンプトを拒否すること。

手順

  1. シミュレーターを見つける。 xcrun simctl list devices booted。アプリがインストールされていない場合は、ユーザーのツールを使ってビルド・インストールする。
  2. 録画せずに一度アプリを操作する。 主要な機能を示す3~5つの瞬間を選ぶ。オンボーディング、許可、Cookieのダイアログは今のうちに閉じて、本番録画に残らないようにする。
  3. 本番録画を1回行う。
    scripts/record.sh start work/raw.mp4 <UDID>
    # アプリを操作: シミュレーターツール、プロジェクト内のXCUITest、またはユーザーにタップ操作を依頼
    scripts/record.sh stop <UDID>
    
    残したい画面では約1秒間停止すること。シミュレーター起動直後にタップが失敗する場合は、20秒待ってから再試行する。
  4. 録画を読み取る。 ファイルは最後の画面変更点で終了するため、静止した最終画面はカットされ、変更のない画面だけのテイクはほぼ空になる。シーンのタイミングは記憶ではなくファイルを基準にすること。
    python3 scripts/compose.py frames work/raw.mp4 work
    
    work/contact-sheet.pngを開く: 1行8コマ、コマNは秒N。
  5. storyboard.jsonを書く。
    {
      "app_name": "MyApp",
      "background": ["#0B1020", "#3B2AA8"],
      "scenes": [
        {"start": 0.3, "end": 5.8, "caption": "この画面の機能"},
        {"start": 8.0, "end": 10.0, "speed": 0.8, "caption": "次のステップ"}
      ],
      "end_card": {"title": "MyApp", "subtitle": "アプリのタグライン"}
    }
    
    startとendは録画内の秒数。speedが1未満でシーンがスローに、1超で早送りに。holdでシーンの最終フレームをその秒数だけ静止表示(結果画面をじっくり見せたい場合に使用)。backgroundは1色または上から下へのグラデーション。text_colorとcaption_sizeは省略可能。エンドカードが不要ならend_cardを省略すると最終シーンで終了。ローディングスピナーはカットすること。シーンの合計時間は15~30秒に収めないとApp Store Connectがプレビューを拒否する。
  6. レンダリングする。
    python3 scripts/compose.py render work/raw.mp4 storyboard.json out
    
    プレビュー時間が範囲外だと警告が表示され、out/report.jsonが出力される。
  7. 納品前に確認する。 各シーンから1フレームを抽出し(ffmpeg -ss <t> -i out/reel-1080x1920.mp4 -frames:v 1 f.png)、キャプションと画面が一致しているか、プライベート情報やカット漏れがないかを確認する。

補足

  • 必要条件: macOS、Xcode(simctlとswift用)、ffmpeg、python3。
  • record.shはステータスバーを9:41、フルバッテリー、フル電波に設定します。後片付けにはxcrun simctl status_bar <UDID> clearを実行してください。
  • ここで使用しているApp Storeプレビューの数値(886x1920、15~30秒、30fps、H.264 High 4.0、ステレオAAC)はAppleのアプリプレビュー仕様に基づいています。アップロードが拒否された場合はそのページを確認してください。
  • 音声トラックは無音です。必要に応じて編集ソフトで音楽やナレーションを追加してください。

関連スキル