🔔AGSoft Process Notify
A bell that rings in your browser when the queue is finally done
- any_input
- any
The name is honest for once: this is a bell. 🔔AGSoft Process Notify sits at the end of whatever slow thing you're running - a 50-step batch, a video encode, a big upscale pass - and when the node it's wired to finishes, it plays a sound in your browser so you can stop alt-tabbing back to ComfyUI to check the progress bar. No API, no phone push, no model files. Just a polite little chime (or an obnoxious alarm, your call) tacked onto the end of the graph.
Why you'd reach for it
ComfyUI gives you a progress bar, but it doesn't tell you the queue is done when you're in another tab. If you run long jobs - and this pack's own video side (Load Video, Video Save, the LTX and MiniMax bases) is exactly the kind of thing that takes minutes - you either babysit the screen or you get a bell. Other notification nodes exist, but this one plays in the browser itself, so it works identically on Windows, macOS, and a headless Linux box you're browsing from, with zero OS-specific setup. One node, no config, done.
How it works
It's a two-part trick. The Python side does almost nothing: it takes whatever's plugged into any_input, passes it straight through, and emits a ui message telling the frontend which sound to play and how. The node's own JavaScript listens for that onExecuted event and plays the sound with the Web Audio API. That's why there's no system dependency - the audio comes out of whatever browser tab has ComfyUI open.
Two engine details make it behave the way you want. First, the any_input socket is typed * (ANY), the ComfyUI wildcard, so it accepts literally any output in the graph - an image, a latent, a string, a video, doesn't matter. Second, the node returns float("nan") from IS_CHANGED - the well-known "always run" idiom in the plumbing layer. A notification node has to fire on every execution even when nothing upstream changed, and that's exactly what the NaN buys you. Without it, ComfyUI's caching would occasionally decide the bell could be skipped.
The inputs that matter
You'll touch three widgets and probably never think about them again:
sound_file- a built-in synth preset (beep, ding, chime, success, alarm, pop) or any file sitting in the pack'ssounds/folder. Two sample clips ship with it, a drum loop and an "opium" wav, if you want something less utility-tone.volume- 0 to 1, default 1. Self-explanatory.loop- keeps the sound playing until you hit Stop or the next trigger fires.delay- waits this many seconds before playing, if the bell tends to fire before the node actually wraps up.
The any_input socket is optional and unconnected by default - the node runs anyway and just rings on its own. Wire it to the output of the node you want to announce. The any output passes that input through untouched, so you can inline it mid-graph, but you'll usually just tack it on the end as a terminal node.
Two buttons live on the node itself: 🔔 Test plays the current settings without queuing a run, and ⏹ Stop kills every active sound and timer at once - no matter how many loops you've stacked up.
Installing
cd ComfyUI/custom_nodes
git clone https://github.com/Art-xmaster/comfyui-AGSoft.git
Restart ComfyUI. Or skip the terminal and use ComfyUI-Manager, searching "comfyui-AGSoft". No models to download and no extra dependencies for this node - the pack's requirements (opencv, translators) serve its other 80-some nodes, not this one.
Where people get burned
- The first run is silent. Browsers block audio until you interact with the page. Click 🔔 Test once and the AudioContext unlocks; after that, queue finishes actually ring.
- You added a sound file and it's not in the dropdown. The sound list is built when the node imports. Drop your
.mp3/.wav/.oggintosounds/and fully restart ComfyUI - a page reload isn't enough. - A loop that won't shut up. That's what ⏹ Stop is for. It clears every audio and timer, regardless of how many Test presses queued them.
- It plays in the browser, not your speakers' global mixer. Mute the ComfyUI tab when you don't want the whole room to know your batch is done.
Honest verdict: you don't need an 80-node pack for one bell. But if AGSoft is already in your custom_nodes for its loops and video utilities, this is the node you'll quietly thank on the third long render. It does exactly one thing and doesn't ask anything of you in return.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| sound_file | COMBO | beep | Sound: built-in synth presets (beep/ding/chime/success/alarm/pop) or a file from the sounds/ folder. --- Звук: встроенные пресеты (beep/ding/chime/success/alarm/pop) или файл из папки sounds/. |
| volume | FLOAT | 1.000–1 | Громкость 0..1. / Volume 0..1. |
| loop | BOOLEAN | false | Loop the sound until stopped / next trigger. --- Зациклить звук до остановки / следующего срабатывания. |
| delay | FLOAT | 0.00–10 | Задержка перед воспроизведением (сек). / Playback delay (sec). |
| any_inputopt | * | Any-type input: connect any node output; when it finishes, the sound plays. Can stay unconnected. --- Вход любого типа: подключите выход любой ноды — по её завершении проиграется звук. Может оставаться неподключённым. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| any | * | — |