A production-grade, zero-config YouTube media downloader for your terminal.
Project description
VidSmith
๐ค Built by AI โ Idea by the Owner This entire project โ all source code, tests, UI, and documentation โ was developed by an AI coding assistant (Claude). The original idea, product direction, and ownership belong to the repository owner, Naga Manikanta Nandyala.
A production-grade, zero-config YouTube media downloader for your terminal.
VidSmith wraps the full power of yt-dlp in a polished interactive CLI: paste a URL, press 1, and get the best possible file โ same stream selection as the official yt-dlp CLI, with subtitles, chapters, metadata, and cover art embedded automatically.
__ ___ _ ____ _ _ _
\ \ / (_) __| / ___| _ __ ___ (_) |_| |__
\ \ / /| |/ _` \___ \| '_ ` _ \| | __| '_ \
\ V / | | (_| |___) | | | | | | | |_| | | |
\_/ |_|\__,_|____/|_| |_| |_|_|\__|_| |_|
Features
- โญ Best Download โ one keypress, zero configuration. Selects the exact
VP9+Opus streams (
313+251/308+251/303+251/302+251) and merges to MKV without transcoding. - ๐ฏ Custom wizards โ quality, container (MP4/MKV/WebM), subtitles, audio format, playlists โ all through guided multi-step prompts.
- ๐ต Audio mode โ MP3, M4A, FLAC, Opus, WAV with metadata and cover art.
- ๐ Transcripts โ download captions and convert to TXT, Markdown, or JSON.
- ๐ฌ Professional subtitle handling โ many languages at once; failures (e.g. HTTP 429) are reported per-language, never fatal.
- ๐ผ๏ธ Honest thumbnail embedding โ tells you exactly what each container supports instead of failing silently.
- ๐ Rich progress + summary โ live speed/ETA, then a full report: resolution, FPS, HDR, codecs, bitrates, file size, subtitle outcome.
- ๐ฉบ
vidsmith doctorโ one command to diagnose your environment. - โฏ๏ธ Resume support โ interrupted downloads continue from
.partfiles.
Screenshot
โญโโโโโโโโโโโโโโโโโโโโ โ
Best Download Complete โโโโโโโโโโโโโโโโโโโโโฎ
โ โ
โ Video Name Survive 30 Days Chained To A Strangerโฆ โ
โ Channel MrBeast โ
โ Container MKV โ
โ Resolution 1920x1080 FPS 30 fps โ
โ Video Codec vp9 Video Bitrate 1490 kbps โ
โ Audio Codec opus Audio Bitrate 128 kbps โ
โ File Size 406.2 MB Download Time 2m 43s โ
โ โ
โ โ Metadata Embedded โ
โ โ Thumbnail Embedded โ
โ Supported by MKV container โ
โ โ Resume Supported โ
โ โ
โ Primary Subtitle English โ
โ Other Subtitles 23 languages โ
โ Subtitles Downloaded 24 โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
Installation
pip install vidsmith
Or install the latest development version from GitHub:
pip install git+https://github.com/Nagamanikanta2331/VidSmith.git
Or clone and install from source:
git clone https://github.com/Nagamanikanta2331/VidSmith.git
cd VidSmith
pip install -e .
Prerequisites
- Python 3.12+
- yt-dlp: Installed automatically for you when you run the installation command above. No manual installation is required!
Recommended System Tools
While VidSmith comes with fallbacks, installing these system tools ensures maximum performance and compatibility:
1. FFmpeg (for media conversion and muxing)
If not found, VidSmith uses a bundled fallback (imageio-ffmpeg), but a native installation is faster and more robust.
- Windows:
winget install ffmpeg(or download from gyan.dev) - macOS:
brew install ffmpeg - Linux:
sudo apt install ffmpeg(Ubuntu/Debian)
2. Node.js or Deno (for complex YouTube extractions) YouTube occasionally requires executing JavaScript to extract certain video formats.
- Windows/macOS/Linux: Download from Node.js or install Deno via
iwr https://deno.land/install.ps1 -useb | iex(Windows) /curl -fsSL https://deno.land/install.sh | sh(macOS/Linux).
Verify your environment:
vidsmith doctor
Quick Start
vidsmith
- Paste a YouTube URL (video, Shorts, or playlist) and press Enter.
- VidSmith analyses it and shows a menu โ option 1 is always โญ Best Download.
- Press 1 + Enter. Done.
A live progress bar tracks the download; a summary panel reports exactly what you got.
Commands
| Command | Purpose |
|---|---|
vidsmith |
Launch the interactive app |
vidsmith doctor |
Diagnose environment (tools, network, YouTube access) |
vidsmith doctor --no-network |
Same, skipping connectivity checks |
vidsmith --version |
Print the version |
Modes
โญ Recommended (Best Download)
Zero configuration. Automatically:
| What | How |
|---|---|
| Video | VP9 preference chain: 313+251/308+251/303+251/302+251, then bestvideo+bestaudio |
| Audio | Best available track (e.g. Opus 128k) |
| Container | MKV โ holds any codec, subtitles, chapters, and cover art |
| Subtitles | Manual + auto captions downloaded and embedded |
| Metadata | Title, channel, date, description embedded |
| Chapters | Embedded when the video has them |
| Thumbnail | Embedded as MKV attachment (always visible) |
Custom video
Guided wizard: output directory โ quality (Best/4K/2K/1080p/720p/480p/360p) โ container (MP4/MKV/WebM) โ subtitles โ confirm.
Choosing MP4 restricts streams to MP4-compatible codecs for maximum device compatibility. Choose MKV for maximum quality.
Audio
Wizard: format (MP3/M4A/FLAC/Opus/WAV) โ bitrate โ thumbnail โ metadata.
Transcript
Downloads captions and converts to clean TXT, Markdown, or JSON โ with optional timestamps.
Subtitles / Thumbnail only
Direct menu actions save subtitle files or the best thumbnail without downloading media.
Configuration
VidSmith is deliberately zero-config for the common case. Power users can
tune the provider via the YouTubeProvider(config=...) API:
| Key | Default | Purpose |
|---|---|---|
download_retries |
3 |
Full-download retry attempts |
subtitle_sleep_interval |
1 |
Seconds between subtitle requests (429 protection) |
ffmpeg_location |
auto | Explicit FFmpeg path |
metadata_cache_size |
16 |
Analyzed-URL cache entries |
Persistent user settings (config file) are on the roadmap.
Dependencies
| Package | Role |
|---|---|
yt-dlp |
Extraction and downloading |
rich |
Terminal UI |
curl_cffi |
Browser impersonation (reduces YouTube rate limiting) |
mutagen |
Visible MP4/M4A cover-art atoms |
webvtt-py |
Transcript parsing |
imageio-ffmpeg |
Bundled FFmpeg fallback |
Optional (auto-detected, recommended):
- Deno or Node.js โ JS runtime for full YouTube format parity
- AtomicParsley โ alternative MP4 cover-art writer
Troubleshooting
Run vidsmith doctor first. It diagnoses nearly every common problem.
| Symptom | Cause & fix |
|---|---|
| "Impersonation โฆ not available" | pip install curl_cffi |
| Thumbnail invisible in Windows Explorer (MP4/M4A) | pip install mutagen โ or use MKV. Windows Explorer ignores ffmpeg's attached_pic; VLC/MediaInfo show it. |
| HTTP 429 on subtitles | YouTube rate limiting. VidSmith throttles and continues; failed languages are listed in the summary. Retry later for missing ones. |
| "Some formats may be missing" | Install Deno (or Node.js). |
| Download smaller than other tools | Modern codecs such as VP9 give the same quality in half the size of H.264. Compare resolution/codec, not bytes. |
| Interrupted download | Rerun the same download โ it resumes from .part. |
FAQ
Why MKV by default?
It's the only mainstream container that holds any codec plus subtitles,
chapters, and cover art without re-encoding โ and it's what
yt-dlp --merge-output-format mkv produces. Choose MP4 in the custom wizard if
a device requires it.
Is quality identical to yt-dlp? Best Download intentionally prefers VP9+Opus before falling back to yt-dlp's generic bestvideo+bestaudio selector. Custom MKV downloads still use the normal yt-dlp-style best selector.
Does it re-encode? No. Streams are merged, never transcoded (except explicit audio-format conversion in Audio mode).
Playlists? Yes โ Best Download and the custom wizard both support playlists with per-item progress and failure reporting.
Roadmap
- Persistent settings file (
~/.config/vidsmith/) - Subtitle/thumbnail embedding options in the custom wizard
- Non-interactive one-shot mode (
vidsmith <url> --best) - Textual full-screen TUI
- Additional providers behind the existing
ProviderABC
Contributing
Contributions welcome! See CONTRIBUTING.md for setup, quality gates, and PR guidelines. Please note the Code of Conduct.
pip install -e ".[dev]"
pre-commit install
pytest
License
MIT ยฉ Naga Manikanta Nandyala
VidSmith is an independent project built on yt-dlp. Download only content you are authorized to access.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file vidsmith-1.0.0.tar.gz.
File metadata
- Download URL: vidsmith-1.0.0.tar.gz
- Upload date:
- Size: 96.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9ee9ce2298f905261c11e9f2cecb88fd529dc42d35686f847501e3f80de04ff7
|
|
| MD5 |
c0bff7a1f3b0cc0c2286b238d441d7ae
|
|
| BLAKE2b-256 |
6916595d037c7377bf816ace19043aed7efb511d99865b0bec2ef081ae470f83
|
Provenance
The following attestation bundles were made for vidsmith-1.0.0.tar.gz:
Publisher:
release.yml on Nagamanikanta2331/VidSmith
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
vidsmith-1.0.0.tar.gz -
Subject digest:
9ee9ce2298f905261c11e9f2cecb88fd529dc42d35686f847501e3f80de04ff7 - Sigstore transparency entry: 2186868201
- Sigstore integration time:
-
Permalink:
Nagamanikanta2331/VidSmith@774ddf1d4135daa29ca621e4c891a43274a43067 -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/Nagamanikanta2331
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@774ddf1d4135daa29ca621e4c891a43274a43067 -
Trigger Event:
push
-
Statement type:
File details
Details for the file vidsmith-1.0.0-py3-none-any.whl.
File metadata
- Download URL: vidsmith-1.0.0-py3-none-any.whl
- Upload date:
- Size: 133.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
41d73f6506549c169865b8c7971f0848553182e7a2b57e5609ce25953e3c3d9c
|
|
| MD5 |
0a59f5aaa8d30f8ca558a268d8dc7546
|
|
| BLAKE2b-256 |
cc4d2b6a4963bc7413f597a7b32d0e84ed986532de0ee15422bba5d292d59828
|
Provenance
The following attestation bundles were made for vidsmith-1.0.0-py3-none-any.whl:
Publisher:
release.yml on Nagamanikanta2331/VidSmith
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
vidsmith-1.0.0-py3-none-any.whl -
Subject digest:
41d73f6506549c169865b8c7971f0848553182e7a2b57e5609ce25953e3c3d9c - Sigstore transparency entry: 2186868225
- Sigstore integration time:
-
Permalink:
Nagamanikanta2331/VidSmith@774ddf1d4135daa29ca621e4c891a43274a43067 -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/Nagamanikanta2331
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@774ddf1d4135daa29ca621e4c891a43274a43067 -
Trigger Event:
push
-
Statement type: