πͺ ποΈ Live Latent Preview
The live latent preview, on your node instead of the sampler's
ComfyUI already shows you the image forming while a sampler runs - the little preview that materializes on the KSampler node, step by step. This node doesn't add a new preview engine. It gives you a place to put the preview: a dedicated node, sized and parked wherever you like, that doesn't grow or shift as the sampler node fills up.
If your graph is wide and the sampler lives off-screen, or you have three samplers and want to watch one of them, or you just want a clean "monitor" panel in a corner with nothing else attached to it, that's the case for this node.
How it works
The backend half is a stub. It has no inputs, no outputs, returns nothing, and is flagged as an output node so it always executes - that's it. The actual work is frontend JavaScript.
That script subscribes to ComfyUI's sampler preview stream - the binary preview images the server broadcasts during sampling - and paints them inside the node's own canvas area. When the install supports preview metadata, the message carries the id of the sampler that produced it, which is how several of these nodes can each show a different sampler. When it doesn't, the node falls back to whatever is currently executing.
It also finds the sampler nodes in your graph and lets you pick which one you're watching from a small dropdown, so you aren't guessing which preview is landing where. And it deliberately holds itself to a fixed size with object-fit: contain - no downward growth loop, which is a real bug class in preview nodes and the reason this one grew a CSS injection to defend its own box on both the classic canvas and the newer Vue frontend.
The pack is upfront that it supports Frontend V1 (LiteGraph) and V2 (Vue), with the visual LoRA loader still broken on V1 - this preview node isn't in that category, it's one of the ones that works on both.
Inputs and outputs
None. Zero in, zero out. It never appears in a wire, and it can't be connected to anything - it's a display, not a decode. Nothing to wire, nothing to configure on the node itself beyond which sampler you're following in the UI.
Install
ComfyUI Manager β search SaturnNodes, or:
cd ComfyUI/custom_nodes
git clone https://github.com/KOFiblto/ComfyUI-SaturnNodes
Restart ComfyUI. The pack's requirements.txt is Pillow, numpy and piexif; this node needs none of them. It lands under πͺ SaturnNodes/Previews.
Where people get burned
Nothing renders. The node displays what the sampler streams; it doesn't decode anything itself. If latent previews are switched off in your ComfyUI settings - or disabled at launch, e.g. a --preview-method none flag - there's no stream to show and the node sits empty. Turn the preview method back on and it works.
The preview looks like a smeared mess. That's inherent to latent previews. A latent is a compressed representation, and the fast preview decoders project it into something eyeballable rather than actually running the VAE - great for watching composition settle, useless for judging color or fine detail. Judge the finished image.
It shows a different sampler than you expected. With multiple samplers running, the fallback path attributes the preview to whichever node is executing. Use the sampler picker in the node's UI rather than relying on attribution.
It's a dead end in your graph. If you want the preview in a finished form - a real decode, a file on disk - you want a decode + save path. This node only ever draws on the canvas.
Inputs (0)
No inputs
Outputs (0)
No outputs