Skip to content

Repository files navigation

Kalam 🖋️

A native macOS menu bar app for speech-to-text dictation — built for Hindi + English (including code-mixed Hinglish), and private by default. Local transcription runs on-device via OpenAI Whisper; an optional Sarvam AI cloud engine delivers the best Hindi accuracy available.

macOS Swift License

Features

🔒 Private by Default - The local Whisper engine keeps everything on your Mac: no cloud, no telemetry, no subscriptions.

🇮🇳 Hindi + English, Properly - Choose the Sarvam AI engine (Saaras v3) for the best Hindi/Hinglish accuracy — roughly half the word-error rate of Whisper large-v3 on spontaneous Hindi — with a code-mix mode that keeps Hinglish natural. Saaras v3 supports 22 Indian languages (Hindi, Tamil, Telugu, Bengali, Marathi, Gujarati, Kannada, Malayalam, Punjabi, Odia, and more) plus Indian English, with automatic language detection. Needs a free API key from dashboard.sarvam.ai; falls back to local Whisper automatically if the network fails.

📖 Personal Dictionary - Teach it the words engines keep getting wrong (names, acronyms, course codes). Corrections are whole-word, case-insensitive, and apply to every transcript.

🎨 Beautiful Native UI - Retro-inspired design with modern refinement, featuring a menu bar app and full window interface.

🎙️ Real-time Recording - Record directly from your microphone with live audio level visualization.

📁 File Transcription - Drag & drop audio files (MP3, WAV, M4A, etc.) for batch transcription.

🌍 Multi-language Support - Transcribe in 50+ languages including English, Spanish, French, German, Chinese, Japanese, and more.

📊 Multiple Model Sizes - Choose from 5 model sizes (tiny to large) based on your needs and hardware capabilities.

💾 History & Search - Automatic history saving with full-text search across all transcriptions.

📤 Export Options - Export as Text, Markdown, JSON, or SRT subtitle format.

Apple Silicon Optimized - Leverages Metal and Accelerate frameworks for blazing-fast performance on M1/M2/M3 Macs.

⌨️ Global Hotkey, Two Ways - Tap Cmd+Shift+Space to start/stop, or hold it down and release — walkie-talkie style. Text is automatically inserted at your cursor and copied to clipboard.

⏱️ Live Recording Indicator - A floating pill follows your cursor showing elapsed time and your real voice level; the menu bar icon turns red while recording and purple while transcribing.

🛑 Forgiving by Design - Recordings auto-stop after 2 minutes of silence or 10 minutes total, so a forgotten hotkey never becomes an hour-long recording.

🚀 Auto-Setup - First launch automatically downloads the base model, and Kalam can start itself at login (Settings → General).

🔔 Smart Notifications - Audio/visual feedback when recording starts, stops, transcription completes — and clear, actionable messages when something goes wrong.

Kalam in Action

Kalam stays in your menu bar until you need it. Tap or hold Cmd+Shift+Space from any app, speak, and let the transcript appear at your cursor.

Kalam menu-bar popover ready to transcribe with an audio-file button and drag-to-transcribe instruction

Speak and review Find it later
Kalam showing a completed transcript with private text blurred Kalam transcription history with private text blurred
Review the result, copy it, or start another recording. Search local history by phrase and see each recording's duration.

Transcript content is intentionally blurred in these public screenshots.

Installation

Option 1: Quick Install (Recommended)

Run this in Terminal:

curl -sL https://raw.githubusercontent.com/harshvardhaniimi/kalam/main/install.sh | bash

Then right-click the app in Applications and select "Open" (first time only). Run the same command again whenever you want to update Kalam to the latest GitHub release. Updates preserve your settings, downloaded models, and transcription History, and keep the prior app bundle as a recoverable backup.

Option 2: Build from Source

  1. Clone the repository:

    git clone https://github.com/harshvardhaniimi/kalam.git
    cd whisper-mac
  2. Build the app:

    ./build-app.sh
  3. Run:

    open Kalam.app

Or open Package.swift in Xcode and press ⌘+R.

Option 3: Manual Download

  1. Download the latest Kalam.zip from Releases
  2. Unzip and move Kalam.app to your Applications folder
  3. Remove quarantine (required for apps not notarized with Apple):
    xattr -cr /Applications/Kalam.app
  4. Open the app - Right-click → Open (first time only)

Quick Start

First Launch

  1. Launch Kalam — Look for the waveform icon in the menu bar.
  2. Allow Microphone access — macOS asks the first time you record.
  3. Allow Accessibility access if you want auto-insert — The hotkey and clipboard still work without it.
  4. Choose an engine — Use local Whisper for private, offline English dictation or add a Sarvam API key for Hindi and Hinglish.
  5. Keep a local model ready — The Base model is a compact English default; use Large Turbo for multilingual local transcription.
  6. Press Cmd+Shift+Space anywhere — Tap to toggle or hold to talk.
1. Choose your engine 2. Download a local model
Kalam settings with Sarvam AI selected as the transcription engine Kalam speech model download and selection settings
Sarvam is optional and sends recorded audio to its cloud service. A downloaded Whisper model also provides automatic fallback if Sarvam is unavailable.
3. Make Kalam easy to reach 4. Teach it your vocabulary
Kalam general settings for launch at login and the global hotkey Kalam personal dictionary settings and app information
Start at login and keep the global hotkey enabled for dictation from any app. Add names, acronyms, and specialist terms once so future transcripts use the right spelling.

Using the Global Hotkey (Recommended)

The fastest way to transcribe — two styles, same key:

  • Tap to toggle: press Cmd+Shift+Space, speak, press it again to stop and transcribe.
  • Hold to talk: hold Cmd+Shift+Space down, speak, release — great for quick one-liners.

Either way, the text appears at your cursor and is copied to the clipboard. A floating indicator near your cursor shows the elapsed time and your live voice level while recording.

Example: Writing an email? Click in the email body, press Cmd+Shift+Space, speak your message, press Cmd+Shift+Space again. The transcribed text appears in your email!

Using the Menu Bar App

  1. Click the menu bar icon
  2. Click "Record" and speak
  3. Click "Stop Recording" when done
  4. Copy to clipboard to use the text elsewhere

Transcribing Files

  1. Drag and drop a WAV, MP3, M4A, or FLAC file onto the Kalam menu bar icon or the open popover.
  2. Wait while Kalam transcribes it with your selected engine and model.
  3. Paste immediately because the completed transcript is copied to your clipboard automatically and saved in searchable History.

Prefer the keyboard? Open Kalam and choose the waveform-plus button to select an audio file with the standard macOS file picker.

Supported audio formats: WAV/WAVE/W64, MP3/MP2/MP1, M4A/M4B/M4R, AAC/ADTS, AIFF/AIF/AIFC, CAF, FLAC, OGG/OGA/Opus, AU/SND, AC-3/E-AC-3, AMR/AWB, and 3GP/3G2. Kalam also accepts MP4/M4V and QuickTime MOV/QT/QTA files and extracts only their audio track. Additional formats can work whenever macOS AVFoundation can decode their audio codec.

Engine & Model Selection Guide

Two engines (Settings → Transcription Engine):

Engine Where it runs Best for Needs
Local Whisper On your Mac Privacy, offline use, English A downloaded model
Sarvam AI (Saaras v3) Cloud API Hindi, Hinglish, code-mixed speech Free API key from dashboard.sarvam.ai

Local Whisper models (Settings → Speech Models):

Model Size Speed Best For
Tiny 75 MB ⚡⚡⚡⚡ Quick English notes
Base 142 MB ⚡⚡⚡ General English use
Small 466 MB ⚡⚡ Better English accuracy
Medium 1.5 GB High accuracy
Large Turbo 1.6 GB ⚡⚡ Hindi + English — the only usable local option for Hindi
Large 3.1 GB Maximum accuracy, slowest

Recommendation: use Sarvam for Hindi/Hinglish dictation and Large Turbo as your local model. The tiny/base/small models are effectively English-only — their Hindi word-error rates are far too high for real use.

System Requirements

  • macOS 14.0 (Sonoma) or later
  • RAM:
    • 8 GB minimum (for tiny/base models)
    • 16 GB recommended (for small/medium models)
    • 32 GB for large model
  • Storage: 100 MB - 3 GB per model
  • Microphone (for recording)

Performance Notes:

  • Apple Silicon (M1/M2/M3) provides ~10x better performance than Intel
  • Base model on M1: ~6 seconds to transcribe 1 minute of audio
  • Real-time transcription possible on Apple Silicon with small models

Privacy

🔒 Private by default, honest about the exception:

  • ✅ With the local Whisper engine (default), all processing happens on your Mac — audio never leaves your device, no internet needed after the model download.
  • ⚠️ With the optional Sarvam AI engine, recorded audio is sent to Sarvam's servers for transcription — that's the trade for the best Hindi accuracy. Switch engines any time in Settings.
  • ✅ No data collection or telemetry in the app itself.
  • ✅ Transcription history is stored locally only.
  • ✅ Your Sarvam API key is stored in the macOS Keychain, never in plaintext.

Models are downloaded once from Hugging Face and stored locally:

~/Library/Application Support/Kalam/models/

Technical Details

Architecture:

  • Language: Swift 5.9+
  • UI Framework: SwiftUI
  • Audio: AVFoundation
  • ML Backend: OpenAI Whisper via WhisperKit (CoreML)
  • Acceleration: Apple Neural Engine + CoreML on Apple Silicon

Design Philosophy:

  • Native macOS design patterns
  • Retro-inspired but modern aesthetic
  • Clean, minimal interface
  • Keyboard-first workflow
  • Subtle, purposeful animations

Keyboard Shortcuts

  • Cmd+Shift+Space (anywhere in macOS) - Tap to start/stop recording, or hold to talk; text auto-inserts at cursor
  • ⌘+C - Copy transcription

Global Hotkey

The global hotkey (Cmd+Shift+Space) works out of the box - no Accessibility permissions required for the hotkey itself!

You can:

  • Record from any application
  • Have text automatically inserted at your cursor
  • Text is also copied to clipboard as backup

Note: Text insertion at cursor still requires Accessibility permissions.

Roadmap

  • Core transcription functionality
  • Menu bar app interface
  • Full window interface
  • Model management with auto-download
  • History with search
  • Export functionality
  • Global hotkey (Cmd+Shift+Space) for quick recording
  • Hold-to-talk (press and hold the hotkey, release to transcribe)
  • Text insertion at cursor position
  • Audio/visual feedback notifications
  • Sarvam AI engine for Hindi/Hinglish (with automatic local fallback)
  • Whisper large-v3-turbo model for local multilingual use
  • Personal dictionary (custom vocabulary corrections)
  • Auto-stop on silence / maximum duration
  • Launch at login
  • Live recording indicator with elapsed time
  • Streaming transcription (real-time results via Sarvam WebSocket)
  • Speaker diarization
  • Timestamp display
  • Configurable hotkey (currently Cmd+Shift+Space - no permissions required)
  • App Store distribution

Contributing

Contributions are welcome! Please feel free to submit pull requests or open issues.

Troubleshooting

App doesn't appear in menu bar:

  • Check that LSUIElement is set in Info.plist
  • Restart the app

Global hotkey (Cmd+Shift+Space) not working:

  • Make sure the hotkey is enabled in Settings
  • Check if another app is using the same hotkey (e.g., Spotlight, another app)
  • Restart the app

Text not inserting at cursor:

  • Enable Accessibility permissions (see above)
  • The text is always copied to clipboard as a backup - use Cmd+V to paste
  • Make sure you're focused in a text input field

Microphone not working (checkbox looks enabled but recording fails):

  • macOS ties permissions to the app's code signature; after updating Kalam the old grant can go stale even though the checkbox stays on.
  • Fix: tccutil reset Microphone io.kalam.app in Terminal, relaunch Kalam, and allow when prompted.
  • Same idea for paste-at-cursor: remove the Kalam entry in System Settings → Privacy & Security → Accessibility and re-add /Applications/Kalam.app.

Sarvam engine errors:

  • Check the API key in Settings (get one at dashboard.sarvam.ai) and your internet connection.
  • Kalam automatically falls back to the local Whisper model when Sarvam is unreachable, so download a local model as a safety net.

Model didn't auto-download on first launch:

  • Check internet connection
  • Go to Settings and manually download the base model
  • Check ~/Library/Application Support/Kalam/models/

Poor transcription quality:

  • Try a larger model (small or medium)
  • Ensure good audio quality (clear voice, minimal background noise)
  • Check microphone input levels
  • Speak clearly and avoid background noise

Slow performance:

  • Use a smaller model (tiny or base)
  • Close resource-intensive apps
  • Check Activity Monitor for CPU/RAM usage

Model download fails:

  • Check internet connection
  • Try again (downloads can be large)
  • Manually download from Hugging Face if needed

Uninstall

To completely remove Kalam and all its data:

curl -sL https://raw.githubusercontent.com/harshvardhaniimi/kalam/main/uninstall.sh | bash

Or manually:

  1. Quit Kalam
  2. Delete /Applications/Kalam.app
  3. Delete ~/Library/Application Support/Kalam/ (contains models and history)

Contributing & Feedback

We welcome your feedback! This project is actively maintained and we'd love to hear from you:

  • 🐛 Bug Reports: Open an issue with detailed steps to reproduce
  • 💡 Feature Requests: Describe the feature and why it would be useful
  • 🔧 Pull Requests: Contributions are welcome! Please open an issue first to discuss major changes
  • 💬 General Feedback: Share your experience using Kalam

A Note on Development

This application was entirely vibe coded using Claude Code - Anthropic's AI coding assistant. The entire codebase, from architecture to implementation, was developed through conversational AI pair programming. We believe this represents an exciting new paradigm in software development.

If you encounter any quirks or have suggestions for improvement, please don't hesitate to reach out!

Credits

License

MIT License - see LICENSE file for details.

This project uses OpenAI's Whisper model, which is also licensed under MIT.

Support

  • 🐛 Report issues on GitHub
  • ⭐ Star the project if you find it useful!

Author

Created with Claude Code by Dr. Harshvardhan


Note: This app is not affiliated with OpenAI or Anthropic. Whisper is an open-source model created by OpenAI.

About

Speech-to-text app for macOS, completely local and free

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages