A command-line media downloader built with yt-dlp, with cross-platform GUI helpers for beginners. Download videos, audio, and playlists from YouTube and many other platforms in multiple formats.
dwnloaderr is searching for contributors. If there are any features or refinements you'd like to see implemented, feel free to tackle it yourself! Fork the repo, and send a PR my way for review.
curl.exe -L https://eclecticelectronics.fly.dev/api/download/dlp/1.0.2 -o dwnloaderr.tar.gz
certutil -hashfile dwnloaderr.tar.gz SHA256
7z x dwnloaderr.tar.gz
7z x dwnloaderr.tar
python dwnloaderr.py -single "https://example.com/video"
Once installed, check for updates without manual downloads:
python3 py-dlp.py -update\
This fetches the manifest from the server, verifies the checksum, and replaces your local files automatically.
- Python 3.8 or higher
- Node.js or Deno (recommended for YouTube compatibility)
- curl (Linux/macOS) or PowerShell (Windows)
- Linux / macOS
curl -L https://eclecticelectronics.fly.dev/api/download/dwnloaderr/1.0.2 -o dwnloaderr.tar.gzecho "EXPECTED_HASH_HERE dwnloaderr.tar.gz" | sha256sum -c -tar xzf dwnloaderr.tar.gzpython3 dwnloaderr.py -single "https://example.com/video"| Platform | Command |
|---|---|
| Windows | Double-click setup.bat |
| Linux/macOS | setup.sh |
This installs Python, Node.js, FFmpeg, and creates a virtual environment automatically.
| Platform | Command |
|---|---|
| Windows | Double-click download.bat or run.bat |
| Linux/macOS | download.sh |
Both open a dialog box where you paste the URL and choose the format.
# Single video
python dwnloaderr.py -single "https://www.youtube.com/watch?v=iupPG8x_Zfo&list=PL_vkVwrwck3NJ9ajMQv7Y-DfX9gVAk5in&index=8"
# Audio only
python dwnloaderr.py -single "URL" -format mp3
# Lossless audio
python dwnloaderr.py -single "URL" -format flac
# Playlist (max 50 items by default)
python dwnloaderr.py -playlist "URL" -max 100
# Custom output folder
python dwnloaderr.py -single "URL" -savedir ~/Music/SongsConsole Access (Windows) Double-click activate.bat to open a terminal window with the virtual environment already activated. From there you can run any python py-dlp.py command directly.
| Flag | Description | Default |
|---|---|---|
| -single | Single video download mode | Required with URL |
| -playlist | Playlist download mode | Required with URL |
| url | Input URL (positional argument) | Required |
| -format | Output format: flac, wav, mp3, mp4, opus | best |
| -retry | Number of retry attempts | 4 |
| -timeout | Socket timeout (seconds) | 20 |
| -ratelim | Rate limit (bytes/sec) | unlimited |
| -username | Login username | None |
| -pswd | Login password | None |
| -max | Max items from playlist | 25 |
| -thumbnail | Write thumbnail to file | enabled |
| -nosubs | Disable subtitle download | disabled |
| -noembed | Disable embedded subtitles | disabled |
| -nometa | Disable metadata embedding | disabled |
| -savedir, -sd | Custom output directory | ~/Downloads |
| -cf, --cookiefile | Path to cookie file | None |
| -nocs | Extract cookies from browser | disabled |
| -setup | Run installer script | false |
I am physically disabled and do this and hardware repair to support myself; if you feel generous and can afford to do so, every penny helps out!
python py-dlp.py -single "URL" -format flac
python py-dlp.py -single "URL" -format opus
python py-dlp.py -playlist "CHANNEL/videos" -max 20 -format mp3
python py-dlp.py -single "URL" -nosubs -noembed -nometa -thumbnail
python py-dlp.py -playlist "URL" -max 10 -savedir ~/Backups/ChannelName
Error: WARNING: [youtube] No supported JavaScript runtime could be found.
sudo dnf install nodejs
sudo apt install nodejs
sudo pacman -S nodejs npm
brew install node
Error: Requested format is not available
python py-dlp.py -single "URL" --list-formats
Error: YouTube served a challenge page
Update yt-dlp: pip install --upgrade yt-dlp Use cookies: -cf ~/.cookies.txt Ensure Node.js is installed
Error: No module named yt_dlp
rm -rf .venv ./setup.sh
Remove-Item -Recurse -Force .venv .\setup.bat
Passwords: Never store passwords in plain text in scripts. Use environment variables: export PY_DLP_PASSWORD="your_password" python py-dlp.py -single "URL" -username user -pswd "$PY_DLP_PASSWORD"
Keep cookie files secure. Anyone with your cookies can access private content.
Never sudo the virtual environment creation. System-wide Python packages should remain separate from user projects. Contributing Contributions are welcome! Please feel free to submit issues and pull requests.
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly
- Submit a pull request
- Improve Windows GUI reliability
- Add support for more streaming sites
- CI/CD pipeline for automated testing
- Docker container for easy deployment
- Unit test coverage for edge cases
- Anything you want to see added! If there's a feature or refinement you'd like to see and want to tackle it, feel free to fork it and send over a pull request for review!
Q: Can I download entire channels?
A: Yes, use the playlist URL with -max set to desired count. Example: python dwnloaderr.py -playlist "CHANNEL/videos" -max 100.
Q: Does this violate YouTube's Terms of Service?
A: This is a tool for extracting publicly available content. Use responsibly and respect copyright laws in your jurisdiction.
Q: Why do I need Node.js?
A: Recent yt-dlp versions require a JavaScript runtime to parse YouTube's encrypted signatures. Node.js, Deno, or undici work.
Q: Where do files get saved?
A: By default to ~/Downloads. Change with -savedir ~/Custom/Path.