Skip to content

Releases: latent-variable/Yap

Yap 0.8.2

Choose a tag to compare

@latent-variable latent-variable released this 17 Jul 04:17

Update notifications. Yap now tells you when a new version ships. It checks GitHub once a day (default on; toggle off in Settings ▸ General ▸ Updates) and shows a banner when a newer release exists — no account, no telemetry, nothing personal sent. It never installs anything on its own: the banner links to the release page; Homebrew users just brew upgrade. This is the release that seeds that mechanism, so from here on updates surface in-app.

Carried forward from 0.8.1: cleaner speech (emoji/dividers stripped before TTS) and the snappy menu bar (layout-loop fix).

Install

  • Homebrew: brew install --cask latent-variable/tap/yap (no Gatekeeper prompt)
  • DMG: download below, move Yap to Applications, then run xattr -cr /Applications/Yap.app

App is ad-hoc signed, not notarized.

Yap 0.8.1

Choose a tag to compare

@latent-variable latent-variable released this 17 Jul 02:30

Two changes since 0.8.0:

Cleaner speech. Emoji, box-drawing dividers (────), and decorative symbols are now stripped before text-to-speech instead of being read aloud by name. Numbers, math delimiters, arrows, and paragraph breaks are preserved, so copied terminal and chat output reads clean.

Snappier menu bar. Fixed a SwiftUI layout loop in the menu-bar popover that pinned the main thread over time, making the icon lag about a second per click after extended use. Idle CPU now sits near zero.

Install

  • Homebrew: brew install --cask latent-variable/tap/yap (no Gatekeeper prompt)
  • DMG: download below, move Yap to Applications, then run xattr -cr /Applications/Yap.app

App is ad-hoc signed, not notarized.

Yap 0.8.0

Choose a tag to compare

@latent-variable latent-variable released this 09 Jul 03:42

What's new in 0.8.0

History tab. Everything Yap reads aloud or you dictate now gets logged locally in Settings ▸ History. Search it, copy any entry to re-read, clear it whenever. Never lose a passage or a dictation to a failed paste again.

Smarter cleanup. Bracketed citations (like [1], [1, 2], [9, 10, 11], ranges, and footnotes) are stripped by default, so papers and wikis stop reading "bracket one, bracket two" at you. Code subscripts like array[1] are left untouched.

Voice cloning: no more Keychain nag. Your Hugging Face token is now a one-time download key. Once the gated cloning weights are cached, Yap loads them offline with no token and never touches the Keychain, so re-signed builds stop asking for your login password on launch. This also fixes a bug where cloning could silently break without a token even when the weights were already on disk.

Fully local as always: no cloud, no account, no telemetry.

Install

brew install --cask latent-variable/tap/yap, or grab the DMG below and run xattr -cr /Applications/Yap.app to clear the one-time quarantine.

Yap 0.7.3

Choose a tag to compare

@latent-variable latent-variable released this 05 Jul 20:47

Fixes

  • Energy: the audio engine no longer runs after playback ends. It used to spin its render thread at ~7-8% CPU continuously once you'd read anything; now it parks when idle (idle CPU ~0%).
  • Cloned voices persist across restart. A selected Pocket cloned voice (e.g. your own clone) is no longer reset to a default on relaunch; it's only swapped when cloning is genuinely unavailable.
  • Lower memory: only the active TTS engine stays resident. Switching engines frees the other (Pocket/torch is ~700MB+), reloading on demand.

Ad-hoc signed, not notarized. Install: brew install --cask latent-variable/tap/yap, or the DMG + xattr -cr /Applications/Yap.app.

v0.7.2 — quieter start, Eve default

Choose a tag to compare

@latent-variable latent-variable released this 01 Jul 00:05

Small Pocket TTS refinements on top of v0.7.0.

Changes

  • No more startup chime. Pocket starts in under a second, so the "audio is coming" cue was just noise — removed. The fail chime stays, so a read that can't start still tells you.
  • Eve is the default Pocket voice for a first-time switch (was alba). Only fills an unset voice — never overrides one you've already picked.

Install

  • Homebrew: brew upgrade --cask latent-variable/tap/yap
  • DMG: download below, drag to Applications, then xattr -cr /Applications/Yap.app

Fully local — no cloud, no account, no tracking.

v0.7.0 — Pocket TTS

Choose a tag to compare

@latent-variable latent-variable released this 30 Jun 03:40

Pocket TTS (Kyutai) replaces the Chatterbox HD engine. Pick it in Settings ▸ Engine.

  • 26 natural built-in voices, no account, ~10× realtime on CPU.
  • Voice cloning (opt-in): clone any ~20s clip. Needs your own free Hugging Face token (read scope) + accepting the Pocket TTS terms once; the token is stored in your macOS Keychain and used only by the local engine.
  • Engine-scoped voice picker: a Kokoro/Pocket toggle shows just the active engine's voices.
  • Kokoro remains the instant, bundled default. Pocket installs on demand (~1 GB) from Settings ▸ Models and can be removed there (your clones are kept).

Fully local — no cloud TTS, no analytics. brew upgrade --cask to update.

Yap 0.6.0

Choose a tag to compare

@latent-variable latent-variable released this 28 Jun 18:44

What's new

Reliable reading. Capture now waits for your shortcut's modifiers to release before copying, so reads stop failing intermittently. Holding Command no longer adds lag.

Permissions that stick. Builds are signed with a stable identity, so macOS keeps your Accessibility grant across every update instead of asking again each time.

Turn features on or off. New Settings switches disable Reading (voice) or Dictation (ears) independently — off means its global shortcut won't fire by accident. The other keeps working.

Mute all sounds. One switch silences every cue (read-fail, HD buffering, dictation start/stop).

Settings polish. On toggles stay accent-colored even when the window isn't focused, and every control is keyboard- and VoiceOver-accessible.

Fully local as always: no cloud, no account, no tracking.

v0.5.3 — read fail cue

Choose a tag to compare

@latent-variable latent-variable released this 26 Jun 23:11

Adds an audible cue (Funk) when a read can't start — empty/stale selection, a window you haven't clicked into, or missing Accessibility — so a failed shortcut isn't just silence. Toggle in Settings. Install: brew upgrade --cask latent-variable/tap/yap or the DMG + xattr -cr.

v0.5.2 — authenticated local sidecar

Choose a tag to compare

@latent-variable latent-variable released this 26 Jun 18:15

Security release. Closes two P1 auditor findings on the loopback TTS backend (127.0.0.1:8766):

  • #14 CSRF — a website could fire a cross-origin POST to mutating endpoints (e.g. the multi-GB HD install). Now blocked: a shared-secret Bearer token is required and browser-origin requests are rejected.
  • #13 impostor — a process squatting the port could be reused and receive captured selected text. The app now verifies the backend via an HMAC /verify challenge before trusting it; a process that can't read the 0600 token file can't forge the proof.

Token is per-machine in a 0600 file (app + backend read-or-create it); nothing shipped, fully local as always. Upgrades reclaim a stale pre-auth backend automatically.

Install: brew upgrade --cask latent-variable/tap/yap, or download the DMG and xattr -cr /Applications/Yap.app.

Yap 0.5.1

Choose a tag to compare

@latent-variable latent-variable released this 26 Jun 04:55

Security + reliability release.

Security

  • Pin SHA-256 for the Kokoro model and all 35 CMU ARCTIC starter voice clips; verify every download (and pre-existing files) before use. festvox serves no HTTPS, so the pinned digests make the transport untrusted. Bounded reads + atomic same-filesystem installs.

Fixes

  • Repair Kokoro re-download: deleting then re-downloading the model now actually fetches it again.
  • Dictation HUD no longer clips the top of a single-line transcript.
  • Read guard: re-reading text in a window you haven't clicked into now warns instead of replaying the previous window's selection (press again to override).

Install: brew install --cask latent-variable/tap/yap (or grab the DMG + xattr -cr /Applications/Yap.app).