Nodes/ComfyUI Load From URL/Load Video from URL
ComfyUI Node

Load Video from URL

The Load Video from URL node

By g0kuvonlange·Created about a year ago·Updated about a year ago· 2
Load Video from URL
    • frames
    • frame_count
    • video_info
    urlhttps://example.com/video.mp4
    force_fps0
    force_size
    custom_width512
    custom_height512
    frame_load_cap0
    skip_first_frames0
    select_every_nth1
    downloader

    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 - Disabled keeps native resolution; 512x512, 512x? etc. force a size (the ? keeps aspect ratio); Custom Width/Custom Height/Custom let you type your own in custom_width/custom_height.
    • frame_load_cap - 0 loads every frame. Set it to e.g. 121 if 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 auto unless 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 Video replacement 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 / Duration summary 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.

    Categoryvideo

    Inputs (9)

    NameTypeDefaultDescription
    urlSTRINGhttps://example.com/video.mp4
    force_fpsINT00–60
    force_sizeCOMBO10 options: Disabled, Custom Height, Custom Width, Custom, 256x?, ?x256, +4
    custom_widthINT5120–8192
    custom_heightINT5120–8192
    frame_load_capINT00–1000000
    skip_first_framesINT00–1000000
    select_every_nthINT11–1000000
    downloaderoptCOMBO3 options: auto, aria2, python

    Outputs (3)

    NameTypeDescription
    framesIMAGE
    frame_countINT
    video_infoSTRING