EasyUrl Loader
Stop browser-downloading YouTube videos — pull them straight into ComfyUI
- full_video_path
- audio_path
- video_path
Every vid2vid workflow has the same dumb prologue: you alt-tab to a browser, download a YouTube clip, dig it out of Downloads, and drag it into a Load Video node. EasyUrlLoader is a one-node fix for that dance. Paste a YouTube URL into the node, run the graph, and the video lands on disk while the node hands you the file path ready to feed downstream. The author built it specifically for this: run a real clip through a ControlNet for a video-to-video pass without touching third-party downloaders or shuttling files around.
It's a thin node, so keep expectations honest. It's not a loader in the ComfyUI "gives you frames" sense - it's a downloader that returns paths. This is the trap to understand before you wire it up.
How it works
Under the hood it's yt_dlp (the yt-dlp Python library) with a curated format string: bestvideo[height<=2160]+bestaudio/best[height<=2160]/best[height<=2160]. Plainly: it grabs the best video stream up to 4K, merges it with the best audio via ffmpeg, and saves an mp4. That's why the README brags about getting 4K where browser downloaders stop at 1080 - though "try to" is the operative phrase, since YouTube doesn't always offer a merged 4K stream. noplaylist is set, so it grabs one video, not the whole channel.
No API key, no sign-in, no external service - it's pure yt-dlp talking to YouTube, which is also why it only works with YouTube URLs. The author says so outright, and if you paste a Vimeo or X link, you'll get an error string back instead of a file.
The inputs and outputs that matter
- url - the YouTube watch link. Everything else is secondary.
- download_full_video (default on) - the merged mp4. Leave it on.
- download_audio / download_video (both default off) - separate mp3 and video-only streams, if you want them. Beginner trap: turn off
download_full_videoand these stay off, and you get back empty strings.
The three string outputs - full_video_path, audio_path, video_path - are file paths, not images, not audio tensors. Wire them into Video Helper Suite's VHS_LoadVideoPath (the pack ships an example workflow doing exactly that, feeding VHS_VideoInfoLoaded) to get real IMAGE frames for your ControlNet or AnimateDiff pass.
Installing it
Easiest: ComfyUI Manager → search "EasyUrlLoader" → install. Or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/Apache0ne/ComfyUI-EasyUrlLoader.git
Then the part that bites: pip install yt_dlp in ComfyUI's Python environment (the pack's requirements.txt also lists ffmpeg-python, but the code never imports it - ignore it), plus a real FFmpeg binary on your PATH. That's the non-negotiable system dependency; without it the bestvideo+bestaudio merge and the mp3 extraction both fail. On Windows: download an ffmpeg build, extract with 7-Zip, add the bin folder to PATH, then confirm with ffmpeg -version in a new terminal.
Common issues
- "FFmpeg not found" - missing the system binary, not a pip problem. Install ffmpeg and add it to PATH.
- Video isn't where you expect - files land in
custom_nodes/comfyui-easyurlloader/downloads/{full,audio,video}. The output-dir inputs only take effect if the folder already exists; otherwise the node silently falls back to the default. Type a path that doesn't exist and you'll be hunting in the wrong place. - Whole video or nothing - there's no time-range trimming. For short clips the author's own README suggests letting VHS's
skip_first_frames/frame_load_capdo the math for you.
Files are only downloaded if they don't already exist at the target path, so re-running a queue won't re-fetch. It's a small, honest utility - and for anyone doing vid2vid, it deletes the most tedious step in the whole pipeline.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| url | STRING | youtube.com/watch?v=your_video_url | — |
| download_full_video | BOOLEAN | true | — |
| download_audio | BOOLEAN | false | — |
| download_video | BOOLEAN | false | — |
| full_output_dir | STRING | — | |
| audio_output_dir | STRING | — | |
| video_output_dir | STRING | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| full_video_path | STRING | — |
| audio_path | STRING | — |
| video_path | STRING | — |