AUDIO Web Viewer @ vrch.ai
Stream audio to a browser tab with a visualizer attached
- audio
- AUDIO
- URL
The AUDIO Web Viewer @ vrch.ai is the output half of the pack's audio story: it takes the AUDIO running through your workflow and plays it in a browser tab - with a built-in visualizer so you get something to look at while you listen. This is the node you hear in the pack's signature demos: the real-time voice clone setup where you record, hear your cloned voice play back, and watch a waveform dance along. Input audio in, browser window out, problem solved.
It's the audio cousin of the plain Web Viewer node, and it shares the same bones: it opens a page served by your ComfyUI instance and updates it on a refresh loop. The difference is that it's built to keep a continuous audio stream in sync rather than just display the newest file.
How it works
audio in, and the node streams it to a viewer tab whose address also comes out as a URL output. The display and transport details are all in the inputs:
- visualizer_type - the eye candy:
waveform,bars,circles,matrix,particles,spiral,waterball. Picking one is the whole "make it look cool" decision, and it's the most fun input on the node. - refresh_interval (ms) - how often the viewer re-pulls; lower is snappier, higher is kinder to a loaded machine.
- fade_in_duration, fade_out_duration, crossfade_duration (ms) - smooth the audio in, out, and between clips instead of hard cuts. Set these when you're doing continuous playback of generated chunks and want it to feel like one performance.
- channel (1–8) - which audio bus this viewer is tied to, keeping multiple viewers from stepping on each other.
- server / ssl - where ComfyUI lives, same as the image Web Viewer.
- save_settings - remember the viewer's UI state between sessions.
- server_messages - a text banner the viewer can display (handy for a "now playing" label or a live caption).
- window_width / window_height, show_url, dev_mode, extra_params, url - the usual viewer controls;
urloverrides the served page entirely if you want to host your own.
Outputs: AUDIO (the input passed through, so you can keep processing it downstream) and URL (the tab's address, if you want to display or log it).
Installing it
Standard pack install:
cd ComfyUI/custom_nodes
git clone https://github.com/VrchStudio/comfyui-web-viewer
pip install -r comfyui-web-viewer/requirements.txt
Or install "ComfyUI Web Viewer" via ComfyUI Manager and restart. FFmpeg is needed for the streaming/decoding path, so the README's FFmpeg troubleshooting applies (install the tool, ensure the ffmpeg-python package is the one installed, not a stray ffmpeg package).
Where people get tripped up
- The usual browser rules. The viewer tab needs to be reachable over http (Chrome may need the
--unsafely-treat-insecure-origin-as-secureflag), and if you're opening it from a non-local domain, launch ComfyUI with--enable-cors-headerto avoid the origin-mismatch 403. - Silence when the channel doesn't match. If this viewer is on channel 2 but the audio source is feeding channel 1, nothing plays and nothing obviously errors. Keep channel numbers consistent across a workflow.
- Latency is polling-based by design. For interactive voice work this is fine; for true realtime conversation latency you'd look at the pack's WebSocket path instead. This node is the polished, visual playback layer.
The canonical use remains the F5-TTS voice clone workflow: Audio Recorder → TTS → Audio Web Viewer, hear your clone, watch the waterball.
Inputs (17)
| Name | Type | Default | Description |
|---|---|---|---|
| audio | AUDIO | — | |
| channel | COMBO | 1 | 8 options: 1, 2, 3, 4, 5, 6, +2 |
| server | STRING | 127.0.0.1:8188 | — |
| ssl | BOOLEAN | false | — |
| refresh_interval | INT | 50001–10000 | — |
| visualizer_type | COMBO | waveform | 7 options: bars, circles, matrix, particles, spiral, waterball, +1 |
| fade_in_duration | INT | 00–10000 | — |
| fade_out_duration | INT | 00–10000 | — |
| crossfade_duration | INT | 00–10000 | — |
| server_messages | STRING | — | |
| save_settings | BOOLEAN | false | — |
| window_width | INT | 1280100–10240 | — |
| window_height | INT | 960100–10240 | — |
| show_url | BOOLEAN | false | — |
| dev_mode | BOOLEAN | false | — |
| extra_params | STRING | — | |
| url | STRING | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| AUDIO | AUDIO | — |
| URL | STRING | — |