yt-instruct
Convert YouTube videos into structured markdown instruction documents.
Downloads audio via yt-dlp, transcribes with Mistral's voxtral API, then generates a clean how-to document using Claude.
Quick Start
# Run with uvx (no install needed)
uvx --from . yt-instruct https://www.youtube.com/watch?v=<id>
# Or install
pip install -e .
yt-instruct https://www.youtube.com/watch?v=<id>
Requirements
ffmpeg—brew install ffmpegorapt install ffmpegMISTRAL_API_KEY— console.mistral.aiANTHROPIC_API_KEY— for default backendNVIDIA_API_KEY— only for--backend nvidia
Usage
yt-instruct [OPTIONS] URL [URL...]
yt-instruct [OPTIONS] --url-file urls.txt
yt-instruct [OPTIONS] --transcript-file transcript.txt --title "Name"
yt-instruct [OPTIONS] --audio-file recording.mp3 --title "Name"
Options:
--output-dir PATH Output directory [default: .]
--keep Keep intermediate audio + transcript files
--merge Merge all videos into one document
--resume Skip already-generated outputs; reuse cached transcripts
--no-generate Stop after transcription; skip LLM generation
--content-type [tutorial|lecture|ib|auto]
Prompt style [default: auto]
--backend [anthropic|llm|nvidia]
LLM backend [default: anthropic]
--model TEXT Model name [default: claude-sonnet-4-6]
--prompt-file PATH Custom system prompt (overrides built-in)
--language LANG Output language (e.g. 'French'). Defaults to English.
--transcript-file PATH Use existing transcript; skips download and transcription
--audio-file PATH Use existing audio file; skips download, transcribes directly
--title TEXT Video title for --transcript-file or --audio-file
--draft Set draft: true in the output frontmatter [default: false]
--mistral-model TEXT [default: voxtral-mini-latest]
--audio-format [mp3|m4a] [default: mp3]
--version Show version and exit
Output Frontmatter
Every generated file includes YAML frontmatter:
---
title: "Video Title"
url: https://youtu.be/...
description: "YouTube video description"
date: 2026-04-12
draft: false
---
Use --draft to set draft: true (useful for Hugo, Jekyll, or similar static site generators).
Merged documents (--merge) do not include frontmatter.
Content Types
| Type | Use for |
|---|---|
auto |
Let the LLM detect (default) |
tutorial |
How-to / step-by-step videos |
lecture |
Tech talks, academic presentations |
ib |
IB student subject videos |
Custom Prompts
Override the built-in prompt with your own file. Template variables:
{title}, {channel}, {content_type}, {duration}
yt-instruct <url> --prompt-file my_prompt.md
Using the llm backend
pip install llm llm-anthropic
llm keys set anthropic
yt-instruct <url> --backend llm --model claude-sonnet-4-6
Using the nvidia backend
NVIDIA_API_KEY=... yt-instruct <url> --backend nvidia --model moonshotai/kimi-k2-instruct
Batch Processing
# Multiple URLs
yt-instruct url1 url2 url3 --output-dir ./docs
# Playlist (automatically expanded)
yt-instruct https://www.youtube.com/playlist?list=<id> --output-dir ./docs
# From file
cat urls.txt | yt-instruct --url-file /dev/stdin
# Merge all into one doc
yt-instruct url1 url2 --merge --output-dir ./docs
Skip Steps — Use Existing Files
--audio-file and --transcript-file resolve relative to --output-dir if the file isn't found at the given path. This lets you reference files already in the output directory without typing the full path:
# Start from an existing transcript (skips download + transcription)
yt-instruct --transcript-file transcript.txt --title "My Video" --output-dir ./docs
# File not found locally? Looked up in ./docs automatically
yt-instruct --transcript-file my_transcript.txt --output-dir ./docs
# Start from an existing audio file (skips download, still transcribes)
yt-instruct --audio-file recording.mp3 --output-dir ./docs
Resume an Interrupted Run
Use --keep to save transcripts alongside output files, then --resume to continue from where a previous run stopped:
# First run (interrupted partway through)
yt-instruct --url-file urls.txt --keep --output-dir ./docs
# Resume — skips videos with existing output; reuses cached transcripts
yt-instruct --url-file urls.txt --resume --output-dir ./docs
--resume checks at two levels per video:
- Output
.mdalready exists → skip entirely - Cached
*_transcript.txtexists (saved by--keep) → skip download and transcription, regenerate only
Changelog
See CHANGELOG.md for release history.
Metadata
Release files for yt-instruct 1.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| yt_instruct-1.3.0.tar.gz | 20.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| yt_instruct-1.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 39.3 kB
Release files / yt_instruct-1.3.0.tar.gz
| Download URL | yt_instruct-1.3.0.tar.gz |
|---|---|
| Size | 20.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
db456efe83728d6f6315eff4fffd4b007be8d68298b487aeda05d669e8df429e
|
|
BLAKE2b-256 checksum How to use checksums |
241c6b093b5f84831f7508d6016c0867403d6eccad7a0f90673f4c0c6b838723
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 2, 2026.
Transparency logRelease files / yt_instruct-1.3.0-py3-none-any.whl
| Download URL | yt_instruct-1.3.0-py3-none-any.whl |
|---|---|
| Size | 19.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1364606b5f2fd07dae64fff699be4b1c53ae51f522df6601d2e0cdc7d1f96f05
|
|
BLAKE2b-256 checksum How to use checksums |
8be65bb72ec155f58510154d38e2da2eeef5b1f2cd09aa64b97180846eedbd41
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 2, 2026.
Transparency log