Play Sound
Make ComfyUI tell you when the queue is actually done
- any
- passthrough
The classic noob move in ComfyUI: kick off a 40-minute upscale batch, tab away to doomscroll, and come back to find it finished nine minutes ago. Play Sound is the five-minute fix - a node you drop at the end of the graph that plays an audio file the moment execution reaches it. It's a tiny thing, but it's the difference between babysitting a queue and trusting it.
This is the Enhancement Utils version from phazei/ComfyUI-Enhancement-Utils, and its lineage matters for one reason: it's a rewritten, V3-API port of the same node from pythongosssss's famous ComfyUI-Custom-Scripts. That pack is aging and tied to the old node API; this one is built on the modern comfy_api and works inside subgraphs. If you're already on Enhancement Utils, you get Play Sound without installing a second legacy pack.
How it works
The server side does almost nothing - it passes your input through and returns a ui signal. The actual audio is played in your browser via the HTML5 Audio API, handled by the pack's client-side JS. That split is worth understanding, because it explains the two things that can silently go wrong (below). The node also declares it should always re-execute, so the sound fires on every run instead of being skipped by ComfyUI's caching.
Inputs and the one output
any- connect any output from the graph here to trigger the sound. This is your trigger wire and the data passes through unchanged.mode-alwaysplays every time the node executes;on empty queuewaits until the whole queue has drained, so you only get paged when everything is done, not after every intermediate step. For long batch runs, this is the mode you want.volume- 0.0 to 1.0, default 0.5. Told you it was simple.file- the sound file, defaultnotify.mp3(bundled with the pack), any other file inassets/, or a full URL to any audio file.passthrough- the only output: youranyinput, unchanged and type-matched, so you can chain downstream nodes off it.
Installing it
Same pack install as everything else - ComfyUI Manager, search "Enhancement Utils", or:
cd ComfyUI/custom_nodes
git clone https://github.com/phazei/ComfyUI-Enhancement-Utils.git
cd ComfyUI-Enhancement-Utils
pip install -r requirements.txt
Restart, find it under utils.
Where people get burned
- Browser autoplay policies. Since playback is client-side, Chrome and friends may block audio until you've interacted with the ComfyUI tab at least once. If you hear nothing but the workflow ran fine, click the canvas once and it usually frees up.
- No browser, no sound. Run ComfyUI headless or via API and there's no tab to play audio in - the node will still execute and pass data, it just can't make a sound. That's inherent to the design, not a bug.
on empty queuecan feel like it's "not working." If you test it mid-queue, nothing plays by design. Run it as the last step of a finished queue and it fires.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| any | COMFY_MATCHTYPE_V3 | Connect any output here to trigger the sound and pass the data through. | |
| mode | COMBO | always | 'always' plays every execution. 'on empty queue' only plays when the queue is empty. |
| volume | FLOAT | 0.50–1 | Playback volume (0.0 = silent, 1.0 = full volume). |
| file | STRING | notify.mp3 | Sound file name (from assets/) or a full URL. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| passthrough | COMFY_MATCHTYPE_V3 | Passes the 'any' input through unchanged. |