Send Video to Slack
Encode and post your video to Slack in one node — FFmpeg included
- images
- audio
Sharing video out of ComfyUI is two annoying jobs: encoding a frame batch into something that plays, and getting that file somewhere someone else can watch it. Send Video to Slack collapses both into one output node. Feed it the frame batch at the end of your video pipeline, pick a format and a frame rate, and it pipes the frames through the bundled FFmpeg into an MP4 (or WebM, or GIF) and uploads the result to your channel. "Bundled" is doing real work there - the pack pulls in imageio-ffmpeg, which ships a static FFmpeg binary, so you don't need a separate system FFmpeg install.
How it works
The node is a sibling of Send Image to Slack with an encode step bolted on. It takes an IMAGE frame batch (B, H, W, C), pads frames to even dimensions automatically (most codecs refuse odd sizes, and this removes a whole class of "why did the encode die" errors), runs them through FFmpeg at your chosen frame_rate, and uploads the resulting file. If you feed the optional audio input an AUDIO tensor, it muxes the sound in - handy when your video pipeline also produces a soundtrack, and impossible for GIF, which has no audio track.
The settings that matter
format-h264-mp4,h265-mp4,vp9-webm, orgif. h264-MP4 is the one that just works everywhere, and it's what I'd leave it on. h265-MP4 gets you smaller files at similar quality but some players choke; vp9-WebM is great for low bitrates but Slack's playback is more predictable with MP4. GIF is the fallback for "must play literally anywhere," at the cost of file size.frame_rate- 1–120 fps, default 24. Set it to whatever your sampler's frames were generated for; too high just makes the upload bigger.quality- 0–100 (default 81), mapped to an FFmpeg CRF. 100 = best quality/biggest file, 0 = smallest. Ignored for GIF.
channel, filename_prefix, save_output/save_location/output_folder, and the optional title/message/thread_ts/user_id all behave exactly like the image node: names resolve automatically, DMs work with @user, and saving a local copy is additive and happens before upload.
Install
Same pack, same steps as the rest of ComfyUI-Slack - ComfyUI Manager (search "ComfyUI-Slack") or:
cd ComfyUI/custom_nodes
git clone https://github.com/claussteinmassl/ComfyUI-Slack
pip install -r requirements.txt
No models to download. The only setup that takes real minutes is the Slack app: create it from the README's manifest, install it, set SLACK_BOT_TOKEN in the environment that launches ComfyUI, and /invite @ComfyUI to the channel. That token is read from the environment, never typed into the node.
Troubleshooting
The one failure mode you're likely to hit is FFmpeg encoding failed - the README points at an empty frame batch or a codec your FFmpeg build doesn't support, which is rare since the binary is bundled. A frame batch with an odd dimension used to be the silent killer here; the even-padding handles it for you. And the usual Slack gotchas apply: not_in_channel means you skipped the invite, and a private channel won't resolve until the bot is a member.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| channel | STRING | Channel or user: #general, @alice, or a raw ID. A user (@name or U…) is sent as a direct message. Names resolve automatically; the bot must be a member of private channels. | |
| filename_prefix | STRING | ComfyUI | — |
| save_output | BOOLEAN | false | Also write the video to disk in addition to sending it to Slack. |
| save_location | COMBO | Where the saved copy is written. 'ComfyUI output folder' uses ComfyUI's output directory with an auto-incrementing counter; 'Absolute path' writes into the folder set below. | |
| output_folder | STRING | Base folder for the saved copy. Used only when save_location is 'Absolute path'; combined with filename_prefix. | |
| frame_rate | FLOAT | 24.01–120 | — |
| format | COMBO | 4 options: h264-mp4, h265-mp4, vp9-webm, gif | |
| quality | INT | 810–100 | — |
| audioopt | AUDIO | — | |
| titleopt | STRING | — | |
| messageopt | STRING | — | |
| thread_tsopt | STRING | Slack thread to reply under. Connect a Slack Thread Start node here to post into the same thread as other send nodes. Leave unconnected to post to the channel root. Also auto-filled by the Slack listener. | |
| user_idopt | STRING | Slack user ID to @-mention in the result message. Auto-filled by the Slack listener. |
Outputs (0)
No outputs