DARASK Load Video (Upload)
Load a video into ComfyUI without the VHS dependency weight
- IMAGE
- frame_count
- video_info
Video work in ComfyUI usually starts by installing VHS (VideoHelperSuite), because it's the de-facto video loader. The DARASK Load Video (Upload) is a lean OpenCV-based alternative that does the same core job - pick a file from input/, load its frames into an IMAGE batch - with a deliberately smaller footprint. If you're running the DARASK video chain (RIFE interpolation, MMAudio, LTX workflows) you may as well use the pack's own loader and skip one dependency you'd only be loading frames with anyway.
What it does
Drop a video in ComfyUI/input/, pick it from the video dropdown (or use the built-in upload button), and it returns [N, H, W, 3] float32 frames. The widgets are the standard frame-surgery controls:
force_rate(0 = keep source FPS) - resample to a fixed frame rate.custom_width/custom_height(0 = keep source) - resize; set one and the other is computed to preserve aspect.frame_load_cap- max frames to load. Set this on long clips; thousands of frames can exceed memory.skip_first_frames- drop leading frames.select_every_nth- keep every Nth frame after skipping. This downsamples the frame count and dividesloaded_fpsby N, which is the detail people miss when they wonder why their timing math is off.
Outputs: IMAGE, frame_count (the actual loaded count), and video_info - the DARASK_VIDEO_INFO dict that you feed to the DARASK Video Info node to split into scalars.
Where it fits
In the pack's MMAudio recipe the chain is: Load Video (Upload) → DARASK RIFE Interpolation → MMAudioSampler, with video_info → DARASK Video Info and its loaded_duration going to MMAudio's duration input so the generated audio lines up with the interpolated frame count. There's a runnable example, mmaudio_video_to_audio.json, in the pack - but it requires ComfyUI-MMAudio installed, so expect to fetch that before it loads clean.
The honest caveats
Two deliberate design choices you should know before you build around it. First, there is no audio output - the pack assumes MMAudio-style workflows synthesize their own sound rather than reuse the source track. If you need the original audio, keep a VHS loader around. Second, select_every_nth's interaction with the source FPS is easy to miscalculate: the loader only tells you what it loaded, so always read loaded_fps (from Video Info) rather than assuming source FPS after any filtering.
Install is the standard pack route: Manager → search DARASK → install, restart. It's OpenCV-backed, which ComfyUI already ships, so no exotic extra pip dependencies for this node.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| video | COMBO | 1 options: (no videos in input/) | |
| force_rate | FLOAT | 0.00–240 | Resample to this FPS (0 = keep source FPS). |
| custom_width | INT | 00–8192 | Resize width (0 = source). |
| custom_height | INT | 00–8192 | Resize height (0 = source). |
| frame_load_cap | INT | 00–2147483647 | Max frames to load (0 = all). |
| skip_first_frames | INT | 00–2147483647 | Drop this many leading frames. |
| select_every_nth | INT | 11–100 | Keep every Nth frame after skipping. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |
| frame_count | INT | — |
| video_info | DARASK_VIDEO_INFO | — |