Reference Video
Keep your clips where they live and still hand them to a video model
- video
Video models eat footage. Seedance 2.5 Reference to Video will take ten clips of context, MiniMax H3 takes three, HeyGen's reference node takes three, Gemini Omni takes three. Every one of those is a numbered VIDEO input on a partner node, and the usual way to fill them is ComfyUI's core Load Video, which browses exactly one folder: ComfyUI/input.
ReferenceVideo exists because that folder is not where your footage lives. It takes a full absolute path and returns a VIDEO. Your exports stay in the folder Resolve wrote them to, your shot library stays on the second drive, nothing gets duplicated into ComfyUI's tree, and a workflow that references four clips doesn't mean four copies in input.
It's the video arm of a pack built around library-first reference workflows: named libraries of images, video and audio, @name in a Reference Prompt, files wired into the model when you queue. The loaders are optional - you use one when you want a specific clip, in a specific place, with your own hands on it.
Inputs and outputs
path- "Full path to a video file anywhere on disk." Absolute. TheBrowse…button opens the native file dialog; pick a clip and thenamefield and node title fill themselves in.name- "Tag used as @name in the prompt. Empty = file name without extension." Leave it blank anddrone_pass_02.mp4becomes@drone_pass_02. That tag is what you type in a Reference Prompt to have this exact clip sent to the model's next free video input, no wire drawn.video(VIDEO) - the only output. Wire it into a video model's video input or a Reference Prompt'svideo_1.
The load itself is thin: InputImpl.VideoFromFile(path) from comfy_api.latest, ComfyUI's own modern media object. Decoding, frame extraction, resampling - all downstream, in whatever node consumes the VIDEO. This node doesn't trim, doesn't re-encode, doesn't normalise frame rate, and that's the right call: it means the model gets your file rather than a transcoded guess.
IS_CHANGED fingerprints path, mtime and size, so re-exporting the clip re-runs the node and leaves the graph cached when you haven't touched it.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/PixelMonkey77/comfyui-reference-library
Restart ComfyUI, or install the same URL through ComfyUI Manager (Install via Git URL). No pip dependencies, no model files - the pack's pyproject.toml declares an empty dependency list and it leans on what ComfyUI already ships (torch, numpy, Pillow, PyAV, aiohttp).
Required: Settings → Comfy → Nodes 2.0 → Modern Node Design (Nodes 2.0). The pack is built for the modern node frontend and does not support the classic canvas. That's a bigger commitment than it sounds in 2026 - Nodes 2.0 broke rendering in several established packs, and a lot of people are deliberately still on the legacy canvas. If you're one of them, don't install this.
Things that bite
The folder isn't trusted yet. A path into a folder the pack has never seen shows a yellow note on the node instead of quietly working. Click Browse… and pick the file once; that folder is trusted afterwards. The rule covers folders you've picked files in, folders holding library files, and ComfyUI's input/output. It exists so a downloaded workflow can't point a node at an arbitrary file on your disk and send it to a metered API - the exact failure mode that makes reference-managing nodes worth being paranoid about.
Only local addresses can pick files. Browsing works when ComfyUI is open as http://127.0.0.1 or http://localhost. From another machine on a --listen setup you can see the library, not the folders.
Relative paths lose. You'll get "Use a full path", and no, . isn't resolved against custom_nodes.
Library entries for videos failing while images add fine. The library's file probe opens the container with PyAV to read duration and dimensions. PyAV ships with ComfyUI, but on a hand-built or stripped install that's the thing to check first.
For most people the practical loop is: add clips to a named library once, then reference them with @tag and never touch this node. Reach for ReferenceVideo when you want the file handled by hand - previewed, resized by your own nodes, or fed somewhere the Reference Prompt can't reach.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| path | STRING | Full path to a video file anywhere on disk. | |
| name | STRING | Tag used as @name in the prompt. Empty = file name without extension. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |