New feature
Speech
8 min reading

Yap, Whisper, and Cloud STT: Choosing a Voice Dictation Stack for macOS Apps (2026)

[AUTO-DRAFT] Yap, Whisper, and Cloud STT: Choosing a Voice Dictation Stack for macOS Apps (2026)

Summarize this article with:

summary
  • Apple SpeechAnalyzer beats Whisper Small on accuracy and speed: 2.12% WER on clean speech and 4.56% on noisy audio, against 3.74% and 7.95%, at roughly 3x the throughput

  • Yap proves the OS-provided-model approach works: a 4 MB app idling at about 60 MB of RAM, with no API key, no model download and no network egress

  • Cloud STT has never been cheaper: Groq Whisper-Large-V3-Turbo runs about $0.60 per 1,000 minutes and Deepgram Nova-3 about $3.60 in batch

  • Streaming carries a real premium: Deepgram Nova-3 goes from $0.0036 per minute in batch to $0.0056 streaming, a 56% increase

  • Choose by constraint, not by hype: privacy pushes you on-device, accuracy pushes you to cloud, control pushes you self-hosted, and flexibility pushes you to a multi-provider API

Yap, an open-source on-device voice dictation app for macOS that requires no model download, hit the Show HN front page with 276 GitHub stars in days. It joins a crowded field: Apple's SpeechAnalyzer API, Whisper and whisper.cpp, and a dozen cloud STT providers. This article maps the trade-offs with benchmarks, pricing and a decision framework.

What Is Yap and Why It Matters

Yap is a free, open-source macOS menu bar app built by Frigade that does fully on-device voice transcription. Press a shortcut (default ⌘⇧D), talk, press again, and the text lands in whatever field you were typing in. No account, no API key, no audio leaving the device.

The technical differentiator is what Yap does not ship: a model. It relies entirely on Apple's SpeechAnalyzer and SpeechTranscriber APIs, introduced in macOS 26 (Tahoe). The OS manages the speech model, so the app itself is roughly 3,000 lines of native Swift in a 4 MB binary, idling at ~60 MB of RAM, no browser engine, no multi-gigabyte model bundle, no network calls.

Yap runs on Apple Silicon only (macOS 26+). Intel Macs are unsupported because the older SFSpeechRecognizer API can fall back to Apple's servers when no on-device model exists for a locale, and that breaks Yap's core promise of zero network egress.

The Three Deployment Tiers

Every voice dictation implementation falls into one of three tiers. The right choice depends on your latency budget, accuracy requirements, privacy constraints, and volume.

Tier 1: Fully On-Device (Yap, whisper.cpp, Apple SpeechAnalyzer)

On-device transcription runs entirely on the user's hardware. No network round-trip, no per-use cost, no data leaves the device.

Apple SpeechAnalyzer (via Yap or direct API):

  • Latency: streaming, sub-200ms for partial results

  • Cost: zero per-use; the model ships with the OS

  • Privacy: strongest possible, audio never leaves the device

  • Accuracy: 2.12% WER on clean speech, 4.56% on noisy audio (benchmark across 5,559 LibriSpeech clips), better than Whisper Small (3.74% / 7.95%) at ~3× the speed

  • Limitation: requires macOS 26 on Apple Silicon; locale coverage depends on Apple's shipped models

whisper.cpp (self-bundled):

  • Latency: 200ms–2s depending on model size and hardware

  • Cost: zero per-use; you bundle the model

  • Model size: whisper-large adds ~1.5 GB to your app; whisper-small ~250 MB; whisper-tiny ~75 MB

  • Accuracy: whisper-large approaches cloud accuracy; whisper-small is the practical floor for dictation

  • Limitation: heavy model bundle inflates app install size; inference is slow on older or Intel Macs

The Yap approach, leveraging the OS-provided model, sidesteps the model-bundle problem entirely. The trade-off is platform lock-in: your app only works on macOS 26+ Apple Silicon.

Tier 2: Self-Hosted Server (whisper-large on your GPUs)

You run Whisper (or a fine-tuned variant) on your own infrastructure and expose it as an API.

  • Latency: 100–500ms depending on network and GPU utilization

  • Cost: amortized GPU cost; works out to fractions of a cent per minute at scale

  • Control: full model choice, fine-tuning capability, no vendor lock-in

  • Privacy: audio travels to your servers, but you control retention and processing

  • Complexity: you own the infrastructure, scaling, and model updates

This is the right tier for organizations with existing GPU capacity, strict data-control requirements, and the engineering bandwidth to maintain a serving stack (vLLM, TGI, or a custom Whisper server).

Tier 3: Cloud STT API (Deepgram, AssemblyAI, Google, EdenAI Multi-Provider)

Cloud APIs offer the best accuracy on noisy and multi-speaker audio, with zero infrastructure overhead.

Provider Model Per-Min Per 1,000 Min Streaming Languages
Groq Whisper-Large-V3-Turbo ~$0.0006 ~$0.60 No 100+
OpenAI gpt-4o-mini-transcribe $0.003 $3.00 Yes 57
Deepgram Nova-3 (batch) $0.0036 $3.60 No 45+
AssemblyAI Universal (batch) $0.0037 $3.70 No 100+
ElevenLabs Scribe $0.004 $4.00 No 99
Google Chirp 2 $0.0048 $4.80 Yes 100+
Deepgram Nova-3 (streaming) $0.0056 $5.60 Yes 45+
OpenAI Whisper-1 $0.006 $6.00 No 57
AssemblyAI Universal-Streaming $0.0074 $7.40 Yes 100+
Speechmatics Enterprise ~$0.046 ~$46.00 Yes 55+

Pricing verified April 2026. Batch rates are cheaper; streaming adds a premium. Additive costs (diarization, PII redaction, custom vocabulary) are sold as extras by most providers, ElevenLabs Scribe includes diarization at its flat rate.

A multi-provider API (like EdenAI's unified STT endpoint) lets you A/B test providers per audio clip and route by language, noise profile, or cost, switching from Deepgram to AssemblyAI to Google Chirp without code changes.

Decision Framework: Which Tier Should You Ship?

Requirement Recommended Tier Specific Pick
Privacy-critical (healthcare, legal) On-device Apple SpeechAnalyzer (macOS 26+) or whisper.cpp
Best accuracy on noisy/multi-speaker Cloud API Deepgram Nova-3 or AssemblyAI Universal
Lowest cost at high volume Cloud API Groq Whisper-Large-V3-Turbo ($0.60/1K min)
Zero infrastructure, fast time-to-ship Cloud API EdenAI multi-provider (single endpoint, provider switching)
Full model control + fine-tuning Self-hosted whisper-large on your GPUs
Offline / no network dependency On-device whisper.cpp (bundle the model)
macOS app, Apple Silicon only, minimal footprint On-device Yap / direct SpeechAnalyzer API
Cross-platform (macOS + Windows + Linux) On-device or cloud whisper.cpp (local) or cloud API

Technical Implementation: Apple SpeechAnalyzer in Swift

If you are building a native macOS app and want the Yap-style approach (no model bundle, OS-provided transcription), here is the core pattern:

import Speech

// 1. Request authorization
let authStatus = await SFSpeechRecognizer.requestAuthorization(
    .speechRecognition
)
guard authStatus == .authorized else { return }

// 2. Create a SpeechTranscriber with volatile results for live preview
let config = SpeechTranscriber.Configuration()
config.volatileResults = true  // enables streaming partial transcripts

let transcriber = SpeechTranscriber(configuration: config)

// 3. Ensure the on-device locale model is available
let locale = Locale(identifier: "en-US")
try await AssetInventory.shared.downloadIfMissing(
    .speechRecognizer(locale)
)

// 4. Start transcription from an audio input stream
let analyzer = SpeechAnalyzer()
let stream = transcriber.stream(
    from: audioInput,
    using: analyzer
)

for try await result in stream {
    // result.transcript: the running transcript (volatile = live preview)
    print(result.transcript)
}

Key implementation notes from Yap's architecture:

  • Audio capture starts before the speech stack initializes. Buffers recorded in that window are held and flushed once the transcriber attaches, so the first word is never clipped.

  • Do not use SFSpeechRecognizer. The older API can fall back to Apple's servers when a locale has no on-device model. SpeechAnalyzer runs on-device only, if your language is unsupported, dictation stops rather than sending audio to Apple.

  • Insertion via clipboard + ⌘V. Yap writes text to the clipboard, triggers paste through System Events, then restores the previous clipboard. It waits before restoring because Chromium-based apps read the pasteboard asynchronously, restoring too early hands the renderer stale data.

Cloud STT with Python (Multi-Provider via EdenAI)

For apps that need cloud-grade accuracy with provider flexibility:

import requests

API_KEY = "your_edenai_api_key"

response = requests.post(
    "https://api.edenai.run/v3/audio/speech_to_text",
    headers={"Authorization": f"Bearer {API_KEY}"},
    json={
        "providers": "deepgram,assemblyai,google",
        "file": open("audio.mp3", "rb"),
        "language": "en",
        "provider_settings": {
            "deepgram": {"model": "nova-3"},
            "assemblyai": {"speaker_labels": True}
        }
    }
)

data = response.json()
for provider in ["deepgram", "assemblyai", "google"]:
    print(f"{provider}: {data[provider]['text']}")

This pattern lets you call multiple providers in a single request, compare outputs, and route based on which provider performs best for your audio distribution, without maintaining separate SDK integrations.

Pitfalls and Practical Advice

  • On-device model size matters for app install. Bundling whisper-large adds ~1.5 GB. Yap's no-download claim is the hard part, it works because Apple ships the model with the OS. If you target pre-macOS 26 or non-Apple Silicon, you must bundle your own model.

  • Cloud STT terms of service vary on training. Some providers train on your audio by default. Verify for regulated workloads, check the data processing agreement before integrating.

  • Accuracy benchmarks lie. Provider demo sets are cherry-picked. Always test on your actual audio distribution: accented speech, noisy environments, domain-specific vocabulary. A provider that scores 2% WER on LibriSpeech may score 15% on your call-center recordings.

  • Additive costs triple your bill. Per-minute pricing hides diarization, PII redaction, sentiment analysis, and custom vocabulary as paid extras. Factor them in before committing.

  • Streaming vs. batch pricing gap. Deepgram Nova-3 costs $0.0036/min in batch but $0.0056/min streaming, a 56% premium. If your use case tolerates async processing, use batch mode.

Key Takeaways

  • Apple SpeechAnalyzer is a genuine Whisper alternative for macOS 26+ Apple Silicon apps: 2.12% WER, ~3× faster than Whisper Small, with zero model bundle and zero network egress.

  • Yap proves the OS-provided-model approach works: 4 MB app, 60 MB RAM, no API keys, no telemetry.

  • Cloud STT is cheaper than ever, under $1/1,000 minutes from Groq, under $4 from Deepgram or AssemblyAI, but additive features and streaming premiums can triple the effective rate.

  • The right tier depends on your constraints: privacy → on-device; accuracy → cloud; control → self-hosted; flexibility → multi-provider API.

  • Always benchmark on your own audio, not the provider's demo set.

Whichever tier you ship, keep the transcription layer swappable. Benchmarking a provider against your own audio is far easier when switching between Deepgram, AssemblyAI and Google is a configuration change rather than a rewrite.

You can find them at Eden AI.

Login to the platform to test it yourself.

FAQ

What is Yap and how does it differ from other macOS dictation apps?

Yap is a free, open-source macOS menu bar app from Frigade that transcribes speech entirely on-device. Its differentiator is what it does not ship: there is no bundled model, because it calls Apple's SpeechAnalyzer and SpeechTranscriber APIs and lets the OS manage the speech model. The result is a 4 MB binary with no account, no API key and no audio leaving the machine.

Is Apple SpeechAnalyzer better than Whisper?

On the published benchmark of 5,559 LibriSpeech clips, Apple SpeechAnalyzer reaches 2.12% word error rate on clean speech and 4.56% on noisy audio, against 3.74% and 7.95% for Whisper Small, at about three times the speed. Whisper Large still closes much of the accuracy gap, but it costs you a 1.5 GB model bundle.

How much does cloud speech-to-text cost in 2026?

Rates run from roughly $0.60 per 1,000 minutes for Groq Whisper-Large-V3-Turbo up to about $46 for Speechmatics Enterprise. Deepgram Nova-3 and AssemblyAI Universal sit near $3.60 to $3.70 in batch mode. Watch the extras: diarization, PII redaction and custom vocabulary are billed separately by most providers.

Should I run speech-to-text on-device or in the cloud?

On-device wins when privacy is the binding constraint, when you need offline operation, or when per-use cost must be zero. Cloud wins on accented, noisy or multi-speaker audio, and when you want to ship without maintaining infrastructure. Self-hosting only pays off at high, steady volume with existing GPU capacity.

Does Yap work on Intel Macs?

No. Yap requires macOS 26 or later on Apple Silicon. Intel machines are unsupported deliberately: the older SFSpeechRecognizer API can fall back to Apple's servers when a locale has no on-device model, which would break the app's guarantee that no audio ever leaves the device.

Do cloud speech-to-text providers train on my audio?

Some do by default, and the terms differ from provider to provider. For regulated workloads in healthcare, legal or finance, read the data processing agreement before integrating, and confirm both the training policy and the retention window rather than relying on marketing pages.

Similar articles

Securing AI Agents Against Document-Borne Prompt Injection Attacks
New feature
Text Processing
Securing AI Agents Against Document-Borne Prompt Injection Attacks
8/4/2026
·
Written byTaha Zemmouri
Gemini 3.6 Flash and Flash-Cyber: Google's New Speed and Security AI Models Explained
New feature
Text Processing
Gemini 3.6 Flash and Flash-Cyber: Google's New Speed and Security AI Models Explained
7/27/2026
·
Written byTaha Zemmouri
New feature
Vision
NEW: Image Deepfake Detection Available on Eden AI
12/27/2024
·
Written byTaha Zemmouri
let’s start

Start building with Eden AI

A single interface to integrate the best AI technologies into your products.