Built with love for my son ARI, who wants to download his favourite songs onto his Kids Camera. 🎵📷
A standalone video/audio downloader with a dark-themed GUI.
Paste links, click download — that's it.
No Python, no setup, no admin rights needed.
👉 Download Setup_ARIs_Downloader.exe (click "Download raw file" on the page)
Just run the installer, pick a folder, click Install — done.
Everything is bundled inside (app + yt-dlp + ffmpeg + Python runtime).
- Separate input fields for each link (add as many as you want)
- Audio only (MP3) toggle — perfect for loading songs onto a kids camera
- Download full playlists toggle
- Per-download status with error codes and expandable details
- Bundled
yt-dlp+ffmpeg— no extra installs for end users - Self-extracting installer with desktop shortcut
downloader_app/
├── app.py ← main GUI application
├── setup_gui.py ← installer GUI (self-extracting)
├── generate_icon.py ← generates the ARI icon (.ico)
├── build_installer.bat ← one-click: builds everything into an installer
├── installer/
│ └── icon.ico ← generated app icon
└── Standalone Installer/
└── Setup_ARIs_Downloader.exe ← ready-to-use installer
| Requirement | Version | Notes |
|---|---|---|
| Python | 3.10+ | Must be on PATH |
| pip | any | Comes with Python |
| Internet | — | To download yt-dlp and ffmpeg during build |
No admin rights needed. Everything installs into user-space.
The build script automatically installs these Python packages:
pyinstaller— bundles Python into a standalone .execustomtkinter— the GUI frameworkPillow— generates the icon
- Open a terminal in
downloader_app/ - Run:
build_installer.bat - Wait for it to finish (~2-5 minutes)
- Find the installer at:
installer\output\Setup_ARIs_Downloader.exe
- Installs Python build deps — PyInstaller, customtkinter, Pillow
- Downloads yt-dlp.exe — standalone binary from GitHub releases
- Downloads ffmpeg — extracts
ffmpeg.exeandffprobe.exefrom the official builds - Generates icon — creates
installer/icon.icowith the ARI logo - Builds the app .exe — PyInstaller bundles
app.py+ Python runtime + customtkinter into a singleARIsYoutubeSongsDownloader.exe - Zips everything — app exe + yt-dlp + ffmpeg + icon →
app.zip - Builds the installer .exe — PyInstaller bundles
setup_gui.py+app.zipintoSetup_ARIs_Downloader.exe
If you just want to run the app locally without building a distributable installer:
pip install customtkinter
python app.py
This requires yt-dlp on your PATH.
Send only this one file to anyone:
Standalone Installer\Setup_ARIs_Downloader.exe
Or point them to the download link on this repo.
- Double-click
Setup_ARIs_Downloader.exe - Pick an install folder (defaults to
~/ARIs Youtube Songs Downloader) - Check "Create Desktop shortcut" if wanted
- Click Install
- Done — launch from desktop or install folder
Everything is self-contained:
- Python runtime (embedded by PyInstaller)
- The app GUI
yt-dlp.exe(downloads videos)ffmpeg.exe+ffprobe.exe(merges audio/video streams)
No Python, no admin rights, no internet needed on the target machine to install.
Internet is only needed when actually downloading videos.
- Paste links — one per field. Click "+ Add link" for more fields.
- Choose output folder — defaults to
~/Downloads/VideoDownloader - Toggle options:
- Audio only (MP3) — extracts audio instead of downloading video
- Download full playlists — downloads all videos in a playlist link
- Click "Download All"
- Watch the progress — each link shows status:
- ● queued → ● downloading → ✓ done / ✗ failed
- If a download fails, click "Show details" to see the full error and error code
| Code | Meaning |
|---|---|
| E403 | Forbidden — geo-blocked or age-restricted |
| E404 | Not found — deleted or wrong URL |
| E429 | Rate limited — wait and try again |
| EPRV | Private video |
| EUNA | Video unavailable — removed or region-locked |
| EURL | Invalid or unsupported URL |
| EEXT | Extraction failed — try updating yt-dlp |
| EFMT | Requested format not available |
| ESSL | SSL error — corporate network/proxy issue |
| ECPR | Blocked by copyright |
Make sure Python 3.10+ is installed and python / pip are on your PATH:
python --version
pip --version
Check your internet connection. If behind a proxy, set:
set HTTPS_PROXY=http://your-proxy:port
When running locally (not from installer), install yt-dlp:
pip install yt-dlp
You're behind a corporate proxy doing SSL inspection. The app already passes --no-check-certificates to handle this.
The installer tries VBScript (cscript) to create the shortcut. If it fails, a warning dialog shows the exe path so you can create a shortcut manually.