Nodes/Neural Dreamer Nodes/ND Live Preview Bridge
ComfyUI Node

ND Live Preview Bridge

Watch the sampler paint, inside the node you're picking from

By neural-dreamer·Created 22 days ago·Updated 2 days ago· 5
ND Live Preview Bridge
  • model
  • model
  • preview_data
◄methodlatent2rgb►
◄size384►

ComfyUI already previews a running sampler - in its own little window, in its own place on the canvas. This node exists so that preview shows up inside someone else's node: specifically, the ND Variant Preview Selector, which is where you're looking anyway when you're waiting for four variants to finish.

What it is, mechanically

You drop it on the MODEL wire, after the loader and after whatever patches that model (LoRA loaders, ModelSampling and friends). It hands the model back unchanged but keeps a post-CFG hook attached - the same mechanism model patches use - so on each sampler step it receives the predicted image. The hook turns the first image of the batch into a small JPEG and pushes it to the browser as its own event, separate from ComfyUI's preview channel.

That's the whole trick, and it explains the two things people find confusing: the model passes through untouched, so nothing about your generation changes; and because the frames are the pack's own channel rather than ComfyUI's, they can be displayed anywhere in the pack's UI.

Inputs and outputs

  • model (MODEL, required) → model (MODEL) - pass-through with a hook. Wire the output to your sampler as if this node weren't there.
  • method (enum, latent2rgb or taesd, default latent2rgb) - the author's tooltip is the short version: "latent2rgb: fast, rough colours. taesd: sharper, needs the TAESD decoder in models/vae_approx and a little GPU time." For a "is this composition working" glance, latent2rgb is fine and costs nothing. If you're judging colour or fine detail while it runs, taesd is worth the decoder download and the GPU tick.
  • size (INT, default 384, range 64–1024, step 32) - the longer side of each frame. Bigger frames are more useful for judging a face mid-run and slightly more expensive to encode; 384 is a sensible resting point.
  • preview_data output (ND_LIVE) - not a data wire in the usual sense. It's a link: plug it into the Pack Parameters that feeds a selector to tell the bridge which selector the frames belong to. Selectors fed by the sampled images get the frames anyway, so the link matters when the wiring between sampler and selector is indirect.

Why turning the preview on doesn't cost you a re-run

This is the part I'd want to know before trusting it. The bridge only sends frames while a selector feeding off it has Live preview enabled and on screen - the browser marks those selectors in the queued prompt via a _meta field, which doesn't affect the cache. So toggling live preview on or off never invalidates anything, and never re-runs sampling. No sneakily changing the seed to force a redraw, no twenty-minute regeneration because you wanted to see the steps.

Related: when frames are coming from the bridge, ComfyUI's own sampler preview is switched off for that run - including while the eye button hides the live preview. Without a bridge in front of the sampler, the selector falls back to ComfyUI's previews, which means Settings → Comfy → Execution → Live preview method has to be on something other than None, or you get an empty preview and assume the node is broken.

Install

Part of Neural Dreamer Nodes. Zero Python dependencies (the pyproject.toml dependency list is empty), no models - unless you pick taesd, which needs the TAESD decoder weights sitting in models/vae_approx. Drop the taesd_decoder.pth there and restart.

cd ComfyUI/custom_nodes
git clone https://github.com/neural-dreamer/ComfyUI-NeuralDreamer-Nodes.git

Or install "Neural Dreamer Nodes" through ComfyUI Manager and restart. Refresh the browser tab afterwards - the preview plumbing is frontend code.

Common issues

Nothing appears during sampling. Three usual causes, in order of likelihood: Live preview is still off in the selector's settings (it's off by default), the selector is on a different subgraph branch and preview_data wasn't plugged into its Pack, or you chose taesd without the decoder in models/vae_approx.

The colours look wrong. That's latent2rgb being honest with you. It decodes the latent approximately; purple shadows and washed mid-tones are normal. Switch to taesd if you need to judge colour mid-run.

The output frames are of the wrong variant. The bridge previews the first image of the batch - by design, since showing all eight simultaneously defeats the purpose. Thumbnails keep the previous results until the new batch arrives.

It broke my workflow with custom samplers. The hook rides on the model's sampling patches, so exotic sampling paths are where it's most likely to be silently ignored. The README's claim that it works "whatever ComfyUI's Live preview method is, and through subgraphs" is the intent; a node that patched the model out-of-band might behave differently.

CategoryNeural Dreamer/Variant

Inputs (3)

NameTypeDefaultDescription
modelMODEL—
methodCOMBOlatent2rgblatent2rgb: fast, rough colours. taesd: sharper, needs the TAESD decoder in models/vae_approx and a little GPU time.
sizeINT38464–1024Longer side of the preview frames, in pixels.

Outputs (2)

NameTypeDescription
modelMODEL—
preview_dataND_LIVE—