ComfyUI Node

Notify Me

A ping when the render finishes — to exactly one host

By chookg·Created about a month ago·Updated 29 days ago· 1
Notify Me
  • passthrough
  • passthrough
◄callback_url►
◄msg—►
◄id►

What it does, and what it won't do

Notify Me is an output node that posts a small JSON body - {"id": "...", "msg": "..."} - to an HTTPS endpoint when the nodes upstream of it finish. Then it hands your data back out untouched through a wildcard passthrough. If you've ever started a 20-minute video render and gone to make coffee, this is the "tell me when it's done" slot in the graph.

The community's version of that need is real but small - Telegram bots and Discord webhooks, with the discussion usually about the receiver rather than the node. What makes this one unusual is the security posture: it talks to one host and only one, notify.bro3.net, hardcoded in an allowlist no widget or imported workflow can extend. Subdomains, IP literals, HTTP, private DNS - all rejected before a request goes out.

So be clear-eyed about the shape of it. This is not a general notifier: the allowed host is the author's own review receiver, described in the README as a temporary test service where sessions expire after an hour. If what you want is a ping on your phone, this pack isn't the tool - a Telegram or Discord-webhook node is. Want a different host? That's a domain-request issue or a PR with ownership evidence, and repo acceptance doesn't mean ComfyUI-Manager or cloud approval. For anything carrying private text, have that conversation first.

One lens for any node that reaches the network: custom nodes run as unsandboxed Python, and this ecosystem has been burned before by one that phoned home with stolen credentials. A node whose whole job is an outbound POST is where you read the source instead of trusting a README. Here the source is reassuring - strict allowlist, pinned DNS, TLS verification, no redirects - but that's a property of this commit, not a promise about node packs.

How it behaves in the graph

Ordering is the useful part: the notification fires after the connected upstream nodes finish, so you connect the output of whatever you actually care about - an image batch, a video's final save - into msg or passthrough and let the graph tell you when it got there.

Two details matter in practice. The node overrides IS_CHANGED to return NaN - the ComfyUI idiom meaning "not equal to anything, even another NaN" - which forces it to run on every queued run even when the upstream text is cached. Queue the same workflow twice, get two notifications, by design. Connect and read timeouts are 15 seconds each, no retries, no redirects, so a slow receiver means a failed run rather than a late ping.

The policy is enforced end to end: HTTPS only, no credentials in the URL, hostname normalized and matched exactly against the allowlist, DNS resolved once with every address required to be public, then that address pinned for the request with TLS verification on. Loopback is genuinely impossible - the old allow_localhost switch is gone and injecting it into an API prompt does nothing.

The inputs that matter

  • callback_url - required, and blank is an immediate error. The tooltip is the author's: HTTPS on notify.bro3.net; HTTP, other hosts, subdomains and IPs are rejected.
  • id - a text box on the node, sent unchanged. Leave it blank and an empty string goes out.
  • msg - a socket, not a widget. Wire a text node into it. Unconnected, it sends an empty string and establishes no ordering at all, which is the mistake to avoid.
  • passthrough - accepts any type, and after a successful callback the same object comes back out of the passthrough output. It is not sent as an attachment; it stays inside the workflow.

Wire msg from the text whose completion should precede the ping, and hang passthrough off a downstream branch so the node sits mid-graph instead of at a dead end.

Installing it

Same pack, same steps:

cd ComfyUI/custom_nodes
git clone https://github.com/chookg/ComfyUI-ChickTools.git
cd ComfyUI-ChickTools
python -m pip install -r requirements.txt

Restart ComfyUI and search Notify Me. This is the pack's only node with a network dependency, so requests and urllib3 are the ones that matter. Coming from 0.5.x, recreate the node or import a fresh example - removing the allow_localhost widget shifted saved widget order, so re-enter the callback URL and task ID.

Testing it without guessing

The author runs a public receiver you can point at to prove the path works: create a session, copy the session URL into callback_url, run, then check results. Only HTTP 200 is accepted. You can also hit it directly:

curl https://notify.bro3.net/callback/SESSION_TOKEN \
  -H 'Content-Type: application/json' \
  --data '{"id":"review-001","msg":"Hello from NotifyMe"}'

A JSON body back with "ok": true means the receiver is fine, so a failure inside ComfyUI is yours. The pack also bundles a local receiver for offline work, but the node will never talk to it - loopback is rejected no matter what the receiver claims. When something breaks you get a generic error naming the HTTP status or the exception type, with the URL scrubbed out because callback URLs can carry private tokens.

CategoryChickTools/Network

Inputs (4)

NameTypeDefaultDescription
callback_urlSTRINGHTTPS receiver on notify.bro3.net. HTTP, other hosts, subdomains and IP addresses are rejected.
msgoptSTRING—
passthroughopt*—
idoptSTRINGTask identifier sent unchanged with msg. Leave blank to send an empty string.

Outputs (1)

NameTypeDescription
passthrough*—