Universal media downloader — YouTube, Instagram, Facebook, X/Twitter, TikTok, and 1000+ sites.
Powered by yt-dlp under the hood. Built with Go. Ships with a real-time TUI.
╭────────────────────── neodlp ──────────────────────╮
│ Author : rkriad585 │
│ Version: v1.0.0 │
│ Commit : 2b4b657 │
│ GitHub : rkriad585/neodlp │
╰────────────────────────────────────────────────────╯
- 1000+ sites — YouTube, Instagram, Facebook, X/Twitter, TikTok, SoundCloud, Twitch, Vimeo, Reddit, Telegram, Dailymotion, Bandcamp, Mixcloud, Rumble, Bilibili, and more
- Parallel TUI Queue — Concurrent multi-download dashboard with individual progress bars, speed, and ETA rendering using BubbleTea
- REST API Daemon (
neodlp serve) — Run a background HTTP JSON service to trigger/track downloads remotely - File/Folder Watcher (
neodlp watch) — Automate downloads by watching folders or text files for new links - Metadata & Album Art Embedding — Embed high-res thumbnails and ID3 tags natively with
--embed-metadata - Push-to-Cloud Uploaders — Auto-upload finished downloads to Discord, Telegram, or custom shell scripts, clearing local files afterwards
- Audio extraction — download audio-only as MP3
- Format selection — MP4, MKV, WebM, MOV, AVI, FLV, MP3, M4A, Opus, WAV; quality presets (best, 1080p, 720p)
- Playlist control — download single video or full playlist
- Rate limiting — throttle bandwidth (e.g.
10M) - Proxy support — HTTP/HTTPS/SOCKS proxy
- Configurable — TOML config file with
get/set/editcommands - Cross-platform — Windows, Linux, macOS
- Metadata inspection — view title, uploader, duration, views, likes, formats before downloading
You can install neodlp instantly on your system globally using the following one-liners:
-
Windows (PowerShell):
irm https://raw.githubusercontent.com/rkriad585/neodlp/main/install.ps1 | iex
-
Linux / macOS (Bash):
curl -fsSL https://raw.githubusercontent.com/rkriad585/neodlp/main/installer.sh | sh
Alternatively, download the latest compiled binary for your specific platform and architecture from the Releases page.
git clone https://github.com/rkriad585/neodlp.git
cd neodlp
make build # or: go build -o neodlp .On Windows:
.\build.ps1NeoDLP installers automatically pre-download the official yt-dlp binary (v2026.03.17) during the installation process so that the application works out-of-the-box. If it is ever missing or deleted, NeoDLP will still auto-download it on first run.
# Download best quality (default)
neodlp dl "https://youtu.be/dQw4w9WgXcQ"
# Interactive format + resolution selection
neodlp dl -f "https://youtu.be/dQw4w9WgXcQ"
# Interactive resolution with specific format
neodlp dl -f --format-type mp4 "https://youtu.be/dQw4w9WgXcQ"
# Download with specific quality and format
neodlp dl -q 1080p --format-type mp4 "https://youtu.be/dQw4w9WgXcQ"
# Extract audio only
neodlp dl -a "https://youtu.be/dQw4w9WgXcQ"
# Download without playlist (single video)
neodlp dl -n "https://youtube.com/playlist?list=PL..."
# Limit bandwidth to 5 MB/s
neodlp dl -r 5M "https://youtu.be/dQw4w9WgXcQ"
# Use proxy
neodlp dl -p "http://127.0.0.1:8080" "https://youtu.be/dQw4w9WgXcQ"
# Multiple URLs (downloads in parallel, default 3 concurrent)
neodlp dl "https://youtu.be/abc" "https://youtu.be/xyz" "https://youtu.be/123"
# Concurrency control
neodlp dl -c 5 "https://youtu.be/abc" "https://youtu.be/xyz"
# Smart Metadata & ID3 tags embedding
neodlp dl --embed-metadata "https://youtu.be/abc"
# Post-download cloud upload (telegram/discord/custom)
neodlp dl -u discord "https://youtu.be/abc"Start the local REST API daemon server to queue and track downloads asynchronously from external apps, tools, or browser extensions:
# Start daemon on default host and port (127.0.0.1:12121)
neodlp serve
# Custom host and port
neodlp serve --host 0.0.0.0 --port 8080Automatically monitor a file or directory for newly added links to download:
# Watch a specific text file (polls for URL appends, downloads, comments out)
neodlp watch -f ~/watch_downloads.txt
# Watch a directory for incoming *.txt / *.url batch files
neodlp watch -d ~/watch_folder# Search YouTube, pick from results interactively
neodlp search "never gonna give you up"
# Limit search results
neodlp search -l 5 "lofi hip hop music"neodlp info "https://youtu.be/dQw4w9WgXcQ"# Show current config
neodlp config
# Get a specific value
neodlp config get download.output_dir
# Set a value
neodlp config set download.quality "1080p"
# Open config in editor
neodlp config edit
# Interactive theme picker
neodlp config themeneodlp version# Update neodlp binary itself to the latest version automatically
neodlp self-updateTo completely uninstall neodlp, remove all its files, config directories, and the binary from your system instantly:
# Call the self-uninstall flag directly on the executable
neodlp --selfuninstallAlternatively, you can run the remote uninstaller script directly:
-
Windows (PowerShell):
Invoke-RestMethod -Uri "https://raw.githubusercontent.com/rkriad585/neodlp/main/installer.ps1" | Invoke-Expression -ArgumentList "--selfuninstall"
-
Linux / macOS (Bash):
curl -fsSL https://raw.githubusercontent.com/rkriad585/neodlp/main/installer.sh | sh -s -- --selfuninstall
NeoDLP ships with 13 built-in themes that can be selected interactively:
neodlp config theme
Available themes:
| Theme Name | Description |
|---|---|
dark |
Dark theme |
light |
Light theme |
sunny_beach_day |
Sunny Beach Day (default) |
olive_garden_feast |
Olive Garden Feast |
summer_ocean_breeze |
Summer Ocean Breeze |
refreshing_summer_fun |
Refreshing Summer Fun |
black_gold_elegance |
Black & Gold Elegance |
vibrant_color_fiesta |
Vibrant Color Fiesta |
light_steel |
Light Steel |
golden_twilight |
Golden Twilight |
deep_sea |
Deep Sea |
bright_green |
Bright Green |
vivid_nightfall |
Vivid Nightfall |
The theme affects all TUI colors — title bars, progress bars, status indicators, spinners, and selection highlights. The theme name can also be set directly via neodlp config set theme.name <name> or by editing config.toml.
| Purpose | Windows | Linux/macOS |
|---|---|---|
| Config file | %USERPROFILE%\.config\neostore\neodlp\config.toml |
~/.config/neostore/neodlp/config.toml |
| History log | %USERPROFILE%\.config\neostore\neodlp\history.log |
~/.config/neostore/neodlp/history.log |
| Downloads | %USERPROFILE%\Downloads\neostore\neodlp\ |
~/Downloads/neostore/neodlp/ |
All directories are created automatically on first run.
[download]
output_dir = "~/Downloads/neostore/neodlp"
quality = "best"
format = "auto"
concurrent_fragments = 5
rate_limit = ""
[network]
proxy = ""
cookies_from_browser = ""
[upload.telegram]
bot_token = ""
chat_id = ""
[upload.discord]
webhook_url = ""
[upload.custom]
command = ""
[theme]
name = "sunny_beach_day"| Key | Type | Description |
|---|---|---|
download.output_dir |
string | Output directory for downloads |
download.quality |
string | Quality preset: best, 1080p, 720p, audio-only |
download.format |
string | Output format: auto, mp4, mkv, webm, mov, avi, flv, mp3, m4a, opus, wav |
download.concurrent_fragments |
int | Number of concurrent fragment downloads |
download.rate_limit |
string | Bandwidth limit (e.g. 10M, 5M) |
network.proxy |
string | Proxy URL (HTTP/HTTPS/SOCKS) |
network.cookies_from_browser |
string | Browser to extract cookies from (e.g. firefox, chrome) |
upload.telegram.bot_token |
string | Telegram bot credentials |
upload.telegram.chat_id |
string | Target Telegram chat/channel destination |
upload.discord.webhook_url |
string | Webhook URL for Discord attachments |
upload.custom.command |
string | Shell command line containing %file% template variable |
theme.name |
string | Theme name — see neodlp config theme for interactive picker |
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ CLI │────▶│Downloader│────▶│ yt-dlp │────▶│ Media │
│ (Cobra) │ │ (Go) │ │ (Binary) │ │ File │
└──────────┘ └──────────┘ └──────────┘ └──────────┘
│ │ │
│ ▼ ▼
│ ┌──────────┐ ┌──────────┐
└────────▶│TUI / Queue│ │ Uploader │
│(BubbleTea)│ │ (Cloud) │
└──────────┘ └──────────┘
- Cobra CLI parses commands and flags (
download,search,serve,watch,config) - Parallel Queue (
internal/queue/) schedules enqueued jobs concurrently inside goroutine worker pools - Downloader (
internal/downloader/) wrapsgo-ytdlp— handles metadata embedding and triggers hooks - TUI (
internal/tui/) renders single URL progress bars or multi-item dashboard views - Uploader (
internal/uploader/) executes Telegram/Discord API transfers or runs shell execution pipelines - Config (
internal/config/) handles configuration loading, saving, and command modifications
├── main.go # Entry point
├── cmd/
│ ├── root.go # CLI command registry & download command
│ ├── serve.go # REST API daemon (neodlp serve)
│ ├── watch.go # Folder/file watcher (neodlp watch)
│ ├── self_update.go # Binary auto-update command
│ └── uninstall.go # Self-uninstall flag actions
├── internal/
│ ├── version/version.go # Version metadata definitions
│ ├── banner/banner.go # ASCII banner builder
│ ├── config/config.go # Configuration TOML engine
│ ├── config/history.go # Download history log
│ ├── theme/ # TUI theme system (13 themes)
│ ├── queue/queue.go # Concurrent orchestrator queue
│ ├── uploader/uploader.go # Cloud uploader targets
│ ├── downloader/ # Downloader logic & extractors
│ └── tui/ # BubbleTea dashboards (single & multi)
├── .github/workflows/
│ ├── ci.yml # Lint, test, build on push/PR
│ └── release.yml # Tag-triggered 6-platform release
├── .version # Version definition file (v1.0.0)
├── Makefile # Unix build automation rules
└── build.ps1 # Windows build automation script
make build # Build for current platform
make build-all # Cross-compile for all platforms
make clean # Remove build artifacts.\build.ps1 # Build for current platform
.\build.ps1 -All # Cross-compile for all platforms
.\build.ps1 -Clean # Remove build artifactsBuilds inject the current git commit into the binary via -ldflags:
neodlp version
# v1.0.0 (2b4b657)Every push/PR to main runs:
- Lint —
go vet neodlp/... - Test — matrix across Ubuntu, macOS, Windows
- Build — cross-platform build with commit injected
Triggered by git tag v* or manual dispatch. Five parallel jobs:
| Job | Description |
|---|---|
| prepare | Fetches .version (remote → local → tag fallback), resolves commit SHA, detects pre-release |
| build | 6-way matrix (win/amd64, win/arm64, linux/amd64, linux/arm64, darwin/amd64, darwin/arm64) with ldflags injection and SHA-256 checksums |
| changelog | Groups commits into feat / fix / perf / docs / other |
| release | Downloads artifacts, publishes GitHub Release with changelog |
| notify-on-failure | Runs only on failure |
To create a release:
git tag v1.0.0
git push --tagsBinary outputs:
| Platform | File |
|---|---|
| Windows AMD64 | neodlp-windows-amd64.exe |
| Windows ARM64 | neodlp-windows-arm64.exe |
| Linux AMD64 | neodlp-linux-amd64 |
| Linux ARM64 | neodlp-linux-arm64 |
| macOS Intel | neodlp-darwin-amd64 |
| macOS Silicon | neodlp-darwin-arm64 |
ldflags inject main.Version, main.Commit, main.PublisherName, and main.PublisherEmail into the binary at build time.
rkriad585
Email: rkriad585@gmail.com
GitHub: rkriad585
This project is licensed under the MIT License — see the LICENSE file for details.