A local-first media workflow toolkit for downloads, playlists, and automation through CLI and MCP interfaces
Project description
VDL
VDL is a local-first media workflow toolkit for downloading videos, downloading playlists, crawling websites for downloadable media, managing local link lists, and automating those workflows from the CLI, Python library, tool API, or MCP.
flowchart TD
StandaloneBinary["curl install.sh<br/>Standalone binary"]
PythonPkg["pip install vdl<br/>Python package"]
StandaloneBinary --> CLI["vdl CLI"]
StandaloneBinary --> App["Interactive app"]
StandaloneBinary --> MCP1["vdl-mcp"]
PythonPkg --> Library["Python library<br/>import vdl"]
PythonPkg --> CLI
PythonPkg --> App
PythonPkg --> Tools["vdl.tools"]
PythonPkg --> MCP2["MCP server<br/>pip install vdl[mcp]"]
style StandaloneBinary fill:#0277bd,color:#fff
style PythonPkg fill:#7b1fa2,color:#fff
style MCP2 fill:#e65100,color:#fff
Install vdl Binary
Use the standalone installer when you want the commands without setting up a Python project:
curl -fsSL https://bildcraft.gitlab.io/products/video-downloader/vdl/install.sh | sh
This gives you:
vdlvdl-mcp
Interactive Download App
Start the interactive app with:
vdl
It opens an interactive terminal interface:
The app guides you through:
- Input — paste a URL, local file path, or
.txtlink list - Quality — choose preferred resolution (best, 2160p, 1440p, 1080p, 720p, 480p, or audio)
- Output — set download directory (default:
~/Downloads/VDL) - Options — save thumbnails and subtitles
- Mode — download directly or crawl the page for more links
Perfect for downloading single videos, playlists, or discovering downloadable media on websites.
CLI Commands
Check the installed binary:
vdl --version
Run direct commands:
vdl download https://example.com/video
vdl playlist https://example.com/playlist
vdl resolve https://example.com/playlist
vdl status
vdl doctor
Install as Python Library
Use the Python package when you want to embed VDL in another Python project:
pip install vdl
That gives you:
- the
vdlPython library - the
vdlCLI - the interactive app entrypoint
vdl.tools
Use the library directly:
import asyncio
from vdl import VDLClient
async def main() -> None:
client = VDLClient()
result = await client.download("https://example.com/video")
print(result.status)
asyncio.run(main())
Use the tool surface:
import asyncio
from vdl.tools import download_video
async def main() -> None:
result = await download_video("https://example.com/video")
print(result["status"])
asyncio.run(main())
MCP Support
Install the MCP extra when you want vdl-mcp:
pip install "vdl[mcp]"
That adds MCP support on top of the Python package. If you installed the
standalone binary, vdl-mcp is already included there too.
Example MCP client config:
{
"mcpServers": {
"vdl": {
"command": "vdl-mcp",
"args": []
}
}
}
Examples
Each demo in demos/ illustrates a single workflow:
| Demo | Use Case |
|---|---|
download_video.py |
Download a single video |
download_video_with_progress.py |
Track download progress in real-time |
download_playlist.py |
Download an entire playlist |
resolve_playlist.py |
Inspect playlist items before downloading |
download_link_file.py |
Batch download URLs from a .txt file |
crawl_websites.py |
Discover and download media on a webpage |
All demos use placeholder URLs — copy and edit with your own.
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
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 vdl-1.0.4.tar.gz.
File metadata
- Download URL: vdl-1.0.4.tar.gz
- Upload date:
- Size: 1.3 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.11 {"installer":{"name":"uv","version":"0.11.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a47ddda8fb50775d562cbb46063c98a15b443768e32a3bc49937320b98b30057
|
|
| MD5 |
bb3be134dc445522db3cf3f534f54e7e
|
|
| BLAKE2b-256 |
4b9c33764d475ba654b642d5e1c8cc856ce784b19edf774b4a0a18f74d54f38e
|
File details
Details for the file vdl-1.0.4-py3-none-any.whl.
File metadata
- Download URL: vdl-1.0.4-py3-none-any.whl
- Upload date:
- Size: 81.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.11 {"installer":{"name":"uv","version":"0.11.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
af33fa499405d2f8d174f3065cb2e53bcc8ea2dfbd45dfb38843f07dddca62de
|
|
| MD5 |
d7e79da54c9696fa882009123d05c951
|
|
| BLAKE2b-256 |
69841d7f9ffd1ce096f09715b084ddfc41e6cee554a632f883d269273a0f16e7
|