Load VideoX Adv
The video loader that only decodes what you actually wire
- video
- video_frames
- audio
- width
- height
Load VideoX Adv is the front door of WorkflowX's video lane, and the thing that separates it from every "Load Video" node you've dragged in before is laziness. It does not decode your video. It looks at which outputs you actually connected, then decodes the absolute minimum to satisfy them - and if you only asked for the dimensions, it doesn't touch a single frame. That's not a small optimization when you're feeding a 4K clip into a video-to-video pipeline and just need it trimmed to 512×896.
It's the video sibling of the pack's Load ImageX Adv, and it exists because most real video work happens before the sampler: trim the boring ten seconds off, crop out the watermark, resize to the model's native resolution, maybe add padding to hit an aspect ratio. Doing that in ffmpeg means leaving ComfyUI, re-encoding, and coming back. This node does it visually, in the graph, and hands you a native ComfyUI VIDEO you can wire straight into Wan, LTX, or whatever vid2vid stack you run.
How it actually works
Under the hood it uses ComfyUI's native lazy VIDEO type and its comfy_api.latest input API, probing the file with PyAV (ComfyUI's bundled av, so no extra install). The trick is a transient connection mask checked against the dynamic prompt at queue time:
- Width/height only → a metadata probe, no decode at all.
- Video output with a pure trim and no spatial transform → a lazy
VideoFromFiletrim, nothing materialized. - Frames or any crop/resize/upscale → frames decoded exactly once, and that same batch is reused to rebuild the native video.
- Audio decodes only when the
audiooutput is wired.
Phone-video rotation is folded into the metadata and decode, so your crop rectangle actually matches what you're looking at. And it plays nicely with ComfyUI's cache: IS_CHANGED keys off the file's mtime and size, so editing the source invalidates the node without a manual refresh.
The inputs and outputs that matter
You set video (the file combo - "Video in ComfyUI's input folder") and then mostly use the UI. workflowx_state is the versioned JSON that stores your trim, crop, resize, snap, and padding choices; it's UI-managed and travels with the workflow file, so don't hand-edit it. The one input worth knowing: seconds (optional FLOAT, "Optional fixed trim duration in seconds"). Leave it unconnected and your in/out trim handles move independently; connect it and the handles slide the range while locking the duration - great when you want a fixed 4-second clip regardless of where you drag.
The five outputs, in order:
video(VIDEO) - trimmed, cropped, resized native videovideo_frames(IMAGE) - the same frames as a batch, for anything that wants imagesaudio(AUDIO) - trimmed soundtrack, orNonefor silent sourceswidth/height(INT) - final dimensions
Media outputs come back None when you leave them unwired. That's the lazy design, not a bug - unplug a socket and the node stops paying for it.
The node face gives you the full Load ImageX Adv geometry kit (crop overlay right on ComfyUI's native player, anchors, resampling, upscale, padding) plus the Open Timeline floating player: a thumbnail filmstrip, big in/out handles, a separate playhead scrubber, and editable selection seconds.
Installing it
Same steps as the rest of the WorkflowX pack. In ComfyUI Manager, search "WorkflowX" and install WorkflowX-Configurator, or:
cd ComfyUI/custom_nodes
git clone https://github.com/haroonaslam/WorkflowX-Configurator
Then restart ComfyUI and hard-refresh the browser. Good news: this pack declares zero Python dependencies (dependencies = []), so there's no pip step and no model files to fetch - the video nodes ride entirely on what ComfyUI already ships. The one real requirement is a reasonably recent ComfyUI, because the native lazy VIDEO API is new.
Where people get burned
The most common failure isn't the node - it's ComfyUI being old. If the node is missing after install, update ComfyUI, restart, and confirm WorkflowX_LoadVideoXAdv shows up in /object_info. If it's there but a UI button is missing, the frontend is stale: hard-refresh. And if you're troubleshooting a slow load, remember this node only decodes what's connected - wire width/height into your KSampler sizing instead of dragging the video socket everywhere, and you'll see what "metadata-only" actually buys you.
This is a young, hobby-maintained pack from a single author, so expect rough edges and fast iteration rather than a huge support community. But for visual, non-destructive video prep inside ComfyUI, it's the one I'd reach for.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| video | COMBO | Video in ComfyUI's input folder. | |
| workflowx_state | STRING | {"version":1,"mode":"off","max_mp":1.0,"longest_side":1024,"scale_factor":1.0,"fit_w":1024,"fit_h":1024,"cover_w":1024,"cover_h":1024,"cover_action":"fill","crop_anchor":"center","ratio_preset":"1:1","ratio_w":1.0,"ratio_h":1.0,"pad_color":"#808080","pad_top":0,"pad_bottom":0,"pad_left":0,"pad_right":0,"output_snap":0,"resample":"auto","allow_upscale":false,"crop_enabled":false,"crop_snap":0,"crop_rect":null,"trim_start":0.0,"trim_end":0.0,"requested_outputs":[]} | — |
| secondsopt | FLOAT | Optional fixed trim duration in seconds. |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | Trimmed and spatially processed native ComfyUI video. |
| video_frames | IMAGE | Trimmed and spatially processed frame batch. |
| audio | AUDIO | Trimmed source soundtrack, or None when absent. |
| width | INT | Final output width in pixels. |
| height | INT | Final output height in pixels. |