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 and Instagram videos into structured, searchable markdown — browsable in Obsidian.

Python 3.10+ License: MIT Version


What it does

YouTube/Instagram URL → Download audio → Transcribe → Formatted Markdown → Obsidian Vault
  • 5 transcription providers — OpenAI Whisper, ElevenLabs, OpenRouter, Sarvam AI, Local (offline)
  • 2 platforms — YouTube and Instagram (reels + posts)
  • 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 GitHub (recommended)
pip install git+https://github.com/rishmadaan/anyscribecli.git

# Or use the install script (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

ascli onboard

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

ascli transcribe "https://www.youtube.com/watch?v=VIDEO_ID"

Always wrap URLs in quotes — shells like zsh break URLs with ? in them. Or just run ascli transcribe and paste when prompted.

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>" Transcribe a video to markdown
ascli download "<url>" Download video or audio only
ascli batch <file> Batch transcribe URLs from a file
ascli config show/set/path View and change settings
ascli providers list/test Manage transcription providers
ascli update Update to the latest version
ascli doctor Check system health

Transcribe options

ascli transcribe "<url>"
  --provider, -p <name>    # Override provider (openai, elevenlabs, local, etc.)
  --language, -l <code>    # Language code (default: auto-detect)
  --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

Three ways to provide the URL:

ascli transcribe "https://..."     # quoted argument (primary)
ascli transcribe                    # interactive prompt (no quoting needed)
ascli transcribe --clipboard        # read 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": "~/.anyscribecli/workspace/sources/youtube/2026-03-27/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

~/.anyscribecli/
├── config.yaml                           # Settings (no secrets)
├── .env                                  # API keys + passwords
├── workspace/                            # Obsidian vault (pure markdown)
│   ├── _index.md                         # Master index (newest first)
│   ├── sources/
│   │   ├── youtube/YYYY-MM-DD/<slug>.md
│   │   └── instagram/YYYY-MM-DD/<slug>.md
│   └── daily/YYYY-MM-DD.md
├── media/                                # Downloads (separate from vault)
│   ├── audio/<platform>/YYYY-MM-DD/      # Kept audio (if keep_media=true)
│   └── video/<platform>/YYYY-MM-DD/      # Downloaded videos
├── sessions/                             # Login sessions
└── logs/                                 # Processing logs

Media is separate from the vault — your Obsidian workspace stays lightweight, just markdown.

Providers

Provider Best for API key
OpenAI Whisper (default) General purpose, multilingual OPENAI_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
prompt_download: never     # never | ask | always — download video after transcription

API keys and passwords live in ~/.anyscribecli/.env (separate from config, never committed).

See Configuration Guide for all options.

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.3.1.tar.gz (67.5 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.3.1-py3-none-any.whl (47.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: anyscribecli-0.3.1.tar.gz
  • Upload date:
  • Size: 67.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.0

File hashes

Hashes for anyscribecli-0.3.1.tar.gz
Algorithm Hash digest
SHA256 e953a033380550169bf368b5df6f26a427557fe28e9bc3cafd38fadc312ffaa4
MD5 51826a8120c0687eadce70b124340fc8
BLAKE2b-256 d30b2fa3ee81356c51f995adc78ccabc76e5f3a765938442bf057f292d3763a7

See more details on using hashes here.

File details

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

File metadata

  • Download URL: anyscribecli-0.3.1-py3-none-any.whl
  • Upload date:
  • Size: 47.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.0

File hashes

Hashes for anyscribecli-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 d5c9accd77aed868d693e674f3bece489cd97fb2812c29bd507438ae8feeae1e
MD5 14afd320c3e034596148ba3e7ad7ac67
BLAKE2b-256 0c7e35df475b8f8ed8a4047c71b8ff56a2f5dbe027c851e5247d474fa3971d37

See more details on using hashes here.

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