메뉴
HN
Hacker News 1일 전

모델 다운로드 없이 온디바이스로 구동되는 맥용 음성 입력기 'Yap'

IMP
7/10
핵심 요약

macOS 26(Tahoe)에 새롭게 추가된 온디바이스 음성 인식 프레임워크를 활용해 별도의 AI 모델 다운로드 없이 매우 빠르고 가벼운 음성 입력(Dictation)을 제공하는 오픈소스 앱입니다. 기존 무거운 모델을 다운로드해야 하거나 웹 엔진 기반으로 무거웠던 타 앱들과 달리, 4MB 크기의 네이티브 앱으로 메모리와 네트워크를 절약하면서도 Apple 자체 모델을 통해 뛰어난 인식률을 제공하는 것이 특징입니다.

번역된 본문

제목: Yap - 모델 다운로드가 필요 없는 macOS용 온디바이스 오픈소스 음성 입력기 출처: 해커뉴스(Hacker News)

Yap 텍스트를 입력할 수 있는 모든 곳에서 작동하는 매우 빠른 macOS용 음성 입력기입니다. 단축키를 누르고, 말하고, 다시 누르기만 하면 됩니다. 당신의 말은 사용 중이던 텍스트 필드에 바로 입력됩니다. 계정 필요 없음, API 키 필요 없음, 오디오가 기기를 떠나지 않음. Frigade에서 제작했습니다.

어떤 앱인가요? Yap은 메뉴 막대에 상주하며 단축키 입력을 기다립니다. 단축키를 누르면 화면 하단에 실시간 파형과 지금까지 말한 내용의 미리보기가 있는 작은 창이 나타납니다. 단축키를 다시 누르면 텍스트가 작업 중이던 앱에 바로 붙여넣어집니다. 모든 전사(변환) 내역은 로컬에 저장되므로 나중에 다시 돌아가서 복사할 수 있습니다. 기본 단축키는 ⌘⇧D입니다. 이를 변경하거나 단일 보조 키로 설정할 수도 있습니다. 엄지손가락에 여유가 있다면 오른쪽 Shift 키를 단독으로 눌러 사용하는 것이 좋습니다.

설치 방법 Homebrew 사용 시: brew install --cask frigadehq/tap/yap 나중에 업데이트하려면: brew upgrade --cask yap

직접 다운로드: 릴리스(Releases) 페이지에서 최신 .dmg 파일을 다운로드하여 Yap을 애플리케이션 폴더로 드래그하세요. 릴리스된 빌드는 서명 및 공증(Notarized)되어 있으므로 macOS에서 거부 없이 바로 실행할 수 있습니다.

왜 이 앱을 만들었나요? macOS용 음성 텍스트 변환 도구가 부족하지는 않으며, 일부 오픈소스 도구도 정말 훌륭합니다. 하지만 대부분은 다음과 같은 유사한 문제점들을 겪습니다:

  • 일부는 비용을 요구합니다. 요즘 OS에 무료로 내장된 기능에 돈을 지불하는 것은 부담스럽습니다.
  • 대부분 무거운 모델을 다운로드하게 합니다. Whisper 가중치만 수백 메가바이트에 달해 RAM을 차지하며, 최신 고급형 Mac에서만 빠르게 작동합니다. 특히 Intel Mac에서는 상황이 더 안 좋아서 Whisper나 Parakeet 같은 모델은 종종 충돌하거나 아예 실행되지 않으며, 겨우 실행되더라도 문단 하나를 변환하는 데 30초에서 1분이 걸립니다.
  • 상당수가 Electron이나 웹 스택 기반 앱이라서, 메뉴 막대 아이콘과 설정 창을 띄우기 위해 브라우저 엔진 전체가 메모리에서 대기해야 합니다.
  • 절대 열어보지 않을 설정과 모드들로 비대해져 있습니다.
  • 일부는 폐쇄 소스이므로, 오디오와 변환 내용이 기기에 안전하게 남아있는지 확인할 방법 없이 그저 맹목적으로 신뢰해야 합니다.

최근에 상황이 바뀐 이유는 바로 macOS 26 때문입니다. 이 버전에 추가된 SpeechAnalyzer 및 SpeechTranscriber라는 두 가지 API가 OS 자체에서 제공하고 관리하는 모델을 사용해 온디바이스 스트리밍 음성-텍스트 변환을 수행합니다. 따라서 이 앱은 자체적인 모델을 전혀 포함하지 않고, 첫 단어를 입력하기 전까지 메모리에 아무것도 로드하지 않으며, API 키나 분당 요금도 필요 없습니다. 말을 하는 즉시 텍스트가 화면에 나타납니다.

Apple의 모델이 실제로 좋은가요? 결과적으로 기존의 대안들보다 낫습니다. 최근 벤치마크에 따르면 깨끗한 오디오에서 2.12%, 노이즈가 있는 오디오에서 4.56%의 단어 오류율(WER)을 기록했습니다. 이는 Whisper Small의 3.74%, 7.95%에 대비되는 수치이며, 5,559개의 LibriSpeech 클립 테스트에서 약 3배 더 빠르게 실행되었습니다.

그래서 Yap은 모델을 전혀 포함하지 않습니다. 브라우저 엔진은 눈 써야 찾을 수 없으며, 4MB 크기의 앱 안에 담긴 약 3천 줄의 네이티브 Swift 코드로만 이루어져 있고 모두 오픈소스로 공개되어 있습니다. 메모리는 약 60MB만 사용하며 네트워크는 일절 건드리지 않습니다. 우리는 Frigade에서 하루 종일 이 앱을 사용하는데, 주로 코딩 에이전트에게 프롬프트를 지시하거나, 이메일을 작성하고, Slack 메시지를 보낼 때, 즉 타이핑하는 것보다 말하는 것이 더 빠른 모든 작업에 사용하고 있습니다.

주요 기능

  • Apple의 Speech 프레임워크를 통한 온디바이스 전사(Transcription)
  • 글로벌 단축키 지원 (오른쪽 Shift 같은 단일 보조 키 트리거 옵션 포함, 완벽하게 재설정 가능)
  • 사용 중이던 앱의 포커스된 필드에 텍스트 바로 붙여넣기
  • 검색, 복사, 삭제가 가능한 로컬 전사 기록
  • 말하는 동안 보여지는 실시간 파형 및 부분 전사 내용
  • 진행 중인 받아쓰기를 취소하려면 Escape 키를 두 번 누르기
  • 세션 도중에 변경된 경우를 포함하여 시스템 기본 마이크 설정跟随
  • 로그인 시 실행 옵션 (기본값은 꺼짐)
  • 계정 필요 없음, 네트워크 호출 없음, 데이터 추적(Telemetry) 없음

요구 사항 macOS 26 (Tahoe) 이상. Yap은 macOS 26에 포함된 Apple의 음성 모델에 의존하므로 이전 버전에서는 작동하지 않습니다. 소스에서 직접 빌드하려면 추가로 Xcode 26이 필요합니다.

권한 처음 실행하면 Yap은 네 가지 권한을 요청하며 각각의 이유를 설명합니다:

  • 마이크: 사용자의 음성을 듣기 위해
  • 음성 인식: 기기 내에서 텍스트로 변환하기 위해
  • 접근성(Accessibility): 사용자가 입력 중인 앱을 인식하기 위해
  • 자동화(Automation): 변환 결과를 해당 앱에 붙여넣기 위해
원문 보기
원문 보기 (영어)
Yap Blazing-fast voice dictation for macOS that works anywhere you can type. Press a shortcut, talk, press it again. Your words land in whatever text field you were using. No account, no API key, no audio leaving your machine. Built by Frigade . yap-demo.mp4 What it does Yap lives in your menu bar and waits for a shortcut. Trigger it and a small window appears near the bottom of the screen with a live waveform and a running preview of what you have said so far. Press the shortcut again and the text gets pasted into the app you were already working in. Every transcript is saved locally, so you can go back and copy something again later. The default shortcut is ⌘⇧D . You can rebind it, or set a single modifier key instead. Tapping right shift on its own works nicely if you have a spare thumb. Install Homebrew brew install --cask frigadehq/tap/yap To update later: brew upgrade --cask yap Direct download Grab the latest .dmg from Releases and drag Yap into your Applications folder. Released builds are signed and notarized, so macOS opens them without complaint. Why we built this There's no shortage of voice to text tools for macOS, and some of the open source ones are genuinely good. Most of them still run into some mix of the same problems: Some cost money, which is a lot to ask for something that's now built into your OS for free. Most make you download a heavy model. Whisper weights run to hundreds of megabytes, sit in your RAM, and only feel fast on a recent, high end Mac. It gets especially bad on Intel Macs, where models like Whisper and Parakeet often crash or refuse to run outright, and when they do run, a single paragraph can take thirty seconds to a minute to come back. A lot are Electron or web-stack apps, so a whole browser engine idles in your memory just to run a menu bar icon and a settings window. Plenty are bloated with settings and modes you will never open. Some are closed source, so you are trusting that your audio and transcripts stay on your machine, with no way to check. What changed recently is macOS 26. It added two APIs, SpeechAnalyzer and SpeechTranscriber , that do on-device streaming speech to text using models the OS ships and manages. The app carries no model of its own, loads nothing into memory before the first word, and needs no API key or per minute cost. Text comes back as you talk. Is Apple's model actually any good? Better than the thing it replaces, as it turns out. A recent benchmark put it at 2.12% word error rate on clean audio and 4.56% on noisy, against 3.74% and 7.95% for Whisper Small, and it ran about three times faster, across 5,559 LibriSpeech clips. So Yap ships no model at all. It's roughly three thousand lines of native Swift in a 4 MB app, all of it open, with no browser engine anywhere in sight. It idles around 60 MB of memory and never touches the network. We use it all day at Frigade , mostly for prompting coding agents, writing emails, and firing off Slack messages, basically anything that's quicker to say than type. Features On-device transcription through Apple's Speech framework Global shortcut, fully rebindable, with optional single-modifier triggers like right shift Pastes straight into the focused field of whatever app you were in Local transcript history with search, copy, and delete Live waveform and partial transcript while you speak Press escape twice to discard a dictation in progress Follows your system default microphone, including when it changes mid-session Optional launch at login, off by default No account, no network calls, no telemetry Requirements macOS 26 (Tahoe) or later. Yap depends on the speech models Apple ships with macOS 26, so earlier versions will not work. Building from source additionally needs Xcode 26. Permissions On first launch Yap asks for four things, and explains each one: Permission Why Microphone To hear you Speech Recognition To transcribe on device Accessibility To see which app you are typing into Automation To paste the result into it Accessibility has to be switched on by hand in System Settings. macOS requires that of any app that types on your behalf, and there is no way to grant it programmatically. How it works Audio comes off the default input through AVAudioEngine and gets converted to whatever format the analyzer asks for. Capture starts before the speech stack finishes initializing, and buffers recorded in that window are held and flushed once the transcriber attaches, so the first word of a sentence is never clipped. Transcription runs through SpeechAnalyzer with volatile results turned on, which is what gives you the live preview. SFSpeechRecognizer is wired up as a fallback for locales the newer API does not cover. Insertion is the awkward part. Yap writes the text to the clipboard, drives ⌘V through System Events, then restores your previous clipboard contents. It waits before restoring, because Chromium-based apps read the pasteboard asynchronously and more than once, and restoring too early hands the renderer stale data. That single detail is the difference between working everywhere and working only in native apps. State lives in one place. RecordingCoordinator is a small state machine whose dependencies are all protocols, so the logic is covered by unit tests without needing a microphone. Why it is not sandboxed Typing into another application requires driving System Events and reading the focused UI element, both of which the macOS App Sandbox forbids. Yap therefore ships unsandboxed and is distributed outside the Mac App Store. Every text expander, clipboard manager, and dictation tool on macOS lands in the same place for the same reason. Roadmap There is not much of one, and that is on purpose. Yap does a single thing, and keeping it small enough that you never have to think about it is the main design principle. Most feature ideas make an app like this worse. We are not precious about it though. If something is missing that you would use every day, open an issue or send a pull request and we will give it a fair hearing. A language picker is the most likely next addition, since Yap follows your system locale today. Development Build and install from source in one line. It clones, builds, drops Yap into /Applications , and launches it: git clone https://github.com/FrigadeHQ/yap.git && cd yap && ./install.sh The script installs XcodeGen if you do not have it, quits any running copy, and replaces it with the new build. Re-run ./install.sh any time to rebuild after a change. If you would rather work in Xcode: xcodegen generate # writes Yap.xcodeproj from project.yml open Yap.xcodeproj # then run with ⌘R The Xcode project is generated rather than committed, so configuration changes stay readable in a diff. Run the tests with: xcodebuild -project Yap.xcodeproj -scheme Yap -destination ' platform=macOS ' test One thing to know about local builds. They are signed ad-hoc, which gives them no stable identity, so macOS treats every rebuild as a brand new application and forgets the permissions you granted the previous one. The symptom is confusing: the checkbox still looks switched on in System Settings, but pasting quietly stops working. There is a "Reset and re-grant" button in Settings for exactly this. Released builds are signed properly and do not have the problem. The app icon is generated too, if you want to change it: swift Tools/GenerateIcon.swift /tmp/Yap.iconset iconutil -c icns /tmp/Yap.iconset -o Sources/Yap.icns Contributing Issues and pull requests are welcome. If you are fixing a paste failure in a specific app, please say which app and which macOS version, since that class of bug is almost always app-specific. License MIT. See LICENSE . Built by Frigade , an AI assistant that lives inside your product, learns it end to end, and takes actions on behalf of your users.