RedNode Live Preview
Watch the render form instead of squinting at a colour smear
- images
- images
The problem it solves
ComfyUI already streams an in-progress preview, but it paints it small, on the node that happens to be sampling. In this pack the Workspace samples inside itself, so that preview lands under a big tabbed panel where nobody can see it. That's the whole reason this node exists. Drop a RedNode Live Preview next to your rig, wire the image output into it, and you get the picture forming at a readable size with a progress bar and a rendering 4 / 27 tag, then the finished frame when the run lands. Nothing renders twice - the preview is decoded from the same latents the sampler is already producing.
It's also just nicer to watch.
How it works
Two halves, and only one of them is Python-visible to you.
The node is a PreviewImage with a pass-through. It takes one input, images (IMAGE), and gives back one output, images (IMAGE), unchanged. That output is the point: it's a preview you can sit inline in a chain without breaking it. Because it's an output node it always executes (the same caching rule that makes Preview Image and Save Image always run), and the finished frame goes through ComfyUI's normal preview/temp channel, so nothing new appears in your output folder.
The panel is a DOM widget the frontend builds, minimum 300×220, with the frame aspect-fit to fill it. The wheel over it still zooms the canvas, so it doesn't trap your mouse.
The streaming is the clever bit. The pack wraps its own sampler calls, and inside that wrapper each step's denoised estimate gets decoded by a tiny decoder (the ones in models/vae_approx), shrunk to a 512px-long-edge JPEG, and pushed to the browser as a rednode-live-frame event tagged with the node id, the step and the total. In the source it hooks latent_preview.prepare_callback for exactly one common_ksampler call and puts the original back in a finally - nothing outside that call is touched.
That's why the README claims it ignores ComfyUI's own preview setting, and for the pack's own samplers it's true. The Workspace's built-in sampler, the Detailer's passes, Paint Render and the refine pipeline all stream. A stock KSampler does not - it isn't wrapped. For those, the panel falls back to core's b_preview / progress events, which do obey your Settings → Execution preview method. If a plain KSampler shows you nothing, that setting is where to look.
The tag tells you which decoder made the frame, e.g. pass 1 of 2 · rendering 4 / 27 · lighttaew2_1. The label comes from whatever is streaming, so a Detailer pass or a camera shot names itself.
Install and the file that matters
Search RedNode Studio in ComfyUI Manager, or:
cd ComfyUI/custom_nodes
git clone https://github.com/RedNodeAI/ComfyUI-RedNodeStudio.git ComfyUI-RedNodeStudio
Restart ComfyUI. Python 3.10+, no pip dependencies beyond what ComfyUI already installs. The Krea 2 nodes want ComfyUI ≥ 0.26.0; on anything older the rest of the pack still loads and says so on startup.
For a sharp preview you want the small VAE:
# models/vae_approx/lighttaew2_1.safetensors
# from https://huggingface.co/lightx2v/Autoencoders
The node asks the model's latent format for a decoder name and looks for a file in vae_approx starting with it - lighttaew2_1 for Krea 2, whichever file matches the architecture otherwise. Video-style TAEs load the TAEHV way, the same path Wan previews use. Miss the file and nothing breaks: frames still stream, as the colour smear, decoded by latent2rgb. The tag literally says the decoder name, which is how you find out in one second instead of five minutes.
Where people get burned
Wired to nothing. Unwired, the node deliberately shows whatever is rendering - a sensible default for a node you just dropped on the canvas. Wired, it follows its input link back to one node id and only accepts frames tagged with it, logging in the console which node it's showing frames from. A silent panel on an unwired input is a wire problem, not a preview problem.
Expecting a plain KSampler to stream. Covered above: core's stream is the fallback here, and it's the thing the preview-method setting governs.
A preview that froze after the first frame. That bug is real and not specific to this pack - people hit it with a stock KSampler even with taesd set and lighttaew2_1.safetensors sitting in vae_approx, console cheerfully reporting TAEHV loaded. Here the decoder name rides on the frame, so you can tell a decode problem from a wire problem.
Putting it mid-chain in external-sampler mode. In the Workspace's external-sampler route the preview's input can arrive empty. It doesn't crash - it prints "no image on this run; nothing to show" and blocks its own output socket rather than handing a core node a None. Downstream of the preview, that branch skips for that run. It's a preview; park it at the end of the chain next to the Review.
Keep several if you like. Each panel matches frames by node id, so two Live Previews watch two different nodes, and the tiny decoder is cached per latent format - loaded once per run, not once per step.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |