Communitygithub.com

nathankim0/app-demo-recorder

안드로이드 에뮬레이터나 iOS 시뮬레이터에서 실행 중인 모바일 앱의 깔끔하고 빠른 데모 클립을 녹화하여 광고, 스토어 미리보기, 소셜 게시물, 또는 화면 녹화를 입력으로 받는 AI 비디오 도구에 사용할 수 있도록 합니다.

app-demo-recorder란 무엇인가요?

App Demo Recorder는 안드로이드 에뮬레이터 또는 iOS 시뮬레이터에서 실행 중인 모바일 앱의 데모 영상을 전문적으로 녹화하는 기술 스킬입니다. 사용자가 '앱 녹화', '앱 영상 찍어줘', 'demo video of the app' 등으로 요청할 때 활성화되며, 각 기능별로 하나의 클립을 녹화하고 불필요한 로딩 시간, 디버그 오버레이, 광고 등을 제거합니다. 이 스킬은 ffmpeg, adb (Android), xcrun simctl (iOS) 명령어를 활용하며, 호스트 측에서 녹화를 수행하여 기기 내 녹화로 인한 UI 프리징을 방지합니다. 주요 특징으로는 빌드 선택 지원, 깔끔한 상태 표시줄 설정, 데드 타임 제거(tighten), 1프레임 단위 클립 검증(strip) 등을 포함하며, 샌드박스 환경에서는 상승된 권한으로 실행해야 합니다. 마케팅 영상 제작, 스토어 미리보기, 소셜 미디어 게시물 등 전문적인 앱 데모 제작에 최적화되어 있으며, 자동화된 테스트 실행이나 완성된 비디오 편집에는 사용되지 않습니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/nathankim0/app-demo-recorder/tree/HEAD/skills/app-demo-recorder

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

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

문서

앱 데모 레코더

누군가가 앱을 자신 있게 사용하는 것처럼 보이는 짧은 화면 녹화본을 만듭니다: 기능별로 하나의 클립, 로딩 지연 없음, 디버그 오버레이 없음, 광고 없음, 깔끔한 상태 표시줄.

$S는 이 스킬 디렉토리의 scripts/appdemo.sh입니다. ffmpeg (brew install ffmpeg), 그리고 Android용 adb 또는 iOS용 Xcode의 xcrun simctl이 필요합니다. 샌드박스 에이전트에서는 상승된 권한으로 실행해야 합니다: 에뮬레이터, 시뮬레이터와 통신하고 작업 공간 외부에 파일을 씁니다.

1. 보여줄 내용 합의

  • 사용자가 명확히 말하지 않은 경우 어떤 기능을 보여줄지 물어보십시오. 기능별로 하나의 클립을 녹화하고 클립 이름을 NN_feature (01_price_search, 02_calculator) 형식으로 지정하십시오. 앱이 열리는 첫 화면이 아니라, 제품이 가장 잘하는 기능으로 시작하십시오.
  • 명확하지 않은 경우 어떤 빌드와 계정을 사용할지 물어보십시오. 마케팅 영상은 일반적으로 실제 데이터가 있는 프로덕션 릴리스 빌드가 필요합니다. 디버그/스테이징 빌드는 개발 메뉴, 경고 토스트, 테스트 데이터를 보여주고 더 느리게 실행됩니다. 추측하지 마십시오; 스테이징 녹화는 대개 다시 해야 합니다.
  • 클립에 유료 또는 프리미엄 상태가 필요한 경우, 실제 결제를 건드리기 전에 앱에서 디버그/개발자 오버라이드를 찾아보십시오.
  • 사용자가 제공한 자격 증명: 모든 명령어를 기록하는 도구를 사용하지 말고, 출력을 버리는 명령어(Android의 경우 adb shell input text ... >/dev/null, iOS의 경우 printf ... | xcrun simctl pbcopy <udid> 후 붙여넣기)로 입력하고, 파일에 기록하지 마십시오.

2. 기기를 빠르고 조용하게 만들기

  • Android 에뮬레이터: 리소스를 할당하십시오. 작은 AVD는 화면에서 버벅거리고 그 버벅거림이 클립에 남습니다. emulator -avd <name> -memory 6144 -cores 4 -gpu host -no-snapshot-save -no-boot-anim 동일한 앱 ID가 다른 서명 키로 이미 설치된 경우, 제거하지 말고 다른 AVD를 사용하십시오(제거는 사용자 데이터를 삭제합니다).
  • 릴리스 빌드를 설치하고 실행하고; 로그인; 녹화 전에 첫 실행 팝업, 권한 프롬프트, 전면 광고를 닫으십시오.
  • $S statusbar on: 고정된 시간(APPDEMO_TIME, 기본값 9:41), 완전 배터리 및 신호, 알림 아이콘 숨김. $S statusbar off는 원래대로 복원합니다.
  • Android에서는 앱의 루트 화면에서 시스템 뒤로 가기 버튼을 누르지 마십시오. 액티비티가 종료되고 메모리 내 오버라이드(프리미엄 스위치, 기능 플래그)가 재시작 시 손실됩니다.

3. 리허설 후 녹화

  1. 각 클립을 녹화 없이 한 번 리허설하십시오. 탭, 좌표, 대기 시간을 익히십시오. 한 번 화면을 열면 캐시도 워밍업되어 실제 녹화본이 더 빠르게 로드됩니다.
  2. 녹화:
    $S start 01_price_search
    # 앱 구동: adb shell input tap/swipe/text, xcrun simctl, 또는 UI 자동화 도구 사용
    $S stop 01_price_search        # -> $APPDEMO_OUT/01_price_search.mp4
    
    녹화는 호스트에서 실행됩니다 (adb emu screenrecord / simctl io recordVideo). 에뮬레이터에서 기기 내 adb shell screenrecord를 사용하지 마십시오: 앱과 CPU를 경쟁하여 UI가 멈춰 스크롤과 탭이 나타나지 않을 수 있습니다.
  3. 클립의 액션은 짧은 대기 시간(0.5–2.5초)으로 한 번에 배치로 보내고, 탭마다 하나의 도구 호출로 보내지 마십시오. 단계 사이에 화면을 검사하면 녹화본에 긴 정적 구간이 생깁니다.
  4. 스크롤은 신중한 단계(화면의 약 40%, 스와이프당 600–800ms)로 수행하여 시청자가 읽을 수 있게 하십시오.
  5. 비ASCII 텍스트(한국어, 이모지)에는 UI 드라이버의 텍스트 입력을 사용하십시오. adb shell input text는 ASCII만 처리합니다.
  6. 기능이 데이터(원장, 일기, 장바구니)로만 가치를 보여주는 경우, 현실적인 항목을 생성하는 것을 녹화한 후 즉시 삭제하고 화면이 원래 상태로 돌아왔는지 확인하십시오. 먼저 공유 기본값을 확인하십시오: 새 게시물이 공개될 수 있습니다.

4. 모든 클립 확인

$S strip $APPDEMO_OUT/01_price_search.mp4 /tmp/01.jpg 8

스크립트가 아닌 스트립 이미지를 보십시오: 각 의도된 단계가 실제로 발생했는지(스크롤이 이동했는지, 탭이 전환되었는지, 결과가 나타났는지) 확인하고 화면에 원치 않는 것(토스트, 내용을 가리는 키보드, 광고, 실제 주소와 같은 개인 데이터, 디버그 배너)이 없는지 확인하십시오. 실패한 클립은 다시 녹화하십시오; 액션이 조용히 아무것도 하지 않은 클립을 배송하지 마십시오.

5. 대기 시간 제거

$S tighten in.mp4 out.mp4          # 유휴 선두 컷, 정지 구간 -> 0.35초, 최종 결과 화면 1.5초 유지
$S speed  in.mp4 out.mp4 1.3       # 선택적 균일 속도 증가

tighten은 첫 실제 액션 0.4초 전부터 클립을 시작하고(시작 후 유휴 초는 완벽하게 정지되지 않아 프리즈 감지만으로는 놓칩니다) 그림이 변하지 않는 모든 구간을 단축하여, 앱을 아는 사람처럼 탭이 연속적으로 이어지게 합니다. 일반적으로 클립 길이가 절반 정도 줄어듭니다. tighten된 클립도 strip으로 확인하십시오: 작은 변화(숫자 입력, 칩 토글)가 잘렸다면 --noise를 낮추고, 정지 구간이 남았다면 --min-freeze를 낮추십시오.

6. 배송

모든 것을 하나의 폴더에 넣으십시오: 원본 클립, 조정된 버전(편집에 권장), 각 클립이 무엇을 보여주는지와 사용자가 알아야 할 사항(생성 및 삭제된 데이터, 보이는 개인 데이터, 상단의 에뮬레이터 카메라 컷아웃)을 설명하는 짧은 README. 클립 길이와 녹화할 수 없었던 내용 및 그 이유를 보고하십시오.

관련 스킬