(Deno) Video Preview
A preview that shows what you'll actually get — before you commit to the encode
- images
- audio
- images
Most "video preview" nodes in ComfyUI are lies - they decode a latent and show you a rough image stream, which is not the video you're going to get. (Deno) Video Preview is the honest version: it actually encodes a real H.264 file at full resolution and plays that back in the node. And because it passes the input frames straight through unchanged, you can drop it inline at multiple sampling points without forking your wire. That's the whole trick, and it's a genuinely useful one.
Why it earns its place
Say you're iterating on a video workflow and want to eyeball the output after the first sampler stage, then again after the upscaler, without branching the graph into parallel preview paths. With this node you just chain it inline - images in, images out, preview in the middle. The encode is done in-process with PyAV (no external ffmpeg process spawned), written to one stable temp file per node that gets overwritten every run, so hammering a generation fifty times doesn't pile up temp storage. It's the same reasoning that makes VHS's preview nice, but with a clean pass-through contract.
There's a quiet reason this matters more now: LTX 2.3 rebuilt its VAE and broke the TinyVAE preview trick, so on current LTX workflows you're effectively generating blind until decode. A real encoded preview is the workaround, and this node is a much cheaper one than a full save-and-check loop.
Inputs and outputs
images(IMAGE) - the frame batch to preview.frame_rate(INT, default 25) - playback rate for the preview.audio(AUDIO, optional) - muxed into the preview as AAC. The node is tolerant of dict/object,(waveform, sr)tuples, and[C,N]/[N,C]shapes; if audio can't be used it logs that and still previews video.images(IMAGE) out - your frames, untouched, ready for the next node.
The player itself is clean: auto-looping, click to play/pause, hover to hear the audio, a Full screen button, and a compact badge showing resolution, FPS, frame count, and duration. The wheel passes through to the ComfyUI canvas so zooming still works over the node.
Install and gotchas
The pack clones normally:
cd ComfyUI/custom_nodes
git clone https://github.com/Deno2026/comfyui-deno-custom-nodes.git
# restart ComfyUI
The one real dependency is PyAV, and it is not in the pack's requirements.txt - the author deliberately left it out and made the node fail gracefully instead. If it's missing you'll see a one-line install hint rather than a graph-breaking traceback:
pip install av
# then restart ComfyUI
That's the setup. After that the only thing that ever surprises people is the audio tolerance: if you're feeding a weird audio shape from a node that doesn't produce standard AUDIO, the preview still works, it just drops the sound. Which, for a preview node, is the right failure mode.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | Image frame batch to preview as a video. | |
| frame_rate | INT | 251–120 | Playback frame rate for the preview video. |
| audioopt | AUDIO | Optional audio attached to the temporary preview video. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | Unchanged input frames passed through after preview creation. |