TubeStoevsky
Downloads a YouTube video transcript and turns it into literary prose through a LangChain LLM chain — outputs TXT + MD.
Works with any OpenAI-compatible chat completions API: a local gateway, Ollama, vLLM, OpenAI, or anything else speaking that protocol.
How it works
URL
├─ yt-dlp subtitles (manual > auto) -> {title}.srt
├─ SRT parser timecodes and rolling dupes -> raw text
├─ LangChain prose -> title -> Markdown
└─ output {title}.txt, {title}.md
Install
# as a CLI tool
uv tool install tubestoevsky # or: pip install tubestoevsky
tubestoevsky --help
# from a checkout, for development
uv sync
Configuration
Copy .env.example to .env and set LLM_API_KEY. The file
is read from the current directory, the project root, or
~/.config/tubestoevsky/.env.
| Variable | Purpose | Default |
|---|---|---|
LLM_BASE_URL |
OpenAI-compatible endpoint (/v1 appended when absent) |
http://127.0.0.1:4000 |
LLM_API_KEY |
API key for that endpoint | required |
LLM_MODEL |
model name served by it | gpt-4o-mini |
TRANSCRIPT_LANG |
subtitle language | en |
OUTPUT_DIR |
output directory | . |
LLM_TEMPERATURE |
sampling temperature | 0.3 |
LLM_TIMEOUT |
request timeout, sec | 1800 |
YTDLP_COOKIES / YTDLP_COOKIES_FROM_BROWSER |
access to restricted videos | — |
Usage
tubestoevsky <URL>
tubestoevsky <URL> --lang en --out ./out
tubestoevsky <URL> --model gpt-4o-mini
# or without installing:
uvx tubestoevsky <URL>
# from a checkout:
uv run python -m transcript_app <URL>
Layout
transcript_app/
__main__.py CLI
config.py .env + CLI flags
downloader.py yt-dlp
srt.py subtitle parser
chain.py LangChain chain over the API
prompts.py step prompts
outputs.py .txt/.md writers
Notes
- LLM steps stream: some gateways fail to return monolithic responses.
Accept-Encoding: identityanduse_responses_api=Falsework around proxy hangs.- Run long requests in the foreground.
Metadata
Release files for tubestoevsky 1.0.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 | |
|---|---|---|---|
| tubestoevsky-1.0.0.tar.gz | 121.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| tubestoevsky-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 133.4 kB
Release files / tubestoevsky-1.0.0.tar.gz
| Download URL | tubestoevsky-1.0.0.tar.gz |
|---|---|
| Size | 121.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
140bafc49e6f352610f03e570075e3179e8f2cb517f62b79e4b920d31880f9e1
|
|
BLAKE2b-256 checksum How to use checksums |
4d06c26506d36c06878c957faf576db55d10e9713ef85b39d4fa44222585ae64
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / tubestoevsky-1.0.0-py3-none-any.whl
| Download URL | tubestoevsky-1.0.0-py3-none-any.whl |
|---|---|
| Size | 11.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
357ebfcc09108ecc75172fb62bd25392120a38d65960b71d925533d05f4d9560
|
|
BLAKE2b-256 checksum How to use checksums |
b17cc6600caa5effd457e2cdd3c4a0c7520b080ed9f2854cc5fdea2b41816819
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|