규로롱
05

모바일 프롬프터

셀피 화면 위에 대본을 띄우고, 찍힌 영상에는 글자가 없다

concept

  • 코어 공유shared core via JavaScriptCore

    정렬 엔진을 스위프트로 다시 짜지 않았다. 웹 버전 자바스크립트를 한 줄도 고치지 않고 아이폰 안의 JS 엔진에서 그대로 돌린다. 같은 규칙을 두 벌로 관리하면 언젠가 반드시 어긋나고, 그때 어느 쪽이 맞는지 알 수 없게 된다.

  • 버퍼 분기audio tap

    카메라 세션 하나가 마이크 버퍼를 녹화와 음성인식에 동시에 나눠준다. 마이크를 두 번 열 수 없어서 "녹화하면서 대본 따라가기"가 막히는데, 받은 버퍼를 갈라 쓰면 세션은 하나로 둔 채 둘 다 된다.

보이스 프롬프터의 아이폰 버전. 카메라 프리뷰 위에 반투명 대본을 얹고, 목소리를 따라 대본이 내려온다. 앱 안에서 그대로 녹화까지 하는데 저장된 영상에는 글자가 찍히지 않는다.

하나의 카메라 세션이 마이크 버퍼를 녹화와 음성인식에 동시에 나눠준다. "녹화하면서 대본 따라가기"가 되는 이유가 여기에 있다.

정렬 엔진은 웹 버전 코드를 한 줄도 고치지 않고 그대로 가져와 아이폰 안의 자바스크립트 엔진에서 돌린다. 두 벌을 관리하면 반드시 어긋나서다.

앱스토어에 올라가 있다. 아나운서·쇼호스트 준비하는 분들이 연습 촬영에 쓰고 있다는 얘기를 들었는데, 내가 모르는 사람이 내가 만든 걸 쓰고 있다는 게 아직도 제일 이상하고 좋다.

이렇게 시켰습니다

모바일 프롬프터을 지금 다시 만든다면 AI에게 이렇게 넘기겠습니다. 그대로 복사해서 붙여넣고, 마음에 안 드는 부분만 바꾸세요.

아이폰용 프롬프터 앱을 SwiftUI로 만들어줘. 셀피로 영상 찍으면서 대본을 보는 앱이야.

화면:
- 전면 카메라 프리뷰가 꽉 차게 깔리고
- 그 위에 반투명 대본이 얹힌다
- 내 목소리를 들으면서 지금 읽는 위치에 맞춰 대본이 내려간다

절대 놓치면 안 되는 것:
- 앱 안에서 그대로 녹화까지 되는데, **저장된 영상에는 대본 글자가 찍히면 안 된다**
  화면 녹화가 아니라 카메라 출력을 따로 저장하는 방식으로 가야 해
- 녹화와 음성인식이 동시에 돌아가야 한다. 카메라 세션을 하나만 열고
  마이크 버퍼를 녹화 쪽과 인식 쪽에 나눠주는 구조로 짜줘.
  세션을 두 개 열면 iOS가 하나를 끊는다

대본 위치를 찾는 로직은 이미 웹에서 자바스크립트로 만들어둔 게 있어.
Swift로 다시 포팅하지 말고 JavaScriptCore로 그 파일을 그대로 실행해줘.
두 벌을 관리하면 언젠가 반드시 어긋난다.

먼저 카메라 프리뷰 위에 글자를 얹고 손으로 스크롤하는 것까지만 만들어줘.
그게 되는 걸 보고 음성인식을 붙이자.

여기 적힌 시간은 쓸 만한 게 처음 돌아가기까지입니다. 그 뒤에 디테일을 잡는 데 보통 하루 이틀이 더 들고, 지금도 필요할 때 업데이트 하고 있습니다.

처음이라면 — 뭘 깔고 어디에 붙여넣나

저는 Claude Code를 씁니다. 하지만 위 프롬프트는 특정 도구용이 아니라서 아무 데나 붙여넣어도 됩니다. 셋 중 편한 걸로 시작하세요.

  1. 1. 설치 없이 — 브라우저 챗봇
    쓰던 챗봇에 붙여넣고 “하나의 HTML 파일로 만들어줘”를 덧붙이세요. 나온 코드를 저장해 더블클릭하면 그 자리에서 돌아갑니다. 5분, 무료.
  2. 2. 제대로 — 터미널에서 CLI
    파일을 여러 개 만들고 스스로 고쳐가며 돌려보는 건 이쪽만 됩니다. 여기 있는 것들은 전부 이 방식으로 만들었습니다. 30분.
  3. 3. 남한테 맡기고 — 웹 빌더
    v0, Bolt, Lovable 같은 데에 붙여넣으면 화면까지 알아서 띄워줍니다. 빠른 대신 나중에 손대기가 답답해집니다.

어느 쪽이든 한 번에 완성될 거라고 기대하지 마세요. 저는 대충 돌아가는 걸 먼저 받고, 거슬리는 걸 하나씩 말해서 고칩니다. 에러가 뜨면 읽으려 하지 말고 통째로 복사해서 그대로 붙여넣으면 됩니다. 저도 1년 동안 그렇게만 했습니다.

터미널을 한 번도 안 열어보셨다면 설치부터 순서대로 적어둔 곳이 따로 있습니다. 맥·윈도우 명령어와 막혔을 때 할 일까지 있습니다.

만드는 과정