GeneralNotifier
Ping your phone when the queue finishes — send ComfyUI outputs to Telegram and Discord
- image
- audio
- Result URL
You've been there: a 40-step workflow churning for twenty minutes, and the only way to know it's done is to stare at the progress bar. GeneralNotifier (class GentlemanHu_Notifier) is the "leave and go make tea" node - it fires your finished file off to Telegram, a Discord webhook, or an Alist-based photo album the moment the queue reaches it. It's pure plumbing in the best sense: it touches no pixels, but it's the difference between babysitting a render and doing literally anything else.
The name is a lie in a good way. It doesn't call any cloud API and needs no key of its own - the "notifier" just means it uses your existing Telegram bot and Discord webhooks to send things.
What it actually does
It's an output node, so it belongs at the end of a graph, after your Save Image / Save Video node. Feed it a file path or a tensor and it wraps the payload - with your message text - and ships it to whichever channels you've enabled. The README frames it honestly: "send files/messages to various channels." That's the whole job.
Under the hood it's a singleton NotificationManager that reads your .env, registers whatever channels you configured, and - key detail - adds a boolean toggle input to the node for each channel. Configure Telegram and Discord, restart, and you get TelegramNotifier and DiscordNotifier checkboxes on the node. No channel configured, no toggle, and the node returns a terse no-notifier-selected summary instead of sending anything.
Delivery is async by default: it spawns a daemon thread so the send doesn't stall your queue. It auto-splits long messages into multiple replies, and it materializes IMAGE and AUDIO tensors into temp files (under ComfyUI's temp dir) so you don't have to pre-save them yourself - though if you've got a file_path or video path handy, that's the most reliable route.
The inputs that matter
Ignore most of the two dozen optional knobs on first run. These are the ones you'll actually touch:
message(required) - the text that rides along with the file. Leave empty and you just get the file.file_path(required, but can be blank) - a path to a file on disk, e.g.%time%-stamped output paths from your save node. One offile_path,image,audio, orvideomust resolve, or the node raises.execution_mode-async(default, non-blocking) vssync(waits for delivery, handy when you need to know it actually sent).retry_attempts/retry_delay_seconds/retry_backoff_factor- for when Discord rate-limits you mid-burst. Defaults are zero retries, so if sends are flaky, bumpretry_attemptsto 2–3.audio_format/audio_quality/video_format- pick mp3 vs flac, bitrate, codec.autois fine.
The single output, Result URL, is a string - but don't trust the name. Per the README it's not implemented yet; in practice it returns a delivery summary like payload=...; category=image; TelegramNotifier:queued[...]. Useful for debugging, not for clicking.
Installing it
ComfyUI Manager: search "ComfyUI-Notifier" (it's published to the Comfy registry) and install. Manual route:
cd ComfyUI/custom_nodes
git clone https://github.com/GentlemanHu/ComfyUI-Notifier
cd ComfyUI-Notifier
pip install -r requirements.txt # Manager does this for you
Then restart ComfyUI. It's lightweight - python-telegram-bot, discord-webhook, requests_toolbelt, python-dotenv. No models, no weights.
Where people get burned
- The
.envgoes inside the plugin folder, not your ComfyUI root:ComfyUI/custom_nodes/ComfyUI-Notifier/.env. The code is explicit about this, and it's the #1 cause of "nothing happened." Config lives in that file:TELEGRAM_BOT_TOKEN,TELEGRAM_CHAT_ID,DISCORD_WEBHOOK_URL, plusYIKE_BASE_URL/YIKE_TOKENfor Alist. - Restart after editing
.env- channels are registered once at load. - Hard size ceilings: Telegram files cap at 50MB, Discord rate-limits easily (the node's
discord_max_attachment_mbdefault of 20 will hit free-tier attachment limits on unboosted servers), and the yike/Alist album only takes images and videos under 100MB. - It wants a recent ComfyUI - the source imports internals of the bundled
comfy_apipackage, so an old install can fail at import. If the node shows red immediately, update ComfyUI first.
The README is half-Chinese, the pack is small, and the "Result URL" is a stub - but for the specific job of "tell my phone the render is done," it's the one you'd reach for.
Inputs (19)
| Name | Type | Default | Description |
|---|---|---|---|
| file_path | STRING | — | |
| message | STRING | — | |
| imageopt | IMAGE | — | |
| audioopt | AUDIO | — | |
| videoopt | STRING | — | |
| filenameopt | STRING | — | |
| media_typeopt | COMBO | auto | 6 options: auto, path, image, audio, video, binary |
| delivery_modeopt | COMBO | auto | 4 options: auto, media, file, zip |
| execution_modeopt | COMBO | async | 2 options: async, sync |
| parallel_dispatchopt | BOOLEAN | true | — |
| retry_attemptsopt | INT | 00–10 | — |
| retry_delay_secondsopt | FLOAT | 1.50–30 | — |
| retry_backoff_factoropt | FLOAT | 2.01–10 | — |
| discord_max_attachment_mbopt | FLOAT | 200–500 | — |
| send_as_fileopt | BOOLEAN | false | — |
| send_as_zipopt | BOOLEAN | false | — |
| audio_formatopt | COMBO | auto | 5 options: auto, flac, mp3, wav, opus |
| audio_qualityopt | COMBO | auto | 5 options: auto, 128k, 192k, 256k, 320k |
| video_formatopt | COMBO | auto | 4 options: auto, h264, h265, vp9 |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| Result URL | STRING | — |