Post to Discord
Post to Discord From Inside ComfyUI — No Bot, No API Key, Just a Webhook
- VHS
- IMAGE
The name is a lie, and it's the best part: Post to Discord doesn't need a Discord bot, a token, or any kind of API key. Give it a channel webhook URL plus an image (or a video path, or a plain file), and when the workflow finishes it fires the thing into your channel. It's an output node from the Cozy Communication pack, written by Amorano - the same person behind Jovimetrix - and it exists so you can stop babysitting the machine.
Why you'd reach for it: you kicked off a long upscale or a video pass, you're in another room, and you want the result waiting in Discord when it's done. Or you run a render box headless and want the day's output to land in a channel for people to see. It's one node at the end of the graph, and there's nothing to wire after it.
How it works
It's a plain HTTP POST. The node takes your webhook URL and hands it to the discord-webhook library, which attaches the payload and calls execute(). Images are converted to PNG in memory (via OpenCV) and uploaded as attachments; a batch of images posts all of them in a single message. It returns no outputs and is flagged as an output node, so ComfyUI treats it as a terminal - stick it at the end and run.
The one thing to actually understand is the input priority, because the README is shouting it: VHS, then IMAGE, then FILE - it sends the first input that has data. If a Video Helper Suite output is connected and carrying a path, that wins, and whatever you also fed into IMAGE is silently ignored.
The inputs that matter
- URL - the webhook URL for your Discord channel (
https://discord.com/api/webhooks/...). It's the only real requirement, and there's no validation: an empty or wrong URL just means nothing posts. - VHS (
VHS_FILENAMES) - plug in the output of a Video Helper Suite node to post a rendered video or file path instead of a tensor. - IMAGE - a single image or a batch. This is the one you'll use 90% of the time.
- FILE - a filesystem path as a string, for sending any file directly.
Installing it
The easy way is ComfyUI Manager: search "Cozy Communication" and install. Or the manual route:
cd ComfyUI/custom_nodes
git clone https://github.com/cozy-comfyui/cozy_comm
Then restart ComfyUI. It pulls in discord-webhook, loguru, requests, and opencv-contrib-python - that last one is the big OpenCV wheel, so the first install can take a while. One gotcha: the package declares Python 3.11+, so if your ComfyUI install runs Python 3.10, this won't install cleanly.
Where people get burned
- Rate limits. The README links Discord's own throttle docs, and for good reason. Every image in a batch is an attachment on a single message, and Discord caps messages at 10 attachments and webhooks at roughly 30 requests a minute. A big batch can get you 429'd into dropped posts.
- Stale VHS data. Because VHS wins the priority, an old connected video output quietly overrides your IMAGE. If a post shows the wrong thing, disconnect the VHS input.
- Your webhook is a credential. Anyone holding the URL can post to your channel - Discord treats it as a secret for a reason. Keep it out of workflows you share publicly, and remember that once it's baked into a workflow JSON, it's in the file.
- No error visibility. The node doesn't inspect the HTTP response, so failures are silent. If a post goes missing, check ComfyUI's console log rather than the node.
If you just want a "done + image" notification in your own server channel, this is the simplest thing I've found that does it with zero accounts and zero tokens.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| VHSopt | VHS_FILENAMES | — | |
| IMAGEopt | IMAGE | — | |
| FILEopt | STRING | — | |
| URLopt | STRING | — |
Outputs (0)
No outputs