๐ any_alarm
Want a beep when your ComfyUI render finally finishes? any_alarm is the 5-minute fix
- signal
ComfyUI is silent by default, and that's a problem the moment your generation takes more than a coffee break. You alt-tab to something useful, come back, and have no idea whether the render finished 30 seconds ago or is still chugging. any_alarm fixes that with one dead-simple trick: it plays a sound whenever any signal arrives at it. Wire it to the end of your workflow and your PC becomes a bingo hall - chime on, render done.
It's a "universal signal notifier," which is the fanciest way possible to say "a node that beeps." You drop it at the end of a graph, connect basically anything into signal, and every time that upstream node finishes, you hear a sound. People have wanted exactly this since the early ComfyUI days - there's a 2023 r/comfyui thread asking for a "sound trigger when done," where the usual answer (a pythongosssss Custom Scripts node) left at least one user confused because it played nothing. This one actually plays.
How it works
Under the hood it's pygame.mixer. When a signal hits, the node resolves a sound file from your mode and event choice, loads it, and plays it in a daemon thread so ComfyUI doesn't stutter waiting for audio. Two details make it reliable as a notifier: IS_CHANGED returns NaN, which forces the node to re-execute on every queue run even if its input didn't change, and a save/load pair persists your volume and mode choices between sessions.
Sound files ship in the pack: sounds/female/, sounds/male/, sounds/robot/, each with start.mp3, load_complete.mp3, and work_complete.mp3. One mild README lie: it tells you voice files must be named *.wav, but the code scans for .mp3 or .wav and the shipped files are .mp3. Don't go renaming anything.
The inputs that matter
The node has no outputs - it's a terminal notifier, so you can't chain through it. Six inputs, and you'll actually touch four:
- signal (any type) - wire any output into it. Image, latent, whatever; its presence is the trigger.
- mode -
โ๏ธ female,โ๏ธ male,๐ค robot, or๐๏ธ custom. - event -
start,load_complete, orwork_complete; pick the chime. Pairstartwith a node near the top of your graph,work_completewith the final Save Image. - volume (0.0โ1.0, default 0.7) and mute - the mute toggle is the smartest feature here; flip it instead of deleting the node when the queue is going to fire it fifty times.
Installing it
ComfyUI Manager is easiest - search "any_alarm" (pack title: ComfyUI-any_alarm) and install. Or clone it yourself:
cd ComfyUI/custom_nodes/
git clone https://github.com/Rimor-dev/ComfyUI-any_alarm
# then restart ComfyUI
It needs pygame (Python 3.10+). ComfyUI Manager will normally pull that from requirements.txt automatically - but be warned, the bundled file is a mangled copy of the README's markdown block, and pip can choke on it. If Manager's dependency step errors out, install pygame directly:
# Linux/Mac
pip install pygame
# Windows (your ComfyUI python)
cd ComfyUI/python_embedded
python.exe -m pip install pygame
No models, no huge downloads, no other deps. It's genuinely one of the lightest installs you'll do.
Common issues
- No sound at all. Check mute (it defaults to off, but still), check volume, and watch the console - the node prints
[any_alarm] File not found: ...if a path is wrong. If you seeSound error, pygame probably isn't installed or your machine has no audio device. - Nothing plays on a headless server.
pygame.mixer.init()runs when the node is created, and a box with no sound card can throw there. This node wants a machine that can actually output audio. - My custom file isn't in the dropdown. The
custom_filelist is scanned when the node is constructed, so drop your.mp3/.wavintosounds/custom/and restart ComfyUI (or delete and re-add the node). - Chiming every item in a queue. Because it re-runs on every execution, a 10-image batch beeps ten times. That's by design - it's an alarm, and it's what the mute toggle is for.
- One quick gotcha: it's a single audio stream, so a second trigger cuts the first chime off. For a "done" alert that's fine; for overlapping queue starts it's just how pygame rolls.
For a notifier that took an afternoon to write, it covers the one job it needs to: telling you the render is done without you babysitting the browser tab.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| signal | * | Any incoming signal triggers sound | |
| mute | BOOLEAN | false | Temporarily disable sound |
| mode | COMBO | โ๏ธ female | 3 options: โ๏ธ female, โ๏ธ male, ๐ค robot |
| event | COMBO | load_complete | 3 options: load_complete, start, work_complete |
| custom_file | COMBO | none | 1 options: none |
| volume | FLOAT | 0.700โ1 | โ |
Outputs (0)
No outputs