🎬 vyank - YouTube Downloader
vyank is a small Tkinter desktop tool for downloading YouTube videos, audio, playlists, and channel videos. It uses pytubefix for YouTube access and ffmpeg for merging separate high-resolution video and audio streams into a final MP4 file.
The project is packaged as a Python application and is prepared for PyPI distribution. Publishing is not required for local use.
✅ Features
- Simple Tkinter GUI with tabs for different download workflows
- Download a single YouTube video
- Download comma-separated video URLs from the General tab
- Download audio-only streams
- Download playlists
- Download channel videos
- Automatically sanitizes video titles for safe filenames
- Downloads to the user
Downloadsfolder by default - Uses FFmpeg to merge adaptive video-only and audio-only streams
- Packaged with a
vyankconsole entry point for PyPI installation
⚠️ Important Notes
YouTube Terms
Only download content that you own, are allowed to download, or are permitted to use under the content owner's terms. YouTube access behavior may change over time, so updating pytubefix may occasionally be required.
FFmpeg Requirement
vyank needs FFmpeg for video downloads that require separate video and audio streams to be merged.
The application calls ffmpeg from your system PATH. You do not need a hardcoded FFmpeg path in the source code.
Check whether FFmpeg is available:
ffmpeg -version
Install FFmpeg if needed:
Debian/Ubuntu:
sudo apt install ffmpeg
Arch Linux:
sudo pacman -S ffmpeg
Fedora:
sudo dnf install ffmpeg
macOS with Homebrew:
brew install ffmpeg
Windows:
- Download FFmpeg from https://ffmpeg.org/download.html
- Add the FFmpeg
binfolder to your systemPATH - Open a new terminal and run
ffmpeg -version
💾 Installation
After publishing to PyPI, install with:
pip install vyank
For local development from this repository:
cd /path/to/vyank
python -m venv .venv
source .venv/bin/activate
pip install -e .
On Windows PowerShell:
cd C:\path\to\vyank
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -e .
🚀 Usage
Launch the GUI after installation:
vyank
Run directly from the repository without installing:
python -m vyank.main
If you use the included virtual environment during development:
.venv/bin/python -m vyank.main
🖥️ GUI Workflow
General Tab
Use the General tab for one or more normal YouTube video URLs.
- Paste a YouTube URL into the input field.
- For multiple videos, separate URLs with commas.
- Choose the output directory.
- Select the download mode:
Videodownloads the highest available MP4 video stream and merges audio with FFmpeg.Audiodownloads audio only.Video and Audiois shown in the GUI as a shared mode option, but current download handling is focused on video or audio modes.
- Click
Download.
Playlist Tab
Use the Playlist tab for a YouTube playlist URL.
- Paste the playlist URL.
- Choose the output directory.
- Select video or audio mode.
- Click
Download.
Channel Tab
Use the Channel tab for a YouTube channel URL.
- Paste the channel URL.
- Choose the output directory.
- Click
Download.
📁 Default Download Folder
By default, downloads go to:
Linux/macOS:
~/Downloads
Windows:
%USERPROFILE%\Downloads
You can override this from the GUI by choosing another output directory.
📦 Project Structure
vyank/
├── CHANGELOG.md
├── LICENSE
├── MANIFEST.in
├── README.md
├── pyproject.toml
└── vyank/
├── main.py
├── application/
│ ├── config.py
│ └── core.py
├── basic_functions/
│ ├── os_funs.py
│ └── text.py
└── gui/
├── gui.py
└── tab_base.py
🔧 Development Setup
Clone the repository:
git clone https://github.com/benevantmathew/vyank.git
cd vyank
Create and activate a virtual environment:
python -m venv .venv
source .venv/bin/activate
Install the package in editable mode:
pip install -e .
Install build tools when preparing a release:
pip install build twine
Run a quick import/compile check:
python -m compileall -q vyank
python -c "import vyank.main; print('vyank import ok')"
🧪 Build and PyPI Readiness
Build source and wheel distributions locally:
python -m build
Check the generated distributions:
twine check dist/*
Install the locally built wheel for testing:
pip install --force-reinstall dist/vyank-0.1.0-py3-none-any.whl
Run the installed command:
vyank
Do not publish until you are ready. When ready, publish with:
twine upload dist/*
📌 Package Metadata
- Package name:
vyank - Current version:
0.1.0 - Python requirement:
>=3.10 - License: MIT
- Author: Benevant Mathew
- Repository: https://github.com/benevantmathew/vyank
- Main GUI entry point:
vyank.main:main - Console script:
vyank
🧩 Runtime Dependencies
Python packages:
pytubefix
System packages:
ffmpegtkinter/ Tk support for your Python installation
On some Linux distributions, Tkinter is packaged separately. If the GUI fails with a Tkinter import error, install the Tk package for your Python version.
Debian/Ubuntu example:
sudo apt install python3-tk
📝 Changelog
See CHANGELOG.md for release notes.
📄 License
This project is licensed under the MIT License. See LICENSE for details.
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 vyank-0.1.0.tar.gz.
File metadata
- Download URL: vyank-0.1.0.tar.gz
- Upload date:
- Size: 12.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2d59849ddbe78d790b5c5eb74c1c15ee16b3625221dc0296243900fbb4b9c53b
|
|
| MD5 |
ee383e8486e203e9a763245cdc098de2
|
|
| BLAKE2b-256 |
ecd2d52dcf1402fb56de282b748b011abad9452d1c7a55301335fcfdbaeb862a
|
File details
Details for the file vyank-0.1.0-py3-none-any.whl.
File metadata
- Download URL: vyank-0.1.0-py3-none-any.whl
- Upload date:
- Size: 10.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
67a3f17849159c1957340ca992f3c7eb3895f9753566b9ffaa08fb7e15599050
|
|
| MD5 |
30b2e841489292a96775a79bba5d07d8
|
|
| BLAKE2b-256 |
0049191190e05e02fe0af5da8706b0143f31938658c0485cc0e6d017e95f223f
|