Live Preview (Large)
Finally, a big live preview in ComfyUI — watch your image form, not a postage stamp
- images
- images
If you came over from A1111 or Forge, you probably remember the small joy of watching your image emerge - denoise step by step, full size, right in front of you. ComfyUI's built-in preview is a tiny thumbnail in the corner of the graph. It works, but it's not watching; it's squinting. Live Preview (Large) fixes that with one node and zero processing overhead: drop it in your workflow and a big draggable, resizable overlay window pops up showing every denoising step as it happens. For long hi-res gens and especially video, where you can wait minutes for something that turns out wrong, this is the difference between noticing a bad render at step 30 and finding out at step 300.
How it works
The Python side is deliberately boring. LivePreview has one required images (IMAGE) input and one images (IMAGE) output, and its entire job is return (images,) - a pure pass-through. The real work lives in the frontend extension (js/live_preview.js), which hooks into ComfyUI's existing b_preview websocket event and paints each frame onto a canvas in a floating overlay. Because it taps the same preview stream the built-in thumbnail already uses, there's no extra sampling, no VAE decode, no overhead at all. The overlay only activates when a LivePreview node is present somewhere in the graph - that's your "enable me" switch.
The window itself is nice: drag it by the header, resize from the bottom-right grip, and it clamps itself to the viewport so you can't lose it off-screen. Its position and size persist across reloads via localStorage. The header shows a step counter, a live FPS readout, and a status dot - green while generating, purple when done. There's also a persistent ⚡ button in the bottom-right corner of the ComfyUI page to toggle the window anytime, even after generation finished, which is handy for re-examining the last image.
The inputs that matter
Honestly, just the two:
images(IMAGE, required) - wire in the image stream. The node returns it unchanged.images(IMAGE, output) - feeds onward to your Preview Image / Save Image.
The README says you can leave it floating unconnected. Be a little skeptical of that: images is a required input, and ComfyUI can refuse to queue a graph with an unconnected required input. The reliable move is to splice it inline in your image chain - it's a pass-through, so it costs nothing and changes nothing. That's its intended use anyway.
Installing it
ComfyUI Manager (search "ComfyUI Live Preview") is easiest. Or the manual route:
cd ComfyUI/custom_nodes
git clone https://github.com/TechnoWarrior2/comfyui-live-preview
Then restart ComfyUI. That's the whole install: no Python dependencies (dependencies = []), no requirements.txt, no model downloads. For once, a custom node that can't fight your other packages.
Gotchas
- No preview frames? ComfyUI must broadcast previews - launch with
--preview-method auto(or similar). If you started ComfyUI with previews disabled, the overlay just won't get frames. - The 1.1.0 rename. The node's internal id changed from
AlexLivePreviewtoLivePreview. Old saved workflows show a red missing node type: AlexLivePreview box. Fix: delete it, re-add "Live Preview (Large)", reconnect if it was wired in, re-save. Since it's a pass-through with no settings, nothing else is lost (the overlay's saved position resets once). - Keep the node in the workflow - the overlay won't appear without it, even if the ⚡ toggle exists.
Is it essential? No. Is it the sort of tiny quality-of-life fix that makes ComfyUI feel less like a control panel and more like a tool? Absolutely. If you miss Forge's big preview, this is the closest thing you'll get without leaving the graph.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |