Yap: macOS를 위한 오픈 소스 온디바이스 음성 받아쓰기

Yap: macOS를 위한 오픈 소스 온디바이스 음성 받아쓰기

Yap은 사용자가 활성화된 모든 텍스트 필드 내에서 음성을 텍스트로 직접 변환할 수 있게 해주는 macOS용 오픈 소스 음성 받아쓰기 도구입니다. Apple의 네이티브 Speech framework를 활용함으로써, Yap은 클라우드 연결, API 키 또는 외부 머신러닝 모델의 다운로드 없이 기기 내에서만 작동하는 개인정보 보호 중심의 저지연 경험을 제공합니다.

Apple Speech Framework를 통한 온디바이스 전사

Yap은 macOS 26 (Tahoe)에서 도입된 SpeechAnalyzerSpeechTranscriber API를 사용합니다. 이 API를 통해 애플리케이션은 운영 체제 자체에서 관리하고 제공하는 음성-텍스트 변환 모델을 사용할 수 있습니다. 이러한 설계는 Whisper와 같이 수백 메가바이트의 RAM을 소비하고 오래된 Intel 기반 Mac에서 성능 저하를 일으킬 수 있는 무거운 모델 가중치를 애플리케이션에 포함할 필요를 없애줍니다.

개발자들이 인용한 벤치마크에 따르면, Apple의 네이티브 음성 API는 깨끗한 오디오에서 2.12%, 노이즈가 있는 오디오에서 4.56%의 단어 오류율(WER)을 보여, 5,559개의 LibriSpeech 클립에 대해 약 3배 더 빠르게 실행되면서도 Whisper Small(각각 3.74% 및 7.95%)보다 뛰어난 성능을 보여주었습니다.

핵심 기능 및 워크플로우

Yap은 글로벌 단축키(기본값 –ℏ D)를 중심으로 하는 간소화된 워크플로우를 가진 메뉴 바 애플리케이션으로 작동합니다:

  • 트리거 기반 받아쓰기: 사용자가 단축키를 누르면 녹음이 시작되고, 다시 누르면 중지됩니다. 결과 텍스트는 활성 애플리케이션의 포커스된 텍스트 필드에 자동으로 붙여넣기됩니다.
  • 실시간 피드백: 말하는 동안 작은 창에 실시간 파형과 전사 내용의 미리보기가 표시됩니다.
  • 로컬 기록: 모든 전사 내용은 로컬에 저장되어 사용자가 이전 받아쓰기 내용을 검색, 복사 또는 삭제할 수 있습니다.
  • 사용자 정의 트리거: 단축키는 오른쪽 Shift 키와 같은 단일 수정 키 트리거를 포함하여 완전히 재설정할 수 있습니다.
  • 설계에 의한 개인정보 보호: 앱은 네트워크 호출을 수행하지 않고, 텔레메트리를 포함하지 않으며, 사용자 계정을 요구하지 않습니다.

기술적 구현 및 아키텍처

Yap은 네이티브 Swift(약 3,000행의 코드)로 작성되었으며, 유휴 상태에서 약 60 MB의 메모리만 사용하는 작은 점유율을 유지합니다.

오디오 처리 및 삽입

문장의 첫 단어가 잘리는 것을 방지하기 위해, Yap은 AVAudioEngine을 사용하여 오디오를 캡처하고 음성 스택이 초기화되는 동안 버퍼에 저장합니다. 전사는 실시간 미리보기를 위해 휘발성 결과가 활성화된 SpeechAnalyzer를 통해 처리되며, 지원되지 않는 로캘의 경우 SFSpeechRecognizer가 폴백(fallback) 역할을 합니다.

다른 애플리케이션에 텍스트를 삽입하는 것은 텍스트를 클립보드에 쓰고 System Events를 통해 –V 명령을 시뮬레이션하여 수행됩니다. 개발자들은 Chromium 기반 앱에 대한 특정 구현 세부 사항을 언급했습니다. 이러한 브라우저는 페이스트보드를 비동기적으로 읽기 때문에, 앱은 원래의 클립보드 내용을 복구하기 전에 잠시 대기합니다. 클립보드를 너무 빨리 복구하면 오래된 데이터가 붙여넣어지는 결과가 발생할 수 있기 때문입니다.

보안 및 샌드박싱

Yap은 Mac App Store 외부에서 배포되며 샌드박싱되지 않았습니다. 이는 기술적인 필수 사항인데, macOS App Sandbox는 다른 애플리케이션을 제어하기 위한 System Events 사용과 포커스된 UI 요소를 읽는 기능을 금지하기 때문입니다. 이 두 기능은 받아쓰기 도구가 다른 앱에 텍스트를 붙여넣기 위해 반드시 필요합니다.

설치 및 요구 사항

시스템 요구 사항: Yap은 macOS 26 (Tahoe) 이상이 필요하며, 소스에서 빌드하는 경우 Xcode 26가 필요합니다.

설치 방법:

  • Homebrew: brew install --cask frigadehq/tap/yap
  • 직접 다운로드: 최신 .dmg 파일은 GitHub Releases 페이지에서 사용할 수 있습니다.

필수 권한: 처음 실행 시 Yap은 마이크, 음성 인식, 접근성(활성 앱 식별용) 및 자동화(텍스트 붙여넣기용) 권한을 요구합니다. 접근성 권한은 시스템 설정에서 수동으로 활성화해야 합니다.

커뮤니티 통찰

이 프로젝트는 속도와 개인정보 보호 측면에서 좋은 반응을 얻고 있지만, 일부 사용자들은 내장된 macOS 받아쓰기 기능과의 차별점에 대해 의문을 제기해 왔습니다. 다른 사용자들은 Apple의 네이티브 모델이 매우 경쟁력이 있지만, NVIDIA Parakeet TDT v2와 같은 특화된 모델이 특정 벤치마크에서는 여전히 우위를 유지하고 있다고 언급했습니다.

Sources