Communitygithub.com

karmazin/simreel

실제 iOS 시뮬레이터 녹화를 9:16 런치 릴과 앱 스토어 프리뷰 동영상으로 변환합니다. 사용자가 iOS 앱의 런치 비디오, 프로모 릴, 데모 비디오 또는 앱 스토어 프리뷰를 요청할 때 사용하세요.

simreel란 무엇인가요?

SimReel은 iOS 시뮬레이터에서 실행 중인 실제 앱을 녹화하여 소셜 미디어 홍보용 'reel-1080x1920.mp4'(휴대폰 프레임과 캡션이 포함된 9:16 비디오)와 'appstore-preview-886x1920.mp4'(앱 스토어 커넥트 제출용 인코딩된 파일) 두 가지 파일로 자동 변환하는 기술입니다. 개발자는 Xcode와 ffmpeg만 있으면 로컬에서 실행할 수 있으며, 별도의 계정이나 유료 API가 필요하지 않습니다. 이 기술은 녹화된 프레임을 분석하여 타임라인 기반의 스토리보드(storyboard.json)를 작성하고, 각 장면에 캡션과 속도 조절, 홀드 기능을 적용하여 15~30초 길이의 앱 스토어 프리뷰를 생성합니다. 개인정보 보호와 정확한 앱 기능 표현을 강조하며, 시뮬레이터 상태 표시줄을 9:41로 설정하고 오디오 트랙은 무음으로 생성됩니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/karmazin/simreel/tree/HEAD/skills/simreel

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

simreel은(는) 무엇을 하나요?

사용자의 실제 앱을 iOS 시뮬레이터에서 녹화하여 두 개의 파일로 자릅니다:

  • reel-1080x1920.mp4: 그라데이션 배경 위에 휴대폰 본체 안에 담긴 녹화 영상, 장면별 캡션, 엔드 카드 포함. X, Reels, TikTok, Product Hunt 용도.
  • appstore-preview-886x1920.mp4: 일반 녹화 영상, App Store Connect에 맞게 크기 및 인코딩.

모든 작업은 Xcode와 ffmpeg를 사용하여 로컬에서 실행됩니다. 계정이나 유료 API가 필요하지 않습니다.

규칙

  • 앱이 실제로 하는 일만 보여줍니다. 캡션은 화면에 보이는 내용을 설명하며, 영상에 보이지 않는 주장, 숫자 또는 리뷰를 추가하지 않습니다.
  • 프레임 밖의 개인 데이터를 배제합니다. 새로운 시뮬레이터나 데모 데이터를 사용하고, 전달하기 전에 프레임을 확인합니다.
  • 지시받은 시뮬레이터만 조작합니다. 부팅된 다른 시뮬레이터는 다른 사람의 작업에 속할 수 있으므로, 둘 이상 실행 중일 때는 booted를 절대 사용하지 않습니다.
  • 사용자가 달리 말하지 않는 한 녹화 중 추적 및 쿠키 프롬프트를 거부합니다.

단계

  1. 시뮬레이터 찾기. xcrun simctl list devices booted. 앱이 설치되어 있지 않으면 사용자 자신의 도구를 사용하여 빌드 및 설치합니다.
  2. 녹화 없이 앱 한 번 살펴보기. 주요 기능을 보여주는 3~5개의 순간을 선택합니다. 지금 온보딩, 권한 및 쿠키 대화상자를 제거하여 녹화에 포함되지 않도록 합니다.
  3. 한 번 녹화합니다.
    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 열기: 행당 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로 초기화합니다.
  • 여기서 사용된 앱 스토어 프리뷰 수치(886x1920, 15~30초, 30fps, H.264 High 4.0, 스테레오 AAC)는 Apple의 앱 프리뷰 사양에서 가져왔습니다. 업로드가 거부되면 해당 페이지를 확인하세요.
  • 오디오 트랙은 무음입니다. 사운드가 필요하면 편집기에서 음악이나 음성을 추가하세요.

관련 스킬