Webhook
ComfyUI Notifications Node Guide
- any
This is the node for when a sound or a browser popup isn't enough - you want a ping somewhere else entirely, because your ComfyUI tab isn't even open. Webhook fires an HTTP POST to any URL you give it when your workflow finishes, which means you can wire it into Discord, Slack, ntfy, a Zapier/Make/n8n automation, or your own five-line server, and actually leave the house while a long batch renders.
It's part of the same lightweight ComfyUI-Notifications pack as Play Sound and System Notification, and it works the same way structurally: wire something into the any input (a wildcard - it accepts any type from any node) just to tell ComfyUI "run this after that node," and the node itself has no outputs. It's a terminal node - a dead end in the graph that still executes because it's marked as an output node.
What actually gets sent. The body is built from json_format, which defaults to {"text": "<notification_text>"}. The <notification_text> bit is a placeholder - it gets swapped out for whatever you type into the notification_text field. That matters because different services want different JSON shapes: a Discord webhook wants {"content": "..."}, not {"text": "..."}, so you'll need to edit json_format to match whatever you're posting to rather than assuming the default just works everywhere.
The fields:
- webhook_url - where the POST goes. It ships defaulted to
http://localhost:5000/, which is a placeholder, not a real destination - the first thing to change. - verify_ssl - on by default. Only turn this off for local/self-signed test endpoints; leave it on for anything real.
- notification_text - the message that fills the
<notification_text>slot in your JSON template. - json_format - the actual body template, edit it to match your target service.
- timeout - how long (in seconds, default 3) the node waits for the endpoint to respond before giving up, so a dead or slow webhook target doesn't hang your workflow forever.
- mode - same
alwaysvson empty queuechoice as the rest of the pack:alwaysposts on every run,on empty queuewaits until the whole queue has drained before posting once.
Installing it. Through ComfyUI Manager (search "ComfyUI-Notifications"), or manually: cd ComfyUI/custom_nodes && git clone https://github.com/royceschultz/ComfyUI-Notifications, then restart. It's a plain HTTP POST under the hood, nothing exotic to install and no model weights involved.
Things to know before you rely on it. It fires when the node executes - which in practice means "the workflow reached this point," not "the workflow succeeded." There's no separate failure-notification path; a user asked about exactly this back in 2024 (wanting a ping on failed generations too, plus a way to tie the notification back to the specific run ID from an API-submitted job), and there's nothing in the node's inputs for either. If you're wiring this into real automation and need to know which run finished or whether it actually errored out, you'll need to handle that correlation yourself - timestamp matching, or a custom field in your own webhook receiver - rather than expecting the node to hand you an ID. The other easy mistake: forgetting to swap out the default localhost:5000 URL and wondering why nothing shows up anywhere, since that's pointed at nothing on a normal setup.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| any | * | — | |
| mode | COMBO | 2 options: always, on empty queue | |
| webhook_url | STRING | http://localhost:5000/ | — |
| verify_ssl | BOOLEAN | true | — |
| notification_text | STRING | Your notification has triggered. | — |
| json_format | STRING | {"text": "<notification_text>"} | — |
| timeout | FLOAT | 3.000–60 | — |
Outputs (0)
No outputs