IMAGE Fallback @ vrch.ai
Never let a dead frame blank out your realtime pipeline
- image
- default_image
- IMAGE
Realtime workflows drop frames. That's just physics: a channel loader has nothing to load yet, a WebSocket input hasn't delivered its first image, an upstream node choked for one tick. The problem is what happens downstream - a null or empty image usually kills whatever's waiting on it, and in an interactive setup that means a black screen or a crashed pass right in front of an audience. The IMAGE Fallback node exists to make that impossible.
What it is
Its job is to guarantee that its IMAGE output is always a real image, no matter what's coming in. The fallback_option picker decides what you get when the input is empty or missing:
- default_image - fall back to a specific image you feed into the optional
default_imageinput. Best when there's a logo, a static title card, or a "loading" frame you want on screen. - placeholder_image - generate a solid-color rectangle using
placeholder_width,placeholder_height, andplaceholder_color(a hex string like#000000). Zero extra wiring, just a colored block to keep the pipeline alive. - last_valid_image - hold onto the last good frame it received and keep emitting that until something new arrives. This is the one for smooth realtime: the display never blanks, it just freezes briefly.
The inputs that matter for a beginner are the three fallback choices and the placeholder dimensions - placeholder_width and placeholder_height default to 512×512, which is a fine neutral size, and placeholder_color defaults to black. The optional image input is what you're protecting: wire your live source in there, and the node only steps in when that input goes empty. debug prints which path it took, which is genuinely useful the first time you're not sure whether you're seeing the real image or the fallback.
Where you'll actually want this: right after anything that reads a live source. An IMAGE Web Viewer Channel Loader before the first frame has been displayed. A WebSocket channel loader while the network is connecting. Any node in an instant-queue graph that can legitimately produce nothing on a given tick. Slap a fallback between the unreliable source and the downstream sampler, and your whole pipeline stops being one dead frame away from a blank.
How to install
Install is the shared pack story:
cd ComfyUI/custom_nodes
git clone https://github.com/VrchStudio/comfyui-web-viewer
cd comfyui-web-viewer
pip install -r requirements.txt
restart ComfyUI. Manager users search "ComfyUI Web Viewer". Windows portable: python_embeded\python.exe -m pip install -r ComfyUI\custom_nodes\comfyui-web-viewer\requirements.txt. No models involved.
Common issues
One honest note: last_valid_image is the trap option in disguise. It gives the smoothest output, but it can also mask a dead upstream signal indefinitely - your "live" display might be showing a ten-second-old frame and you'd never know. If you're debugging a realtime setup, run with placeholder_image and debug on first, get the pipeline truly live, then switch to last_valid_image for the final look. That order has saved me from a whole evening of chasing ghosts.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| fallback_option | COMBO | placeholder_image | 3 options: default_image, placeholder_image, last_valid_image |
| placeholder_width | INT | 5121–4096 | — |
| placeholder_height | INT | 5121–4096 | — |
| placeholder_color | STRING | #000000 | — |
| debug | BOOLEAN | false | — |
| imageopt | IMAGE | — | |
| default_imageopt | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |