anyscribe listens to anything with a voice in it — a YouTube video, an Instagram reel, a podcast, a meeting recording, a file on your disk — and hands back clean, searchable markdown in an Obsidian vault on your own machine. Six transcription engines, speaker diarization, a fully offline mode. Zero lock-in.
Point anyscribe at any spoken thing — a link, a file, a folder of recordings — and it returns clean markdown you can read, grep, share, or hand to an AI.
No browser extensions. No paid SaaS dashboards. No scrubbing through a video to cherry-pick a quote. anyscribe is a single command on your machine: it downloads the media, normalises the audio, routes it through the transcription engine you've picked, and files the result into a folder of markdown you own forever.
Written in Python. Open source under MIT. Small enough to read in an afternoon.
One command handles the whole pipeline. Download the media, normalise the audio, route it through your chosen engine, format with YAML frontmatter, file into your vault. No subcommand. No config flags. Just the URL.
Every transcript is markdown with proper YAML frontmatter — title, platform, duration, language, word count, reading time, tags. Daily logs in daily/, a master _index.md newest-first, per-platform folders. Everything lives in ~/anyscribe/ — a real folder you can grep, git-clone, or open in Obsidian.
OpenAI Whisper, Deepgram Nova, ElevenLabs Scribe, Sarvam (for Indic languages), OpenRouter, and Local (faster-whisper — fully offline, no API key, no bills). Switch engines with one config flag. anyscribe auto-routes certain jobs to the right engine.
Add --diarize for multi-speaker transcripts. Turns get grouped by speaker with timestamps — ideal for meetings, interviews, podcasts. anyscribe auto-switches to Deepgram for the best separation, unless you override it.
scribe ui launches a local dashboard at 127.0.0.1:8457. Paste URLs, watch progress live over WebSocket, browse your transcript history, manage config — all backed by the exact same engine as the CLI.
Audio never leaves your machine unless you've picked a cloud engine. The Local option is fully offline, no API key, free forever. Config and API keys live in ~/.anyscribecli/ — nowhere else. No analytics, no tracking, no cookies.
--json on every primary command for clean machine output. A Claude Code skill that installs itself when Claude is detected. An MCP server bundled in the box — pip install anyscribecli[mcp] — that plugs into Claude Desktop, Cursor, and anything else speaking MCP.
Six engines, one config flag. Some are fast, some are cheap, some speak 99 languages, some run entirely on your laptop with no API key at all. anyscribe keeps you in control.
The reliable workhorse. General-purpose, multilingual, word-level timestamps. Files >25 MB get auto-chunked.
Best-in-class speaker separation. Native diarization, Hinglish support, $200 free credit on signup.
99 languages, highest accuracy on Western European audio. Word-level timestamps plus per-word confidence scores.
Purpose-built for Indic languages. Hindi, Tamil, Telugu, Bengali, Marathi, Kannada, Malayalam, Gujarati, Punjabi.
Audio-via-chat through GPT-4o-audio-preview and friends. One API key, many models, pay per-token.
faster-whisper on your own CPU or GPU. No API key, no network, no bills. Perfect for sensitive audio or a flight.
Not a transcript dump. Every note gets proper metadata, a sensible header, timestamps and speaker labels when you ask — so Obsidian, ripgrep, and git all play nicely, and so does any model you hand it to.
Everything under ~/anyscribe/. Change the path with scribe config set workspace_path. Point Obsidian at it and it just works.
A master _index.md with every transcript newest-first. Daily logs in daily/. Per-platform folders — youtube/, instagram/, local/.
Title, duration, language, word count, reading time, tags. Obsidian properties out of the box — filter, sort, query with Dataview.
Add --diarize and you get speaker-labelled turns with timestamps. Perfect for meetings, interviews, panel discussions.
00:04HOSTToday we're going to talk about the three variables that actually matter when you're pulling espresso — grind, dose, and yield.
00:19GUESTRight, and the trick is that none of them matter in isolation. It's the ratio between them that defines the shot.
00:31HOSTSo if I'm starting out, what's the one thing I should lock in first?
00:38GUESTDose. Weigh your beans — 18 grams in, 36 out, in 27 to 32 seconds…
… 1,739 more words
anyscribe is a good unix citizen — every command takes --json, a Claude Code skill ships in the box, and an MCP server is one flag away. Plug it into whatever you're already building with.
Onboarding detects Claude Code and installs a skill that teaches Claude how to use anyscribe — decision tree, safety rules, JSON patterns. Claude picks the right flags for the job.
Nine tools over Model Context Protocol. Plugs into Claude Desktop, Cursor, and any MCP-speaking host. Transcribe, batch, configure — all scriptable.
Every primary command accepts --json. Machine-readable metadata, file paths, provider info — ready for scripts and agents.
The setup wizard checks your system, installs missing pieces (yt-dlp, ffmpeg), walks you through picking an engine, and asks for an API key. Nothing to working in about five minutes.
Installs Python (if missing), ffmpeg, yt-dlp, and the anyscribe CLI. Works on macOS (Homebrew) and Linux (apt, dnf, pacman).
PowerShell on native Windows. If you're on WSL2, use the macOS / Linux command above.
If you already have Python 3.10+, yt-dlp and ffmpeg, pip is the shortest path there is.
Arrow-key selectors for engine, language, workspace path. Your API key lands at ~/.anyscribecli/.env, never sent anywhere except the provider you chose. scribe onboard
A local dashboard at 127.0.0.1:8457. Same pipeline as the CLI, just with a mouse. scribe ui
Pass a YouTube URL, an Instagram reel, or a local file. The markdown lands in ~/anyscribe/. scribe "https://youtube.com/watch?v=…"
“Open folder as vault” → point at ~/anyscribe/. You'll see _index.md, sources/, and daily/.