Presentation Video
A file picker for mp4, mkv and mov into your generated site
- filename
Presentation Video is the pack's file picker tuned for video files. In a generated website built from a ComfyUI workflow - that's what niknah's Presentation ComfyUI does - this node gives the user a dropdown of video files to feed into the pipeline, instead of a text field they have to guess a path into. It's the video sibling of Presentation Image and Presentation Audio, and like them it's a specialization of the general-purpose Presentation File.
The README's output-node list tells you where this fits in the flow: the pack expects PreviewImage/SaveImage for images, PreviewAudio/SaveAudio for audio, and VHS_VideoCombine or SaveVideo for video. So a typical setup is Presentation Video on the input side ("here's the clip to work from") and a SaveVideo-style node inside the tab as the output. Everything the user touches, they touch through a picker.
How it works
Mechanically it's a subclass of PresentationFile that only overrides the default regex to \.(mp4|mpg|mpeg|mkv|mov|webm|avi)$. The Python pickfile method is a stub that returns the value string; the real file listing happens in the generated Nuxt site's files API, which recursively scans your chosen folder, matches the regex case-insensitively, and renders the picker. The chosen filename is written into the workflow JSON, and the node's filename output carries it into the graph. Its IS_CHANGED hash of path/regex/value is what tells ComfyUI to re-queue when the selection changes - without it, a new pick would be ignored as "same inputs."
The inputs that matter
path(defaultoutput) - which ComfyUI folder to browse. Anything defined infolder_paths.py:input,output,checkpoints,loras, and so on. For user-supplied clips,inputis usually the right call.regex- already set to the common video extensions (mp4, mpg/mpeg, mkv, mov, webm, avi). Trim to\.(mp4|webm)$if that's all you want visible.value- the default file, pre-selected when the site loads.
Output: filename, a wildcard * string that plugs into anything expecting a file path.
How to install it
Part of the single-pack install. ComfyUI Manager, search "Presentation ComfyUI", or:
cd ComfyUI/custom_nodes
git clone https://github.com/niknah/presentation-ComfyUI
then restart. You need Node.js installed separately; first launch copies the Nuxt site to output/presentation-site and runs npm install - budget a few minutes. The site runs at http://localhost:3000.
Common issues & troubleshooting
The clip I dropped in doesn't show. Confirm the path folder is right - it's resolved against ComfyUI's folder_paths, so input is ComfyUI's input/ directory, not anywhere on your desktop. And check the extension is in the regex; .webm is there but exotic containers like .ts or .gif-as-video aren't. Widen the regex if needed.
Picking a new file doesn't re-run. IS_CHANGED re-queue only fires when the node executes - make sure it isn't muted or bypassed.
Layout or site issues after edits. Settings → Presentation → Restart, or Rebuild if it's a structural change. Kill any duplicate nuxt processes on the same folder first.
Don't port-forward it bare. The site is a local server on port 3000 talking to ComfyUI's unauthenticated API; the README's basic-auth and Cloudflare steps are the public-facing route.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| path | STRING | output | Can be anything defined in folder_paths.py. input, output, checkpoints, loras, vae, text_encoders, diffusion_models, clip_vision, diffusers, upscale_models |
| regexopt | STRING | \.(mp4|mpg|mpeg|mkv|mov|webm|avi)$ | Example: \.(gif|png|webp)$ |
| valueopt | STRING | Default file |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| filename | * | — |