Skip to content

ServerWrestler/Lexed

Repository files navigation

Lexed icon

Lexed

Real-time captions that highlight and define the jargon you don't know — live, on-device, private.

lexed.app · macOS 13+ · Swift / SwiftUI


Lexed listens to the person across the table (or on the call), turns their speech into live on-screen captions, and the instant they say a term from your glossary — a technical acronym, a piece of company jargon, a buzzword — it highlights the word and shows you its definition. No more nodding along to "we need this to be idempotent behind the SLA" and quietly panicking.

Built for job interviews, sales calls, standups, and meetings where you want to follow every word without breaking eye contact to Google an acronym.

Privacy first. Lexed uses Apple's on-device Speech framework and is sandboxed with no network access, so the audio never leaves your Mac — nothing is recorded, uploaded, or sent to any server. See docs/PRIVACY.md.


Features

  • 🎧 Captures system audio from any app — Zoom, Google Meet, Teams, Slack huddles — via ScreenCaptureKit. No virtual audio device needed. (Or switch to the microphone for in-person meetings.)
  • 🎯 Per-app capture — scope to a single app (e.g. only Zoom) so music, notifications, and other apps are ignored.
  • 🎙️ Live transcription using Apple's Speech framework, with continuous (unlimited-length) recognition.
  • Inline keyword highlighting — glossary terms light up the moment they're spoken.
  • 📖 Instant definitions — a "current definition" card plus a running list of every term heard this session, with counts and timestamps.
  • 🔒 On-device only — no network entitlement, no recording, sandboxed; audio never leaves the Mac.
  • 📝 Editable glossary — add/edit terms, aliases ("k8s" → Kubernetes), categories, and source links; import/export as JSON.
  • 🖱️ Click any highlighted word in the transcript to pull up its definition.
  • 🔤 Adjustable caption size, auto-scroll, and selectable text.
  • 🌍 Multi-language recognition (any locale with an installed on-device model).

Quick start

Requires macOS 13 (Ventura) or later and Xcode 15+.

git clone https://github.com/ServerWrestler/Lexed.git
cd Lexed
open Package.swift        # opens the package in Xcode

In Xcode, select the Lexed scheme and press Run (⌘R). The app launches with its Dock icon and menu bar.

You can also build/test from the command line with swift build and swift test. Running via Xcode is recommended so the macOS permission prompts behave correctly.

The first time you press Listen, macOS asks for permission:

  • Speech Recognition — always (Lexed transcribes).
  • Screen Recording — when the audio source is System audio (ScreenCaptureKit captures app/call audio through this permission). macOS may require you to relaunch Lexed after granting it the first time.
  • Microphone — when the audio source is Microphone.

On-device model required. Lexed is on-device only — it will not start until your language's offline dictation model is installed. Add it in System Settings ▸ Keyboard ▸ Dictation (this downloads the offline model), then pick that language in Lexed's Settings. This is what guarantees the audio never leaves your Mac.


Troubleshooting

  • Pressed Listen and nothing happens? Read the orange status line in the window — it says exactly what's wrong. The usual cause is the on-device model not being installed: System Settings ▸ Keyboard ▸ Dictation ▸ add your language, wait for it to download, then try again.
  • Permissions: check System Settings ▸ Privacy & Security ▸ Speech Recognition (and Microphone or Screen Recording for your source) and make sure Lexed is enabled. After granting Screen Recording, macOS usually requires you to quit and relaunch Lexed.
  • Settings: Lexed ▸ Settings… in the menu bar, or press ⌘,.

How to use it

  1. Pick your audio source. Open Settings (⌘,):
    • System audio (apps & calls) — captures the audio your Mac plays, so it hears the other person on a Zoom/Meet/Teams call or Slack huddle. Needs Screen Recording permission.
    • Microphone (in person) — captures the mic, for face-to-face meetings.
  2. Set up your glossary. Click Keywords in the toolbar. Lexed ships with 28 common tech/business terms (API, SLA, CI/CD, OKR, Kubernetes, …). Add the acronyms and jargon specific to the company you're interviewing with.
  3. Position the window where you can glance at it during the conversation.
  4. Press Listen (⌘L). Captions stream in real time.
  5. When the speaker says a glossary term, it highlights in the transcript and its definition appears on the right. Click any highlighted word to re-focus its definition.
  6. Clear (⇧⌘K) between conversations.

Tips for interviews & meetings

  • Before a specific interview, export your glossary, tweak it for that company's stack, and import it back — or keep multiple JSON files.
  • For remote interviews, use System audio so you caption the interviewer through Zoom/Meet. For in-person, use Microphone.

Capturing call audio (Zoom / Meet / Teams / Slack)

This is built in — no virtual audio device required. In Settings, choose System audio (apps & calls). Lexed uses ScreenCaptureKit to read the audio your Mac is playing (excluding Lexed's own output) and transcribes it on-device.

  • Requires Screen Recording permission (System Settings ▸ Privacy & Security ▸ Screen Recording). macOS may ask you to relaunch Lexed after you grant it.
  • Capture just one app. In Settings, the App menu lists running apps. Pick Zoom (or Meet/Teams/Slack) to transcribe only that app and ignore music, notifications, and everything else. Leave it on All audio to capture everything you hear. Hit the refresh button if you opened the app after Lexed.

Glossary format

The glossary is a plain JSON array. Each entry:

{
  "term": "SLA",
  "definition": "Service Level Agreement — a commitment about how reliable or fast a service will be.",
  "aliases": ["service level agreement"],
  "category": "Operations",
  "source": "https://en.wikipedia.org/wiki/Service-level_agreement"
}
Field Required Notes
term Canonical term shown in the UI.
definition Plain-language explanation.
aliases Other spoken/written forms that should also match.
category Optional grouping label shown as a chip.
source Optional "Learn more" URL.
id Optional UUID; auto-generated if omitted.

Your editable copy lives at ~/Library/Application Support/Lexed/keywords.json. The bundled starter set is Sources/Lexed/Resources/keywords.json.


Project layout

Lexed/
├── Package.swift                 # SwiftPM manifest (executable + test target)
├── Sources/Lexed/
│   ├── LexedApp.swift            # @main App, scenes, menu commands
│   ├── Models.swift              # Keyword, DetectedTerm
│   ├── Glossary.swift            # load/save/import/export keyword store
│   ├── KeywordIndex.swift        # compiled regex matcher (the matching engine)
│   ├── AudioCapture.swift        # system-audio (ScreenCaptureKit) + microphone backends
│   ├── SpeechRecognizer.swift    # SFSpeechRecognizer, on-device, live + rotating
│   ├── LexedViewModel.swift      # ties speech + glossary → highlighted transcript
│   ├── Views/                    # SwiftUI: transcript, sidebar, glossary editor, settings
│   ├── Resources/keywords.json   # starter glossary
│   ├── Resources/AppIcon.png     # app icon (set at runtime for Dock/About)
│   ├── Info.plist                # TCC usage strings, bundle metadata
│   └── Lexed.entitlements        # sandbox + audio-input (for signed release builds)
├── Tests/LexedTests/             # unit tests for the matching engine
└── docs/                         # ARCHITECTURE, PRIVACY

See docs/ARCHITECTURE.md for how the pieces fit together.


Roadmap

  • System-audio capture via ScreenCaptureKit (caption the far side of a call without a virtual device).
  • Per-app audio selection (capture a single app, e.g. only Zoom).
  • Floating always-on-top caption overlay / picture-in-picture mode.
  • Per-context glossary profiles (switch between "interview", "standup", …).
  • Transcript export (Markdown / .txt) with detected terms appended.
  • Adopt SpeechAnalyzer / SpeechTranscriber on macOS 26+ for lower-latency streaming.
  • Optional definition lookups for unknown words via a local dictionary.
  • Signed & notarized release builds + Homebrew cask.

Contributing

PRs welcome — see CONTRIBUTING.md. Run swift test before submitting; the matching engine is covered by unit tests and should stay green.

License

MIT © Lexed contributors.

Built with Apple's on-device Speech framework. Not affiliated with Apple Inc.

About

Live speech transcription

Topics

Resources

License

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages