Nodes/ComfyUI Deploy/External Video (ComfyUI Deploy x VHS)
ComfyUI Node

External Video (ComfyUI Deploy x VHS)

The VHS-Powered Video Input That Actually Decodes Frames

By BennyKok·Created 3 years ago·Updated 10 months ago· 1,529
External Video (ComfyUI Deploy x VHS)
  • meta_batch
  • vae
  • IMAGE
  • frame_count
  • audio
  • video_info
  • LATENT
â—„input_idinput_videoâ–º
â—„force_rate0â–º
◄force_size▾►
â—„custom_width512â–º
â—„custom_height512â–º
â—„frame_load_cap0â–º
â—„skip_first_frames0â–º
â—„select_every_nth1â–º
◄default_video▾►
â—„display_nameâ–º
â—„descriptionâ–º
â—„default_value_urlâ–º

This is the serious video node in the ComfyUI Deploy pack: "External Video (ComfyUI Deploy x VHS)". The source openly credits VideoHelperSuite - it's essentially VHS's Load Video node, wrapped in the deploy external-input contract so an API caller can hand you a video by URL while you keep full control over how it's decoded. Wire this into an img2vid or frame-interpolation workflow and the video becomes a per-request input.

How it works

Like its path-based sibling, if the incoming input_id or default_value_url starts with http, the node downloads the video into ComfyUI's input directory. Otherwise it resolves default_video - the dropdown of .webm, .mp4, .mkv and .gif files in your input folder - and decodes it through an OpenCV frame generator backed by ffmpeg (the pack's imageio-ffmpeg dependency provides one, or it uses a system ffmpeg if available). Decoding is memory-guarded so it stops rather than OOM on long videos.

The output bundle is the full VHS spread: IMAGE (frame tensors), frame_count (INT), audio (AUDIO, lazy-loaded), video_info (VHS_VIDEOINFO metadata), and LATENT. Here's the fork that decides which you use: connect the optional vae input and the node VAE-encodes frames into the LATENT output (IMAGE comes back empty); leave vae unplugged and you get raw IMAGE tensors and an empty LATENT. Most video work wants the VAE-connected path - feed that LATENT into a sampler for img2vid.

The inputs that matter

  • force_rate (0) - target fps; 0 keeps source.
  • force_size - resize policy: Disabled, fixed aspect like 512x?, or Custom with custom_width/custom_height.
  • frame_load_cap, skip_first_frames, select_every_nth - cap the load, skip the first frames, or thin the sequence. Defaults (0/0/1) load everything.
  • vae - plug this in to get LATENT out.
  • meta_batch, default_video, default_value_url, display_name, description - the VHS batch-manager hook, the local file dropdown, the URL fallback, and the form text.

Installing

Manager → "ComfyUI Deploy", or:

cd ComfyUI/custom_nodes
git clone https://github.com/BennyKok/comfyui-deploy

Restart. This node is the reason the pack pulls opencv-python and imageio-ffmpeg - those are real dependencies here. To use meta_batch and the VHS_VIDEOINFO plumbing fully you'll also want actual VideoHelperSuite installed; the types resolve fine without it for basic loading, but batch management needs the real pack.

Gotchas

Decoding video is memory-hungry; the memory guard will stop execution on huge files rather than crash, which reads as an error until you add frame_load_cap or select_every_nth. And the size widgets cap at 8192, so don't expect 4K passthrough without force_size deciding what to do about it. If all you need is a file path for a merge/save node, use the lighter External Video (ComfyUI Deploy) path variant instead - this one decodes, and decoding costs.

Category🔗ComfyDeploy

Inputs (14)

NameTypeDefaultDescription
input_idSTRINGinput_video—
force_rateINT00–60—
force_sizeCOMBO10 options: Disabled, Custom Height, Custom Width, Custom, 256x?, ?x256, +4
custom_widthINT5120–8192—
custom_heightINT5120–8192—
frame_load_capINT00–9007199254740991—
skip_first_framesINT00–9007199254740991—
select_every_nthINT11–9007199254740991—
meta_batchoptVHS_BatchManager—
vaeoptVAE—
default_videooptCOMBO0 options:
display_nameoptSTRING—
descriptionoptSTRING—
default_value_urloptSTRING—

Outputs (5)

NameTypeDescription
IMAGEIMAGE—
frame_countINT—
audioAUDIO—
video_infoVHS_VIDEOINFO—
LATENTLATENT—