Load Video from URL
The Load Video from URL node
- frames
- frame_count
- video_info
Every ComfyUI video workflow starts the same annoying way: download the clip, drag it into your input folder, hit Refresh, and hunt for the Load Video node. If you're pulling clips off a server or a shared drive, that's a fetch to your desktop and a re-upload, every single time. Load Video from URL cuts all of it out - you paste an https:// link into the node, queue it, and get a ready-to-use frame tensor back.
It's one of three nodes in the small ComfyUI-Load-From-URL pack. The whole idea of the pack is "stop manually downloading things into your ComfyUI install," and this is the video half. It's a tiny utility, not a headline node - but if you ever work from a server with public URLs, it quietly deletes a recurring chore.
How it works
On the first run, the node downloads the file, then reads it with OpenCV frame by frame, converts each frame from BGR to RGB, normalizes to 0–1 floats, and stacks them into a single batched IMAGE tensor. It caches the download in ComfyUI/input/url_videos, keyed by an MD5 of the URL - so the second run is instant, no re-download.
The downloader has three settings: python, aria2, and auto (the default). auto is smarter than it needs to be: it does a quick HEAD request, and if the CDN says the file is already edge-cached it uses the single-stream Python downloader (fastest when the pipe is warm); otherwise it hands off to aria2c - 16 parallel connections - and falls back to Python if aria2 isn't installed. That's the whole trick: auto just picks the fastest path for your URL.
The inputs that matter
There are nine (one of them optional), but you'll touch maybe four:
- url - a publicly accessible direct link to the video. Not a page, not a drive-share splash screen: the file itself.
- force_size -
Disabledkeeps native resolution;512x512,512x?etc. force a size (the?keeps aspect ratio);Custom Width/Custom Height/Customlet you type your own incustom_width/custom_height. - frame_load_cap -
0loads every frame. Set it to e.g.121if your sampler only takes a fixed-length clip and you don't want the node chewing through a five-minute source. - downloader - leave it on
autounless you specifically want to force one.
The frame-surgery trio - force_fps, skip_first_frames, select_every_nth - is where beginners burn themselves. force_fps caps the frame rate only if the source is higher (it drops frames deterministically to match); skip_first_frames chops the intro; select_every_nth keeps every Nth frame for aggressive downsampling. Set all three to their defaults and you get the source video untouched.
Outputs
- frames (IMAGE) - the batched tensor, wired into whatever takes images: VAE Encode, AnimateDiff, a
Load Videoreplacement in a vid2vid graph. - frame_count (INT) - how many frames actually made it through, handy for math nodes downstream.
- video_info (STRING) - a human-readable
FPS / Frames / Size / Durationsummary of what was loaded.
Install
ComfyUI Manager, search "ComfyUI Load From URL", or the manual route:
cd ComfyUI/custom_nodes
git clone https://github.com/g0kuvonlange/ComfyUI-Load-From-URL
Restart ComfyUI. No models to download - it fetches whatever you point it at. The README lists aria2c as an optional prerequisite for parallel downloads (sudo apt-get install -y aria2 on Debian/Ubuntu); skip it and the pack happily falls back to Python. One honest gotcha: the video node imports cv2 but the pack's requirements.txt doesn't declare opencv-python - it usually works because ComfyUI itself ships OpenCV, but on a stripped install you may need pip install opencv-python yourself.
Where people get burned
The URL must be publicly accessible - signed or session-gated links will 401. The cache is keyed by URL, not content, so if the file behind the link changes, you get the stale copy until you delete it from input/url_videos. And the download happens on the queue: a big 4K clip makes the run look frozen while a progress bar crawls in the console. That's normal - it's not stuck, it's downloading. One last thing: you're asking this node to fetch and decode arbitrary files from the internet, so point it only at URLs you actually trust. Small pack, no big community footprint - but for "server-hosted video, zero manual steps," it does exactly what it says.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| url | STRING | https://example.com/video.mp4 | — |
| force_fps | INT | 00–60 | — |
| force_size | COMBO | 10 options: Disabled, Custom Height, Custom Width, Custom, 256x?, ?x256, +4 | |
| custom_width | INT | 5120–8192 | — |
| custom_height | INT | 5120–8192 | — |
| frame_load_cap | INT | 00–1000000 | — |
| skip_first_frames | INT | 00–1000000 | — |
| select_every_nth | INT | 11–1000000 | — |
| downloaderopt | COMBO | 3 options: auto, aria2, python |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| frames | IMAGE | — |
| frame_count | INT | — |
| video_info | STRING | — |