ComfyUI Node

Load Video URL

Video From Any URL, Without Installing VideoHelperSuite

By sammykumar·Created 5 months ago·Updated 5 months ago· 0
Load Video URL
  • vae
  • IMAGE
  • frame_count
  • audio
  • video_info
video_url
force_rate0
custom_width0
custom_height0
frame_load_cap0
skip_first_frames0
select_every_nth1

The name says most of it: paste an http/https video URL into one string widget, run the graph, and out come frames. It's the Load Video URL node from Sam Kumar's ImageGen-Toolkit-Dev-Utils pack, and its entire pitch is that it's self-contained. It downloads the file, caches it, and decodes frames using imageio[ffmpeg] - no VideoHelperSuite, no model files, no extra runtime.

If you've wrestled with VHS's URL variant you know why this exists. VideoHelperSuite's VHS_LoadVideo is the community default, but its URL mode is famously fiddly and people get burned by it ("don't use the load video url version" is the standard fix in help threads). This node keeps the same VHS_LoadVideo-style controls so old workflows mostly transplant cleanly, then drops the dependency.

How it works

The flow is simple and defensive. First the URL gets validated - blank, malformed, or non-HTTP(S) input is rejected before any network fetch happens. Then the file downloads in 1 MB chunks with a 30-second timeout and lands in a cache folder under ComfyUI's temp directory (imagegen-toolkit-dev-utils/video-url-cache), keyed by the SHA-256 hash of the URL. Because IS_CHANGED returns that hash, running the same URL twice is a cache hit - no re-download. Decoding goes through imageio's ffmpeg plugin with a fallback to the legacy imageio.get_reader path, so you're covered either way.

The inputs that matter

Most of them mirror VHS_LoadVideo's surface:

  • video_url - the one you must set. A plain string, not a file upload. Must be a full https://... URL.
  • force_rate - force the output to a target FPS. 0 means "keep the source rate." If the source is 30 fps and you set 15, it grabs every other frame.
  • select_every_nth - grab every Nth frame (default 1). Combine with force_rate freely; the node picks the more aggressive step.
  • frame_load_cap - stop after N frames. skip_first_frames - skip the first N. Both default to 0, meaning no cap and no skip.
  • custom_width / custom_height - resize while decoding (LANCZOS). 0 keeps the original size; set one and the other auto-scales.

There's also an optional vae input, accepted for drop-in compatibility with VHS-style workflows. It's not actually used in the decode path - this node hands you frames, not latents - so you can leave it unplugged.

The outputs

  • IMAGE - the stacked frames as a float tensor, ready for a sampler or video model.
  • frame_count - how many frames you got, handy as a loop bound.
  • audio - always None right now. Audio extraction isn't implemented, so don't wire this expecting sound.
  • video_info - a VHS_VIDEOINFO payload (source fps, loaded fps, frame counts, cached file path) that downstream VHS-style nodes expect.

Installing it

The pack installs through ComfyUI Manager - search ImageGen Toolkit Dev Utils, install, restart. That's the path the README pushes; it explicitly says the pack isn't meant for a raw git clone (that's the dev flow, and you'd need npm install && npm run build for the frontend half plus pip install "imageio[ffmpeg]" Pillow, since there's no requirements.txt).

Two real gotchas. First, the README demands a recent frontend - ComfyUI Frontend 1.24.4 at the time of writing - because the pack's frontend adds a live preview player to this node's body. Update the frontend if the preview misbehaves. Second, this is a brand-new, small personal pack (GPL v3, near-zero community footprint), so a bug here is likely to be an actual bug, not a step you missed.

Common issues

  • "Load Video URL requires imageio[ffmpeg]" - the decode backend isn't installed. Manager usually handles it; otherwise pip install "imageio[ffmpeg]" into the same Python that runs ComfyUI.
  • Local file paths don't work. Only absolute http/https URLs. A path like /tmp/video.mp4 gets rejected at validation - that's by design.
  • The same URL re-downloads after a restart. The cache lives in the temp directory; if ComfyUI or your OS cleans it, the file fetches again. It's a cache, not a vault.
  • Slow or large videos. The whole file downloads before the first frame decodes, so a 2 GB clip means a long wait before anything shows up.
CategoryImageGen Toolkit Dev Utils/Video

Inputs (8)

NameTypeDefaultDescription
video_urlSTRING
force_rateFLOAT00–60
custom_widthINT00–8192
custom_heightINT00–8192
frame_load_capINT00–9007199254740991
skip_first_framesINT00–9007199254740991
select_every_nthINT11–9007199254740991
vaeoptVAE

Outputs (4)

NameTypeDescription
IMAGEIMAGE
frame_countINT
audioAUDIO
video_infoVHS_VIDEOINFO