anyscribe  ·  v0.13.0  ·  MIT open source recording · local-first

The command‑line scribe for spoken things.

Give anyscribe anything with a voice in it — a YouTube video, an Instagram reel, a podcast, a meeting recording, a file on your disk — and it hands back clean, searchable markdown in an Obsidian vault on your own machine. Seven transcription engines behind one plain-English quality knob, speaker labels on request, and a fully offline mode. No account. No lock-in.

install  ·  macos & linux ● one line
$curl -fsSL https://raw.githubusercontent.com/rishmadaan/anyscribecli/main/install.sh | bash
or pip install anyscribecli · windows: irm https://…/install.ps1 | iex
Platforms
macOS · Linux · Win
Requires
Python 3.10+
Engines
Seven, incl. offline
Licence
MIT
§01  what it is
any.
the promise · in one syllable

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, cleans up the audio, sends it through the engine you've picked, and files the result into a folder of markdown you own forever.

Never touched a command line? There's a wizard for that — scribe ui opens a local dashboard in your browser and walks you through the whole thing.

Written in Python. Open source under MIT. Small enough to read in an afternoon.

§02  how it feels

Paste a link.
Walk away. Come back
to a manuscript.

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.

~/work     anyscribe · live
rish@studio ~/work  
01  ·  download, via yt-dlp + ffmpeg click the terminal to replay transcribe, then write  ·  02
§03  what's in the box

Every affordance you'd want if this
was your first CLI tool.
Every detail you'd want if it wasn't.

01

Obsidian-native output

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.

02

One knob, seven engines

Don't know which service to pick? Don't. Choose --quality accuracy, balanced, cost, or free and anyscribe routes to the right engine — from ElevenLabs Scribe down to fully offline Whisper. Seven providers in all; name one explicitly whenever you'd rather.

03

Speaker diarization

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.

04

A proper web UI, too

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.

05

Local & private by default

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.

06

Talks to your tools

--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.

§04  the quality knob

Tell it what matters.
It picks the engine.

Comparing seven transcription services is nobody's idea of fun. So don't. Pass one word — how accurate, how cheap, or free — and anyscribe routes to the engine that fits. Want a specific provider? Name it and it obeys.

--quality accuracy

Accuracy

When the words have to be right — legal, medical, anything you'll quote.

routes to ElevenLabs Scribe
--quality balanced

Balanced

The sensible default. Great transcripts, native speaker labels, fair price.

routes to Deepgram Nova
--quality cost

Cost

Long backlogs, rough drafts, anything where cheap-and-fast wins.

routes to Groq Whisper
--quality free

Free

Sensitive audio, no budget, no signal. Runs entirely on your machine.

routes to Local Whisper · $0

Under the knob sit seven engines you can also call by name — --provider deepgram — each with its own strengths.

OpenAI Whisper

general

The reliable workhorse. General-purpose, multilingual, word-level timestamps. Files >25 MB get auto-chunked.

~$0.006 / min 57 languages word-level ts

Deepgram Nova

balanced tier

Best-in-class speaker separation. Native diarization, Hinglish support, $200 free credit on signup.

~$0.0043 / min 36+ languages native diarize

ElevenLabs Scribe

accuracy tier

99 languages, top-tier accuracy on Western European audio. Word-level timestamps plus per-word confidence scores.

~$0.005 / min 99 languages word confidence

Groq Whisper

cost tier

Whisper-large-v3-turbo on Groq's silicon — the cheapest, fastest cloud route. The pick when you have a backlog to burn through.

cheapest cloud very fast multilingual

Sarvam AI

indic

Purpose-built for Indic languages. Hindi, Tamil, Telugu, Bengali, Marathi, Kannada, Malayalam, Gujarati, Punjabi.

rupee-priced 11 Indic langs made in India

OpenRouter

flexible

Audio-via-chat through GPT-4o-audio-preview and friends. One API key, many models, pay per-token.

model choice per-token many models

Local whisper

free · offline

faster-whisper on your own CPU or GPU. No API key, no network, no bills, no audio leaving the building. Perfect for sensitive recordings — or a flight. Set it up once with scribe local setup --model base.

$0 · forever offline CPU or GPU
§05  what it writes

Markdown that feels
like a document.

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.

i.

Your vault, your files.

Everything under ~/anyscribe/. Change the path with scribe config set workspace_path. Point Obsidian at it and it just works.

ii.

Searchable out of the box.

A master _index.md with every transcript newest-first. Daily logs in daily/. Per-platform folders — youtube/, instagram/, local/.

iii.

YAML for everything.

Title, duration, language, word count, reading time, tags. Obsidian properties out of the box — filter, sort, query with Dataview.

iv.

Diarized when you ask.

Add --diarize and you get speaker-labelled turns with timestamps. Perfect for meetings, interviews, panel discussions.

~/anyscribe/sources/youtube/perfect-espresso.md MD
title: "How to Pull the Perfect Espresso"
platform: youtube
duration: "12:34"
language: en
word_count: 1847
reading_time: "9 min"
provider: deepgram
tags: [transcript, coffee]

How to Pull the Perfect Espresso

Transcribed · 2026-04-18 · deepgram · diarized

Transcript

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

§06  for builders & agents

Not just used. Called.

Most people never need this section. But if you're wiring anyscribe into scripts, CI, or an AI agent — it's a good unix citizen. Every command takes --json, a Claude Code skill ships in the box, and an MCP server is one flag away.

Claude Code skill

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.

$scribe install-skill

MCP server

Ten tools over Model Context Protocol. Plugs into Claude Desktop, Cursor, and any MCP-speaking host. Transcribe, batch, configure — all scriptable.

$pip install anyscribecli[mcp]

JSON output

Every primary command accepts --json. Machine-readable metadata, file paths, provider info — ready for scripts and agents.

$scribe "url" --json
§07  the first five minutes

Install anyscribe. Run
the wizard. Go.

One command installs everything. Then scribe ui opens a wizard in your browser that checks your system, installs missing pieces (yt-dlp, ffmpeg), and walks you through picking an engine. From nothing to your first transcript in about five minutes.

$curl -fsSL https://raw.githubusercontent.com/rishmadaan/anyscribecli/main/install.sh | bash

Installs Python (if missing), ffmpeg, yt-dlp, and the anyscribe CLI. Works on macOS (Homebrew) and Linux (apt, dnf, pacman).

>irm https://raw.githubusercontent.com/rishmadaan/anyscribecli/main/install.ps1 | iex

PowerShell on native Windows. If you're on WSL2, use the macOS / Linux command above.

$pip install anyscribecli

If you already have Python 3.10+, yt-dlp and ffmpeg, pip is the shortest path there is.

i.

Open the wizard in your browser

Runs a local dashboard at 127.0.0.1:8457 — no cloud, no account. Pick an engine, paste a key (with a live Test button), confirm your folder. Prefer the terminal? scribe onboard does the same with arrow keys.   scribe ui

ii.

Transcribe your first thing

Pass a YouTube URL, an Instagram reel, or a local file. The markdown lands in ~/anyscribe/. Add --diarize for speaker labels.   scribe "https://youtube.com/watch?v=…"

iii.

Open the vault in Obsidian

“Open folder as vault” → point at ~/anyscribe/. You'll see _index.md, sources/, and daily/.

copied