RH Download Video
RH Download Video pulls a cloud-rendered clip down and can even give you the frames
- frames
- video_path
The video Model nodes in this pack are URL machines: RH Text to Video and RH Image to Video hand you a video_url and call it a day. RH Download Video is the node that actually does something with that URL - it downloads the clip to disk, gives you the local path, and optionally rips it into an IMAGE tensor frame by frame so you can process the video locally like any other image sequence.
It's the video counterpart to RH Download Image, and like that node it needs no API key and no RunningHub account - pure local utility. If your cloud workflow produced a video, this is how you get it off the cloud and into your graph.
Inputs and outputs
Required:
url(STRING) - the video URL.extract_frames(false default) - the big switch. Off, and you just get the file path. On, the node decodes the video with OpenCV and hands you the frames as an IMAGE tensor.max_frames(100 default, up to 10000) - the cap on extracted frames, so a long clip doesn't blow up your memory.
Outputs:
frames(IMAGE) - the frame sequence. Whenextract_framesis off this is a black 64×64 placeholder, so don't wire it expecting actual frames unless the switch is on.video_path(STRING) - the absolute path to the downloaded file on your disk, which you can feed to a video-save node, ffmpeg, or just open.
The traps, in order of how often they bite
Frames cost memory. The tooltip says it: "may use a lot of memory." A 5-second 30fps clip is 150 frames of full-resolution tensors; a minute of 4K is a genuine VRAM/RAM event. If you only need a few frames for thumbnails or conditioning, keep max_frames small rather than leaving it at 100.
The placeholder frame. With extract_frames off, the frames output is that black 64×64 placeholder. It's not a bug - it's "you asked for no frames." Wire video_path and ignore frames in that mode.
Frame extraction needs OpenCV. The node catches a missing cv2 import and returns the placeholder with a log warning. ComfyUI ships OpenCV, so this usually works out of the box, but on a minimal install you'll get black frames and no crash - check that opencv-python-headless is present before chasing ghosts.
One URL at a time. Like its image sibling, no batch input. Multiple videos means multiple nodes.
Where it fits
The pattern is simple and common: RH Text to Video → video_url → RH Download Video → video_path (save it) and/or frames (run them through a local upscaler, a frame-smoother, or a VAE for further generation). It turns the pack's URL-only video outputs into something your local pipeline can actually consume.
Install
cd ComfyUI/custom_nodes/
git clone https://github.com/liangzheng1128/ComfyUI-RunningHub
cd ComfyUI-RunningHub
pip install -r requirements.txt
or ComfyUI Manager → search "RunningHub", restart. Pack deps are light - requests, websocket-client, Pillow, numpy - with OpenCV coming from ComfyUI itself.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| url | STRING | Video URL to download | |
| extract_frames | BOOLEAN | false | Extract frames as IMAGE tensor (may use a lot of memory) |
| max_frames | INT | 1001–10000 | Maximum number of frames to extract |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| frames | IMAGE | — |
| video_path | STRING | — |