Skip to main content

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 / | | (_| |___) | | | | | | | |_| | | |
   \_/  |_|\__,_|____/|_| |_| |_|_|\__|_| |_|

CI PyPI Python 3.12+ License: MIT


Features

  • โญ Best Download โ€” one keypress, zero configuration. Picks the best available streams (VP9 preferred) and merges to MP4 without transcoding, with subtitles, chapters, metadata, and cover art embedded.
  • ๐Ÿ“š Playlists โ€” parallel & complete โ€” download entire playlists (or a custom range) with up to 5 items downloading simultaneously, per-item subtitles embedded, live progress, and honest completed/failed/warning reporting.
  • ๐Ÿ“ฑ Shorts โ€” paste a youtube.com/shorts/... link and it just works: same menu, same embedding, vertical video handled natively.
  • ๐ŸŽฏ Custom wizards โ€” quality, container (MP4/MKV/WebM), subtitles, audio format, playlists โ€” all through guided multi-step prompts.
  • ๐Ÿ’ฌ Professional subtitle handling โ€” Telugu, Hindi, Tamil, and English (manual preferred over auto-generated) requested for every download, including each playlist item; missing languages are skipped silently and failures (e.g. HTTP 429) are reported per-language, never fatal.
  • ๐ŸŽต Audio mode โ€” MP3, M4A, FLAC, Opus, WAV with metadata and cover art.
  • ๐Ÿ“ Transcripts โ€” download captions and convert to TXT, Markdown, or JSON.
  • ๐Ÿ–ผ๏ธ 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, per-language subtitle outcome.
  • โฉ Continue-or-switch prompt โ€” after every download: press Enter to keep working with the same video, n to paste a new URL, q to quit.
  • ๐Ÿฉบ vidsmith doctor โ€” one command to diagnose your environment.
  • โฏ๏ธ Resume support โ€” interrupted downloads continue from .part files.

Screenshot

โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ โœ“ Best Download Complete โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚                                                                   โ”‚
โ”‚   Video Name             Survive 30 Days Chained To A Strangerโ€ฆ   โ”‚
โ”‚   Channel                MrBeast                                  โ”‚
โ”‚   Container              MP4                                      โ”‚
โ”‚   Resolution             1920x1080       FPS  30 fps              โ”‚
โ”‚   Video Codec            vp9             Video Bitrate  1490 kbps โ”‚
โ”‚   Audio Codec            mp4a.40.2       Audio Bitrate  130 kbps  โ”‚
โ”‚   File Size              406.2 MB        Download Time  2m 43s    โ”‚
โ”‚                                                                   โ”‚
โ”‚   Metadata               โœ“ Embedded                               โ”‚
โ”‚   Thumbnail              โœ“ Embedded                               โ”‚
โ”‚   Resume                 โœ“ Supported                              โ”‚
โ”‚   Telugu (te) Subtitle   โœ“ Embedded                               โ”‚
โ”‚   Hindi (hi) Subtitle    โœ“ Embedded                               โ”‚
โ”‚   Tamil (ta) Subtitle    โœ“ Embedded                               โ”‚
โ”‚   English (en) Subtitle  โœ“ Embedded                               โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ

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 .

Updating

Get the newest release from PyPI (using --no-cache-dir ensures pip doesn't use a stale cached version):

pip install --upgrade --no-cache-dir vidsmith

Or update straight from GitHub (picks up changes as soon as they are pushed, without waiting for a PyPI release):

pip install --upgrade --force-reinstall --no-deps git+https://github.com/Nagamanikanta2331/VidSmith.git

Check your installed version anytime:

vidsmith --version

Uninstalling

pip uninstall vidsmith

This removes the package and the vidsmith command. Your downloaded media is never touched. To also remove saved settings and logs, delete the config folder: %APPDATA%\VidSmith on Windows, or ~/.config/vidsmith on Linux/macOS.

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
  1. Paste a YouTube URL (video, Shorts, or playlist) and press Enter.
  2. VidSmith analyses it and shows a menu โ€” option 1 is always โญ Best Download.
  3. 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
pip install --upgrade --no-cache-dir vidsmith Update to the latest release
pip uninstall vidsmith Remove VidSmith

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.

Playlists

Paste a playlist URL and the menu switches to playlist actions:

  • โญ Best Download โ€” every item gets the full Best Download treatment (best streams, MP4, subtitles, thumbnail, metadata, chapters), downloading several items in parallel (your max_concurrency setting, default 3).
  • Custom Playlist Download โ€” guided wizard: item selection (all / range like 1-10 / specific items) โ†’ video or audio โ†’ quality โ†’ subtitles (Telugu/Hindi/Tamil/English multi-select; English is always included as a mandatory fallback) โ†’ output directory โ†’ parallel downloads (1โ€“5) โ†’ confirm.
  • Audio / subtitles / thumbnails for the whole playlist โ€” dedicated menu entries.

The summary panel reports completed/failed counts honestly: an item whose media downloaded fine but whose thumbnail or subtitle embed check failed is counted as completed with a warning, never as a failed download โ€” and failure reasons are shown in full, not truncated into uselessness.

Videos nobody could download โ€” private videos and videos whose channel was deleted โ€” are not counted as failures either. They show up as skipped, with the reason: Completed: 39/39 available (4 skipped: 2 private, 2 deleted). If your YouTube account actually has access to a private video, enable Browser Cookies in Settings and it will download.

Shorts

YouTube Shorts URLs (youtube.com/shorts/...) are fully supported โ€” paste one and you get the same menu and the same treatment as a regular video: best streams (AV1/VP9 vertical), embedded subtitles in all supported languages, thumbnail, and metadata.

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
cookies_from_browser off Browser to import YouTube cookies from (enables private videos you have access to)

Persistent user settings live in the in-app Settings menu (press s): default quality, audio format, output directory, parallel downloads (max_concurrency), cleanup behavior, browser cookies (for private videos your account can access), and more โ€” saved to the VidSmith config directory automatically.


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 items downloading in parallel (up to 5 at a time), per-item subtitle embedding, live progress, and honest per-item failure/warning reporting. Shorts links work too.


Roadmap

  • Subtitle/thumbnail embedding options in the custom video wizard
  • Non-interactive one-shot mode (vidsmith <url> --best)
  • Textual full-screen TUI
  • Additional providers behind the existing Provider ABC

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


Download files

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

Source Distribution

vidsmith-1.1.2.tar.gz (103.0 kB view details)

Uploaded Source

Built Distribution

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

vidsmith-1.1.2-py3-none-any.whl (139.0 kB view details)

Uploaded Python 3

File details

Details for the file vidsmith-1.1.2.tar.gz.

File metadata

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

File hashes

Hashes for vidsmith-1.1.2.tar.gz
Algorithm Hash digest
SHA256 260d77d5995f181c079678392e556d49a903c2653ccd2fad5d89b7d35c031a6e
MD5 d7341c6e257485cc9649d7ee9c9ed33a
BLAKE2b-256 bc16298571b145b2c0a26944edbef8422822782b502cd1c94b484aca2fa68832

See more details on using hashes here.

Provenance

The following attestation bundles were made for vidsmith-1.1.2.tar.gz:

Publisher: release.yml on Nagamanikanta2331/VidSmith

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

File details

Details for the file vidsmith-1.1.2-py3-none-any.whl.

File metadata

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

File hashes

Hashes for vidsmith-1.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 7b13ecc0fba6f58ea54e5fe33cda528539bb02bead9ba56cbf3e2de583ad19f2
MD5 976d32ae0ea8cc82df6dba9db7fb10db
BLAKE2b-256 b411a9039c4f2e5e48e6a8ad4a09d7d11b5f7d93b8dd63b8761030762658b90d

See more details on using hashes here.

Provenance

The following attestation bundles were made for vidsmith-1.1.2-py3-none-any.whl:

Publisher: release.yml on Nagamanikanta2331/VidSmith

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