Nodes/ComfyUI-Notifier/GeneralNotifier
ComfyUI Node

GeneralNotifier

Ping your phone when the queue finishes — send ComfyUI outputs to Telegram and Discord

By GentlemanHu·Created 3 years ago·Updated 4 months ago· 4
GeneralNotifier
  • image
  • audio
  • Result URL
file_path
message
video
filename
media_typeauto
delivery_modeauto
execution_modeasync
parallel_dispatchtrue
retry_attempts0
retry_delay_seconds1.5
retry_backoff_factor2.0
discord_max_attachment_mb20
send_as_filefalse
send_as_zipfalse
audio_formatauto
audio_qualityauto
video_formatauto

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 of file_path, image, audio, or video must resolve, or the node raises.
  • execution_mode - async (default, non-blocking) vs sync (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, bump retry_attempts to 2–3.
  • audio_format / audio_quality / video_format - pick mp3 vs flac, bitrate, codec. auto is 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 .env goes 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, plus YIKE_BASE_URL / YIKE_TOKEN for 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_mb default 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_api package, 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.

CategoryGentlemanHu_Notifier

Inputs (19)

NameTypeDefaultDescription
file_pathSTRING
messageSTRING
imageoptIMAGE
audiooptAUDIO
videooptSTRING
filenameoptSTRING
media_typeoptCOMBOauto6 options: auto, path, image, audio, video, binary
delivery_modeoptCOMBOauto4 options: auto, media, file, zip
execution_modeoptCOMBOasync2 options: async, sync
parallel_dispatchoptBOOLEANtrue
retry_attemptsoptINT00–10
retry_delay_secondsoptFLOAT1.50–30
retry_backoff_factoroptFLOAT2.01–10
discord_max_attachment_mboptFLOAT200–500
send_as_fileoptBOOLEANfalse
send_as_zipoptBOOLEANfalse
audio_formatoptCOMBOauto5 options: auto, flac, mp3, wav, opus
audio_qualityoptCOMBOauto5 options: auto, 128k, 192k, 256k, 320k
video_formatoptCOMBOauto4 options: auto, h264, h265, vp9

Outputs (1)

NameTypeDescription
Result URLSTRING