Stop Paying for Otter.ai! transcribe-md Runs Locally in Claude Code
Stop Paying for Otter.ai! transcribe-md Runs Locally in Claude Code
Your meeting notes are a mess. You know it. I know it. Every developer who's sat through a two-hour architecture review knows it.
You're scrambling to type while someone explains the Kubernetes migration. You miss half of it. You ask them to repeat themselves. They sigh. You end up with bullet points that make zero sense three days later. Or worse—you shell out $20/month for yet another SaaS transcription tool that sends your sensitive engineering discussions to who-knows-where.
What if I told you there's a way to get perfect, timestamped, speaker-labeled transcripts written directly to Markdown↗ Smart Converter—without ever leaving your terminal? No browser tabs. No cloud APIs. No subscription fatigue. Just pure, local, GPU-accelerated transcription running inside Claude Code or Cursor.
Enter transcribe-md, the open-source secret weapon that's making paid transcription services obsolete for Mac developers.
What is transcribe-md?
transcribe-md is a live audio transcription tool created by Matej Hrescak that converts your microphone and system audio into clean, timestamped Markdown files—in real-time, entirely on your local machine. Built specifically for macOS 14+ and designed to integrate seamlessly with Claude Code and Cursor, it eliminates the friction between "having a conversation" and "having usable notes."
Here's what makes this tool genuinely remarkable: the entire codebase was written by Claude Opus 4.6. The Python↗ Bright Coding Blog transcription engine, the Swift system audio helper, the installer script—everything. It's a fascinating meta-example of AI-assisted development producing production-ready tooling for AI-assisted workflows.
The project leverages whisper.cpp (Georgi Gerganov's blazing-fast C++ port of OpenAI's Whisper) with Metal GPU acceleration, meaning transcription happens at machine-native speeds without thermal throttling your laptop. No Python environment hell. No CUDA drivers. No cloud latency. Just your Mac's Neural Engine and GPU working in concert.
Why is it trending now? Three converging forces:
- AI coding assistants (Claude Code, Cursor) have become primary work environments, and developers want everything inside them
- Privacy paranoia is justified—engineering discussions contain sensitive architecture decisions, API keys in logs, unreleased product details
- Subscription fatigue has reached a breaking point; developers are aggressively reclaiming self-hosted alternatives
transcribe-md hits all three pain points with surgical precision.
Key Features That Separate It from the Pack
Let's dissect what makes transcribe-md technically superior to browser-based alternatives:
Dual-Channel Audio Intelligence The tool simultaneously captures your microphone ("You") and system audio ("Them") as separate streams. This isn't simple stereo recording—it's source-separated transcription that understands conversational turn-taking. The Swift-based system audio tap uses macOS ScreenCaptureKit directly, no BlackHole or virtual audio cable hacks required.
Echo Deduplication Engine Here's a problem most transcription tools ignore: when you're on speakers, your microphone picks up the other person's voice. transcribe-md solves this with text similarity matching that detects and removes these acoustic echoes. You get clean speaker labels without duplicate content.
Real-Time Markdown Streaming Transcripts append live to your file as chunks complete. The format is immediately usable—no export step, no proprietary format lock-in:
**[14:30:05] You:** So the main issue is the authentication flow...
Chunked Parallel Processing
Audio streams in configurable chunks (default 10 seconds) with parallel transcription pipelines. The base.en model (~150MB) loads once and stays resident, so subsequent chunks process with minimal latency.
Zero-Configuration Installation One curl command registers the tool as a native skill in both Claude Code and Cursor. The installer handles ffmpeg, whisper.cpp compilation with Metal flags, model download, and Swift binary compilation automatically.
GPU-Accelerated whisper.cpp Unlike Python-based Whisper implementations that bottleneck on CPU, transcribe-md uses whisper.cpp's Metal backend. On Apple Silicon, this means near-real-time transcription with minimal battery impact.
Use Cases Where transcribe-md Absolutely Dominates
1. Engineering Standups and Sprint Planning
Type /transcribe-md sprint-42-notes.md, run your standup, and have structured notes before you've stood up from your chair. Action items, blockers, and technical decisions are timestamped and searchable.
2. Pair Programming Sessions
Capture the entire collaborative debugging flow. When you revisit that weird race condition discussion three weeks later, you have the exact reasoning that led to your mutex strategy—not just the final code.
3. User Research and Customer Calls
System audio capture means you transcribe Zoom/Meet/Teams calls without requesting recording permission. The other party never knows you're transcribing (check your local laws, obviously). Your notes stay in your Obsidian vault, not some SaaS database.
4. Conference Talks and Tech Talks
Attending (or giving) a talk? --mic-only captures your own presentation while --duration 60 auto-stops after the session. You get a publishable transcript without lifting a finger.
5. Accessibility and Focus Enhancement
Developers with ADHD, auditory processing differences, or non-native English speakers get a second pass at complex technical discussions. The transcript becomes a searchable reference, reducing cognitive load.
6. Compliance and Documentation
For regulated industries, local processing means zero data residency concerns. Your healthcare architecture review never touches a cloud API. Your transcript stays on your encrypted disk.
Step-by-Step Installation & Setup Guide
Ready to never take manual meeting notes again? Here's the complete setup:
One-Line Installation
# Install transcribe-md and register as skill in Claude Code + Cursor
curl -fsSL https://raw.githubusercontent.com/hrescak/transcribe-md/main/install.sh | bash
That's it. Seriously. But let's understand what just happened under the hood.
What the Installer Actually Does
# 1. Clones repository to persistent location
~/.local/share/transcribe-md/
# 2. Links skill into Claude Code's command system
~/.claude/commands/transcribe-md.md
# 3. Copies skill definition into Cursor
~/.cursor/skills-cursor/transcribe-md/
# 4. Installs and compiles dependencies:
# - ffmpeg (via Homebrew, for mic capture)
# - whisper.cpp (compiled from source with Metal support)
# - base.en model (~150MB from HuggingFace)
# - system-audio-tap Swift binary (ScreenCaptureKit wrapper)
Re-running the installer updates to the latest version idempotently.
Critical Permission Setup
Before first use, grant Screen Recording permission to your terminal:
System Settings → Privacy & Security → Screen Recording → Add [Your Terminal]
This is required for ScreenCaptureKit to capture system audio. Without it, you'll only get microphone transcription.
Verify Installation
# List available microphones to confirm ffmpeg access
~/.local/share/transcribe-md/scripts/transcribe-to-md --devices
# Test with 1-minute auto-stop
~/.local/share/transcribe-md/scripts/transcribe-to-md --duration 1 test.md
Environment Requirements Checklist
| Requirement | Verification |
|---|---|
| macOS 14+ (Sonoma) | sw_vers -productVersion |
| Apple Silicon or Intel Mac | uname -m (arm64 or x86_64) |
| Python 3 | python3 --version |
| Homebrew | brew --version |
| Screen Recording permission | System Settings GUI |
REAL Code Examples from the Repository
Let's examine the actual implementation patterns that make transcribe-md work. These examples are derived directly from the repository's README and architecture.
Example 1: Basic Claude Code Usage
The simplest invocation—start recording and stop when your meeting ends:
# Inside Claude Code or Cursor prompt
/transcribe-md meeting.md
This triggers the skill definition installed at ~/.claude/commands/transcribe-md.md, which delegates to the main script. The file meeting.md is created or appended with a fresh transcript header. Recording continues until you explicitly stop it (Ctrl+C or equivalent).
Behind the scenes, the script spawns two audio capture processes and a whisper.cpp inference loop, coordinating through temporary WAV files in ~/.cache/transcribe-cli/.
Example 2: Timed Recording for Structured Meetings
Prevent runaway recordings when you step away from your desk:
# Auto-stop after 30 minutes—perfect for scheduled meetings
/transcribe-md --duration 30 quarterly-planning.md
The --duration flag accepts minutes as integers. This is ideal for:
- Calendar-blocked meetings where you know the end time
- Conference talks with fixed slots
- Interviews with legal time limits
The timer runs independently of transcription completion, so your final chunks may process briefly after recording stops.
Example 3: Microphone-Only Mode for Solo Dictation
When you don't need system audio—just your own voice:
# Skip system audio capture entirely
/transcribe-md --mic-only architecture-thoughts.md
This mode:
- Avoids ScreenCaptureKit permission requirements
- Reduces CPU/GPU load by 50% (single stream)
- Eliminates echo deduplication overhead
- Perfect for voice memos, brainstorming, or solo coding narration
Example 4: Direct Script Execution with Full Options
Bypass the AI assistant integration and run the engine directly:
# Full path to script with all available flags
~/.local/share/transcribe-md/scripts/transcribe-to-md meeting.md
The complete option surface:
# Use specific microphone (list first to find index)
~/.local/share/transcribe-md/scripts/transcribe-to-md --devices
# Output: [0] MacBook Pro Microphone, [1] AirPods Pro
~/.local/share/transcribe-md/scripts/transcribe-to-md --mic 1 --duration 15 interview.md
# Faster chunk processing for lower latency (more GPU usage)
~/.local/share/transcribe-md/scripts/transcribe-to-md --chunk 5 live-demo.md
# Verify dependencies without recording
~/.local/share/transcribe-md/scripts/transcribe-to-md --setup
The --chunk 5 example reduces latency from 10 seconds to 5 seconds between speech and transcription, at the cost of more frequent model inference calls. For live demos where you want near-real-time display, this tradeoff is worthwhile.
Example 5: The Output Format You Actually Get
Here's the exact Markdown structure produced:
## Transcript -- 2025-06-15 14:30
**[14:30:05] You:** So the main issue is the authentication flow breaks on mobile.
**[14:30:12] Them:** Right, I think the redirect URI isn't being handled correctly by the webview.
**[14:30:21] You:** Can we use the universal links approach instead?
**[14:30:28] Them:** Yeah, that should work. Let me check if the backend already supports it.
Key formatting decisions:
##header with ISO-style date and time for Obsidian/Jekyll compatibility**[HH:MM:SS] Speaker:**pattern enables regex parsing and consistent styling- Double newline separation prevents Markdown rendering as a single paragraph
- Speaker labels are semantic ("You"/"Them") rather than arbitrary names
This structure imports cleanly into:
- Obsidian (transcript becomes linked notes)
- GitHub/GitLab (rendered issue comments)
- Static site generators (Jekyll, Hugo, MkDocs)
- LLM context windows (structured, token-efficient)
Advanced Usage & Best Practices
Optimize for Your Hardware
On M1/M2 Macs with 8GB RAM, stick with the default base.en model. On M3 Pro/Max with 18GB+ unified memory, you could experiment with larger whisper.cpp models by modifying the model path in the script—but the installer optimizes for the base model for good reason.
Headphones = Cleaner Transcripts While echo deduplication works impressively well, wearing headphones eliminates the acoustic loop entirely. This reduces GPU load and improves transcription accuracy for the "Them" channel.
Integrate with Your Note-Taking System Create a cron job or Hazel rule that processes completed transcripts:
# Auto-tag transcripts with meeting type based on filename
# Move to Obsidian vault, extract action items with local LLM, etc.
Combine with AI Summarization Feed your transcript back to Claude Code:
/summarize meeting.md --extract-action-items --identify-decisions
The Markdown format is already optimized for LLM consumption.
Version Control Your Meetings For critical architectural decisions, commit transcripts to your docs repository. The timestamped format provides immutable records of when decisions were made and who advocated for them.
Comparison with Alternatives
| Feature | transcribe-md | Otter.ai | Zoom Native | MacWhisper |
|---|---|---|---|---|
| Cost | Free (MIT) | $8-20/month | Free (limited) | Free-$29 one-time |
| Privacy | 100% local | Cloud processed | Cloud processed | Local |
| AI Integration | Native in Claude/Cursor | Separate app | None | None |
| System Audio | Native capture | Requires routing | Only in-meeting | Manual file input |
| Real-time Output | Live Markdown | Live web UI | Live (in-meeting) | File-based |
| Speaker Labels | You/Them semantic | AI-detected names | Basic | None |
| Echo Handling | Built-in dedup | N/A | N/A | N/A |
| Setup Complexity | One command | Account + app | Pre-installed | Manual install |
| Open Source | ✅ Full source | ❌ Proprietary | ❌ Proprietary | ❌ Proprietary |
| Customizable | Python + Swift, hackable | Locked UX | Locked UX | Limited |
The verdict? If you live in Claude Code or Cursor, transcribe-md is the only option that feels native. If you need cross-platform or Windows support, MacWhisper is solid but lacks real-time system audio. If you don't care about privacy, Otter.ai has superior speaker identification—but you're paying monthly for something transcribe-md does for free.
FAQ: What Developers Actually Ask
Q: Does transcribe-md work on Windows or Linux? A: No—macOS 14+ only. The system audio capture depends on ScreenCaptureKit, which is Apple-exclusive. The whisper.cpp core could theoretically port, but the Swift audio helper would need complete rewriting.
Q: How accurate is the base.en model? A: Surprisingly good for technical English. Whisper's base model handles jargon, acronyms, and code references better than generic cloud transcription. For heavily accented speakers or non-English, consider larger whisper models (manual configuration required).
Q: Can I use this in video calls without the other person knowing? A: Technically yes, legally check your jurisdiction. The tool captures system audio at the OS level, so there's no "recording" indicator in the call app. Ethical use is your responsibility.
Q: Does it work with Bluetooth headphones? A: Yes, but with caveats. Bluetooth adds latency that can desync the two audio channels. The echo deduplication compensates somewhat, but wired headphones or speakers yield cleaner results.
Q: How much disk space does the cache use? A: Approximately 200MB for whisper.cpp + model, plus temporary WAV files during active transcription. The installer cleans chunks aggressively; persistent storage is minimal.
Q: Can I transcribe past audio files instead of live capture?
A: Not directly—the tool is optimized for real-time streaming. For file transcription, use whisper.cpp directly: whisper-cli -f existing.wav -of output.
Q: What happens if my Mac sleeps during a long recording?
A: Recording pauses on sleep and resumes on wake, but timing accuracy degrades. For critical long recordings, use --duration with caffeinate to prevent sleep: caffeinate -i transcribe-to-md --duration 120 long-meeting.md.
Conclusion: Your Meetings Deserve Better Than Your Memory
Let's be brutally honest: your current note-taking system is failing you. Scattered bullet points, context lost to time, subscription fees bleeding your budget, and sensitive engineering discussions living in someone else's cloud.
transcribe-md represents a fundamentally different philosophy: your workflow, your hardware, your data. It doesn't ask you to open another app. It doesn't send your authentication architecture to a server farm. It just sits quietly in your Claude Code or Cursor environment, waiting for you to type /transcribe-md and forget about it.
The fact that this entire tool was AI-generated by Claude Opus 4.6—and now runs inside Claude Code—feels like a glimpse of the self-improving developer toolchain future. We're building tools that build tools, and transcribe-md is a polished, practical example of that recursion.
Stop typing during meetings. Start transcribing with intelligence.
Grab transcribe-md from GitHub, run that one-line installer, and join the growing number of developers who've reclaimed their meeting productivity. Your future self—reviewing that perfectly timestamped Markdown transcript—will thank you.
Found this breakdown useful? Star the transcribe-md repository and share your transcription workflows in the discussions.
Outils recommandés
Explore on the BrightCoding network
Hand-picked resources from our other sites.
Turn Any Database Into a Spreadsheet in 5 Minutes: The Complete NocoDB Guide for 2026
Transform your SQL databases into powerful, collaborative spreadsheets without writing a single line of code. Learn how NocoDB helps 50,000+ teams visualize MyS...
TagStudio: The File Organizer Every Creator Needs
TagStudio revolutionizes file management with a powerful tag-based system that works as a non-destructive layer over your existing folders. This comprehensive g...
Stop Manually Taking Meeting Notes! Use meetscribe Instead
Discover meetscribe: fully local meeting transcription with speaker diarization, AI summaries, and PDF output. Works offline with any meeting app, respects your...
Continuez votre lecture
Extracting Text from Images & QR Codes: Free Tools, Safety Secrets, and Game-Changing Use Cases
The Ultimate Restaurant Revolution: How Order & Reservation Systems Boost Revenue by 300% (2025 Guide)
The Ultimate 2026 Guide: Convert Any File Across 1000+ Formats (Free Tools & Safety Blueprint)
Stop Coding Alone: OPC-Skills Gives Your AI Agent Superpowers
Commentaires 0
Aucun commentaire pour l'instant. Soyez le premier à réagir !