Skip to main content

CLI tool to download, transcribe, and convert video/audio to structured markdown

Project description

anyscribecli

Download. Transcribe. Markdown. A CLI tool that turns YouTube videos, Instagram reels, and local audio/video files into structured, searchable markdown — browsable in Obsidian.

Python 3.10+ License: MIT PyPI Platforms: macOS, Linux, Windows


What it does

URL or local file → Download/convert audio → Transcribe → Formatted Markdown → Obsidian Vault
  • 6 transcription providers — OpenAI Whisper, Deepgram Nova, ElevenLabs, OpenRouter, Sarvam AI, Local (offline)
  • Speaker diarization--diarize flag for multi-speaker transcripts (meetings, interviews, podcasts)
  • 3 input sources — YouTube, Instagram (reels + posts), local files (mp3, mp4, m4a, wav, opus, ogg, flac, webm)
  • Obsidian-native output — YAML frontmatter, word count, reading time, tags
  • Master index + daily logs — browse everything in Obsidian
  • Download-only mode — grab video or audio without transcribing
  • Batch processing — transcribe a list of URLs from a file
  • --json on main commands — for scripting and AI agent integration
  • Arrow-key onboarding wizard — interactive setup, installs missing dependencies

Quick Start

Install

# From PyPI (recommended)
pip install anyscribecli

# Or use the install script (macOS/Linux — checks and installs dependencies too)
curl -fsSL https://raw.githubusercontent.com/rishmadaan/anyscribecli/main/install.sh | bash

# Or clone for development
git clone https://github.com/rishmadaan/anyscribecli.git
cd anyscribecli && pip install -e .

Set up

macOS / Linux:

ascli onboard

Windows:

python -m anyscribecli onboard

Windows note: pip installs ascli to a Scripts directory that's often not on PATH. python -m anyscribecli always works — and on first run it prints the exact PowerShell command to add ascli to your PATH permanently.

Interactive wizard with arrow-key selectors:

  1. Checks system dependencies (yt-dlp, ffmpeg) — installs missing ones
  2. Choose provider from 5 options (arrow keys)
  3. Enter API key
  4. Configure Instagram credentials (optional)
  5. Choose language, media storage, post-transcription download behavior
  6. Creates your Obsidian workspace

Transcribe

# From a URL
ascli transcribe "https://www.youtube.com/watch?v=VIDEO_ID"

# From a local file
ascli transcribe /path/to/podcast.mp3

Always wrap URLs in quotes — shells like zsh break URLs with ? in them. Or just run ascli transcribe and paste when prompted. Local file paths don't need quotes.

Download (no transcription)

ascli download "https://www.youtube.com/watch?v=VIDEO_ID"            # video
ascli download "https://www.youtube.com/watch?v=VIDEO_ID" --audio-only  # audio

Commands

Command Description
ascli onboard Interactive setup wizard
ascli transcribe "<url or file>" Transcribe a video or local file to markdown
ascli download "<url>" Download video or audio only
ascli batch <file> Batch transcribe URLs or file paths from a file
ascli config show/set/path View and change settings
ascli providers list/test Manage transcription providers
ascli install-skill Install Claude Code skill
ascli update Update to the latest version
ascli doctor Check system health

Transcribe options

ascli transcribe "<url>"
  --provider, -p <name>    # Override provider (openai, deepgram, elevenlabs, local, etc.)
  --language, -l <code>    # Language code (default: auto-detect)
  --diarize, -d            # Enable speaker diarization (multi-speaker transcripts)
  --json, -j               # JSON output for scripting/AI agents
  --keep-media             # Keep the downloaded audio file
  --clipboard, -c          # Read URL from clipboard
  --quiet, -q              # Suppress progress output

Provide a URL, file path, or use interactive mode:

ascli transcribe "https://..."     # quoted URL (primary)
ascli transcribe /path/to/file.mp3 # local audio/video file
ascli transcribe                    # interactive prompt (no quoting needed)
ascli transcribe --clipboard        # read URL from system clipboard

Download options

ascli download "<url>"
  --video / --audio-only     # Video (default) or audio only
  --json, -j                 # JSON output
  --quiet, -q                # Suppress progress
  --clipboard, -c            # Read URL from clipboard

Batch options

ascli batch <file>
  --provider, -p <name>      # Override provider
  --language, -l <code>      # Override language
  --json, -j                 # JSON output
  --keep-media               # Keep audio files
  --quiet, -q                # Suppress progress
  --stop-on-error            # Stop at first failure

JSON output

ascli transcribe "https://youtube.com/watch?v=abc123" --json
{
  "success": true,
  "file": "~/anyscribe/sources/youtube/video-title.md",
  "title": "Video Title",
  "platform": "youtube",
  "duration": "12:34",
  "language": "en",
  "word_count": 1500,
  "provider": "openai"
}

Prerequisites

The onboarding wizard checks for these and offers to install them:

Dependency Required Install
Python 3.10+ Yes python.org
yt-dlp Yes brew install yt-dlp or pip install yt-dlp
ffmpeg Yes brew install ffmpeg or ffmpeg.org
API key Yes (for cloud providers) See Provider Guide

Directory structure

~/anyscribe/                              # Obsidian vault (configurable)
├── _index.md                             # Master index (newest first)
├── sources/
│   ├── youtube/<slug>.md
│   ├── instagram/<slug>.md
│   └── local/<slug>.md
└── daily/YYYY-MM-DD.md

~/.anyscribecli/                          # App internals (hidden)
├── config.yaml                           # Settings (no secrets)
├── .env                                  # API keys + passwords
├── downloads/                            # Downloads (separate from vault)
│   ├── audio/<platform>/                 # Kept audio (if keep_media=true)
│   └── video/<platform>/                 # Downloaded videos
├── sessions/                             # Login sessions
└── logs/                                 # Processing logs

Workspace is visible and configurable — transcripts default to ~/anyscribe/ (no hidden dot-dir). Change it with ascli config set workspace_path /your/path. Downloads stay separate to keep the vault lightweight.

Providers

Provider Best for API key
OpenAI Whisper (default) General purpose, multilingual OPENAI_API_KEY
Deepgram Nova Diarization (auto-selected with --diarize), Hinglish DEEPGRAM_API_KEY
ElevenLabs Scribe High accuracy, 99 languages, word timestamps ELEVENLABS_API_KEY
Sarvam AI Indic languages (Hindi, Tamil, Telugu, etc.) SARGAM_API_KEY
OpenRouter Access to various AI models OPENROUTER_API_KEY
Local (faster-whisper) Offline, free, no API key needed None

See Provider Guide for detailed comparison, pricing, and setup.

Configuration

# ~/.anyscribecli/config.yaml
provider: openai          # Transcription provider
language: auto             # Language (auto-detect or ISO code)
keep_media: false          # Keep audio files after transcription
output_format: clean       # clean | timestamped | diarized
diarize: false             # enable speaker diarization
prompt_download: never     # never | ask | always — download video after transcription
local_file_media: skip     # skip | copy | move | ask — what to do with local files
workspace_path: ""         # empty = ~/anyscribe (default), or set a custom path

API keys and passwords live in ~/.anyscribecli/.env (separate from config, never committed). You can set API keys directly:

ascli config set deepgram_api_key YOUR_KEY
ascli config set openai_api_key YOUR_KEY

Diarization auto-routing: When you use --diarize without specifying a provider, scribe automatically switches to Deepgram (if configured) for best speaker detection. Override with -p openai if needed.

See Configuration Guide for all options.

Claude Code Integration

ascli ships with a Claude Code skill that teaches Claude how to transcribe, configure providers, and troubleshoot on your behalf. After installing ascli:

ascli install-skill

Or run ascli onboard — it auto-detects Claude Code and offers to install the skill. Once installed, Claude can use /ascli or auto-activate when you ask it to transcribe something.

Documentation

For Where
First-time users Getting Started
Command reference Commands
All config options Configuration
Provider comparison Providers
AI developers CLAUDE.md
Agent directives AGENTS.md
Developer memory Building Docs

Development

git clone https://github.com/rishmadaan/anyscribecli.git
cd anyscribecli
pip install -e ".[dev]"

ruff check src/          # lint
ruff format src/         # format
pytest                   # test

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

anyscribecli-0.7.2.2.tar.gz (116.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

anyscribecli-0.7.2.2-py3-none-any.whl (81.3 kB view details)

Uploaded Python 3

File details

Details for the file anyscribecli-0.7.2.2.tar.gz.

File metadata

  • Download URL: anyscribecli-0.7.2.2.tar.gz
  • Upload date:
  • Size: 116.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for anyscribecli-0.7.2.2.tar.gz
Algorithm Hash digest
SHA256 b69ede3ee24dbc61ebfe25a66a19985fc78533ccd4edf0df0d0ef89a76dfc6e6
MD5 9a8799d3a59d32a487e160ccfba68f4b
BLAKE2b-256 e93b63adb80bb46d02dc88be31e5067cccb70ba2fa07b9c192732edcf9867f69

See more details on using hashes here.

Provenance

The following attestation bundles were made for anyscribecli-0.7.2.2.tar.gz:

Publisher: publish.yml on rishmadaan/anyscribecli

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file anyscribecli-0.7.2.2-py3-none-any.whl.

File metadata

  • Download URL: anyscribecli-0.7.2.2-py3-none-any.whl
  • Upload date:
  • Size: 81.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for anyscribecli-0.7.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 fa9e14662aeb32da36563a3b00f46e7442307f7a311416f480720a845d197702
MD5 b92c9437265ca2531933160f24d2c9cb
BLAKE2b-256 414c8dc37e3b50ad2de252bf5bacbda9442987f948b1ee38f6acb771046f8ec7

See more details on using hashes here.

Provenance

The following attestation bundles were made for anyscribecli-0.7.2.2-py3-none-any.whl:

Publisher: publish.yml on rishmadaan/anyscribecli

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page