Communitygithub.com

karmazin/simreel

将真实的 iOS 模拟器录制内容转换为 9:16 的宣传短片和 App Store 预览视频。当用户需要 iOS 应用的上线视频、推广短片、演示视频或 App Store 预览时使用。

simreel 是什么?

SimReel 是一款本地化开发工具,能够在 iOS 模拟器中录制真实应用操作,并自动生成两种视频格式:针对社交媒体(如 X、Instagram Reels、TikTok、Product Hunt)的 9:16 手机机身渐变背景视频,以及符合 App Store Connect 规格的纯录制预览视频。用户只需通过 `record.sh` 脚本录制应用操作,然后利用 `compose.py` 脚本生成联系表来标记关键场景,并定义一个包含场景起止时间、速度、字幕和背景配置的 `storyboard.json` 文件,最后执行渲染即可得到最终视频。该工具完全依赖本地环境运行(macOS、Xcode、ffmpeg 和 Python3),无需任何账户或付费 API。它强调数据隐私保护,要求仅使用干净的模拟器,避免显示私人信息,并建议在交付前逐帧检查字幕与画面匹配。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/karmazin/simreel/tree/HEAD/skills/simreel

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

simreel 是做什么的?

在 iOS 模拟器中录制用户的真实应用,并将其裁剪为两个文件:

  • 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. 录制一次。
    scripts/record.sh start work/raw.mp4 <UDID>
    # 驱动应用:用户自己的模拟器工具、项目中的 XCUITest,或要求用户手动点击
    scripts/record.sh stop <UDID>
    
    在每个想要保留的屏幕上停留约一秒。如果模拟器启动后点击立即失败,等待 20 秒再重试。
  4. 检查录制内容。 文件在最后一次画面变化时结束,因此静止的最终屏幕会被截断,从未变化的场景录制几乎是空的。根据文件时间(而非记忆)来安排场景。
    python3 scripts/compose.py frames work/raw.mp4 work
    
    打开 work/contact-sheet.png:每行 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 可接受一种颜色或从上到下的渐变;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. 交付前检查。 从每个场景中提取一帧(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 秒,30 fps,H.264 High 4.0,立体声 AAC)来自 Apple 的 应用预览规范。如果上传被拒绝,请参考该页面。
  • 音轨为静音。如需声音,可在编辑器中添加音乐或语音。

相关技能