🖥️ Universal Preview
One preview node for images, audio, latents, and text
- any
Core ComfyUI's Preview Image is great at exactly one job: images. Wire it a string, a latent, or an audio clip and it shrugs. The 🖥️ Universal Preview is the "preview anything" version: one any input, and depending on what arrives it renders images, plays audio, or shows a formatted text readout. It's the node you reach for when you're not sure what a socket is carrying and you want to see it rather than read a type label.
What you actually get depends on the input type:
- IMAGE (4D tensor) - rendered to the screen like a normal preview, one image per batch item.
- MASK (3D tensor) - visualized as grayscale images, so you can eyeball whether a mask is covering what you think it is.
- AUDIO - a dict with
waveformandsample_rate(the standard ComfyUI audio format) gets written to a temp file and surfaced with an inline player, plus a stats line: batch, sample rate, channels, duration. This is the genuinely rare capability - most packs can't preview audio at all, and it's the fastest way to sanity-check a generated soundtrack or a decomposed video's audio track. - LATENT - shows dimensions (batch, size, channels) as text. It does not decode the latent into an image - use a VAE decode for that - but it tells you the shape at a glance.
- Strings, numbers, booleans, lists, dicts - formatted text output: strings show length and a preview (truncated at 500 chars), lists show the first few items and the count, dicts get pretty-printed JSON.
The mechanism is straightforward and worth knowing for troubleshooting: it's a pure output node with no outputs of its own, so everything you see is reported through the UI. Images are saved to ComfyUI's temp directory (not your output folder), and audio is encoded to FLAC via PyAV so the browser player can stream it. The important operational consequence is the PyAV dependency: preview.py imports av at module load, and because every node in this pack is imported eagerly at startup, a missing PyAV will stop the whole pack from loading, not just this node. Stock ComfyUI installs bundle PyAV (it's used for core video features), so this usually "just works" - but if you run a stripped-down build and see the entire ⚡ Logic menu missing, pip install av in ComfyUI's Python environment is the fix, and it'll restore all 13 nodes.
A few behaviors to file away. Long strings get truncated to 500 characters with a ... note, so don't use this to read a full prompt file. Audio goes to temp, meaning it won't survive in your output folder - treat it as a listen-now check, not an archive. Latents don't decode, so if you want to see the image inside a latent you still need a VAE Decode + preview downstream. And, like every node in the pack, it's always dirty (IS_CHANGED → NaN), so wherever you park it, everything upstream executes every run. It's the ideal debugging partner - just remember to unplug it from expensive chains when you're done inspecting.
Where does this beat its sibling, Preview Type? Preview Type tells you the type; Universal Preview shows you the goods. For a video pipeline you'll want both: Preview Type to confirm the socket is IMAGE, Universal Preview to actually look at the frames or hear the audio.
Install is the standard pack flow:
cd ComfyUI/custom_nodes
git clone https://github.com/playboy-dongan/ComfyUI-Logic-nodes
or ComfyUI Manager → "ComfyUI-Logic-nodes" → restart. No models to download; PyAV is the one soft dependency, and it's usually already there.
If you've ever wanted one "just show me what this is" socket for your whole graph, this is it.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| any | * | — |
Outputs (0)
No outputs