HTTPS GET Notification
A Webhook at the End of Your Workflow
- trigger_image
- pass_through_image
- server_response
Your render has been cooking for forty minutes and you've been staring at the progress bar like it owes you money. This node is the "go do literally anything else" button: when the workflow finishes, it fires an HTTPS GET at whatever URL you give it. Point it at ntfy.sh for a push notification, a Discord webhook, a Home Assistant automation, or an IFTTT trigger, and that endpoint gets a polite "Done." It's a small job, but it's one most ComfyUI installs have no clean way to do.
The name is a little misleading. "HTTPS GET" sounds like it fetches something, but it never downloads anything. It doesn't call an image API, it needs no API key, and it doesn't ship your image anywhere. It just sends a GET and reports back what the server said.
How it works
Mechanically it's almost embarrassingly simple. It concatenates your base url with text_to_append, calls requests.get() on the result with a hard-coded 10-second timeout, and prints the outcome to the ComfyUI console (a little rocket emoji and a ✅ or ⚠️ line, in case you want to watch logs). Anything the server sends back - status code plus body - becomes the server_response output. If the server is down, the timeout means the node fails quietly instead of hanging your whole workflow: it catches the exception and hands you an Error: ... string to read.
The clever bit is how it gets itself scheduled last. ComfyUI runs nodes in dependency order, and a node sitting unconnected on the canvas fires whenever the queue starts - so the README's warning is real: wire nothing in and it requests immediately, long before your image exists. The fix is the optional trigger_image input. Feed it the IMAGE output of your final Save Image or KSampler, and the node can't run until that image exists. It then returns the image unchanged through pass_through_image, so you can still chain it onward - the node is invisible to your pixel data while using the wire purely as a "wait your turn" signal.
The inputs and outputs that matter
Only three inputs exist, and you'll set two of them:
- url - the base endpoint, e.g.
https://ntfy.sh/mytopic?message=. The defaulthttps://example.com/webhook?msg=is a placeholder; don't forget to replace it. - text_to_append - appended straight onto the URL, default
"Done". This is how you customize the message. - trigger_image - the optional IMAGE that forces execution order. This is the important one.
Outputs: pass_through_image (the same image you fed in) and server_response, a STRING with the status code and body. Wire that string into a text display node if you want the result on the canvas, or just read it from the console.
Installing it
ComfyUI Manager is the easy route - search "ComfyUI-Simple-HTTP". Or clone it yourself:
cd ComfyUI/custom_nodes
git clone https://github.com/nikmess/ComfyUI-Simple-HTTP
Then restart ComfyUI. That's it - there's no requirements.txt in the pack and no model to download. It uses the Python requests library, which ships with standard ComfyUI installs. If you're on the portable build and hit an import error, pip install requests fixes it.
One gotcha before you paste from the README: its clone command uses a placeholder your-username URL. Copy the real repo address above instead.
Where people get burned
The biggest trap is forgetting trigger_image. Drop the node on the canvas, connect nothing, hit Queue, and your webhook fires before the first batch is even scheduled. Connect the wire.
Second: caching. ComfyUI caches node results, and this node has no IS_CHANGED override. Re-queue the exact same generation - same seed, nothing touched - and the second run can skip the GET entirely because the engine sees identical inputs. Change the seed or any upstream input and it fires again. If your notification "stopped working," that's usually it.
Finally, remember it's a GET, not a POST. Your message rides in the URL, which means no request body, no auth headers, and - because GET URLs end up in server access logs - keep anything sensitive out of text_to_append. For a real webhook that wants JSON or a bearer token, you'd want a POST-capable node instead. This one is for the simple "tell someone it's done" case, and it does that one thing honestly.
One more thing to know: it's an outbound-network node, the same category that's been abused in this ecosystem before. This pack is a tiny, readable two-file repo that only GETs the URL you supply, so there's no credential to steal - but the rule still applies: glance at what a small node does before you install it, and don't point it at URLs you don't control.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| url | STRING | https://example.com/webhook?msg= | — |
| text_to_append | STRING | Done | — |
| trigger_imageopt | IMAGE | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| pass_through_image | IMAGE | — |
| server_response | STRING | — |