Nodes/ComfyUI-DiscordSend/Discord Send & Save Video 🎬
ComfyUI Node

Discord Send & Save Video 🎬

Turn your ComfyUI frame sequence into a video and drop it in Discord

By AEmotionStudioΒ·Created about a year agoΒ·Updated 4 months agoΒ· 13
Discord Send & Save Video 🎬
  • images
  • audio
  • video_path
β—„filename_prefixComfyUI-Videoβ–Ί
β—„overwrite_lastfalseβ–Ί
β—„formatvideo/h264-mp4β–Ί
β—„frame_rate8.0β–Ί
β—„quality85β–Ί
β—„loop_count0β–Ί
β—„losslessfalseβ–Ί
β—„pingpongfalseβ–Ί
β—„save_outputtrueβ–Ί
β—„include_video_infotrueβ–Ί
β—„add_datetrueβ–Ί
β—„add_timetrueβ–Ί
β—„add_dimensionsfalseβ–Ί
β—„send_to_discordfalseβ–Ί
β—„webhook_urlβ–Ί
β—„discord_messageβ–Ί
β—„include_prompts_in_messagefalseβ–Ί
β—„send_workflow_jsonfalseβ–Ί
β—„save_cdn_urlsfalseβ–Ί
β—„github_cdn_updatefalseβ–Ί
β—„github_repoβ–Ί
β—„github_tokenβ–Ί
β—„github_file_pathcdn_urls.mdβ–Ί

So you've got a Wan, Hunyuan, AnimateDiff, or LTX clip sitting in ComfyUI as a stack of frames. Now what? The stock ComfyUI answer is a Video Combine node and a trip to find the file. DiscordSendSaveVideo is that encoder plus a Discord uploader: feed it the IMAGE sequence, and it writes a real video file and posts it to a channel of your choosing. It's from the same pack as DiscordSendSaveImage, so the setup is identical - one webhook URL and you're done.

It's also a surprisingly decent general-purpose encoder on its own. You get GIF, animated WebP, H.264/H.265 MP4, VP9 WebM, even ProRes, plus a ping-pong loop toggle and optional audio muxing. If you already reach for VideoHelperSuite (VHS) for encoding, think of this as "VHS VideoCombine, with a Discord button."

How it works

The node pipes raw RGB frames straight into ffmpeg via stdin and encodes in your chosen format - no temp files, no intermediate PNG dump. Two things set it apart from a plain encoder:

  1. It saves the first frame as a PNG with the full workflow metadata embedded, so you keep the "drag the image back to reproduce" behavior ComfyUI culture expects even when the actual deliverable is video.
  2. Before sending, it re-encodes a Discord-optimized copy and validates it. That's not paranoia. Discord reprocesses every upload - it caps resolution around 1080p, throttles bitrate based on server boost level, and if it doesn't like your container or pixel format, the video plays as a single frozen frame.

ffmpeg is the one real dependency. The node finds it via imageio-ffmpeg or your system PATH; if neither exists, it degrades gracefully to PIL and only GIF/WebP output is offered.

The inputs that matter

Required: images (the frame sequence), filename_prefix, overwrite_last.

  • format - the one that decides everything. The default video/h264-mp4 is the Discord-safe pick and the right call for almost everyone. image/gif and image/webp are for animations. video/prores is a local-only vanity format (no audio to Discord, needs QuickTime on Windows) - skip it unless you're cutting a master.
  • frame_rate - 0.1 to 120. Below 1 it becomes a slideshow, e.g. 0.5 = 2 seconds per frame. Great for turning a 5-frame idea into a "photo" story.
  • pingpong - plays forward then backward. One checkbox that makes a short clip feel twice as long; perfect for looping emotes.
  • loop_count - 0 = infinite, only affects GIF.
  • audio - an AUDIO input to mux in (AAC for MP4, Opus for WebM). Feed it from whatever audio node your workflow already has.
  • add_time - this one has a CRITICAL warning in the tooltip for a reason: keep it on for Discord uploads. Disabling it is what triggers the single-frame playback bug. If you want cleaner filenames, turn off include_video_info instead - the README says so in all caps for a reason.

The output is video_path - a STRING path to the saved file, which you can route into other nodes if you need to do something with the video after encoding.

Install

Same pack as the image node - Manager search for "ComfyUI-DiscordSend", or:

cd /path/to/ComfyUI/custom_nodes
git clone https://github.com/AEmotionStudio/ComfyUI-DiscordSend
cd ComfyUI-DiscordSend
pip install -r requirements-nodes.txt

No model files. The only system-level thing is ffmpeg; install it however your OS likes and restart ComfyUI.

Where people get burned

  • "My video is a single frame on Discord" - the classic. Fix: add_time on, or switch to h264-mp4 with yuv420p (the node forces that pixel format for exactly this reason), and drop quality a bit.
  • "ffmpeg not found" - the format list silently shrinks to GIF only. Install system ffmpeg and restart.
  • Don't chase quality past a point. You can encode a beautiful 4K ProRes, but Discord will re-compress it on arrival anyway. That's Discord's behavior, not a node bug - encode for delivery, not for the file you think you're uploading.
  • Webhook errors usually mean a bad URL or the webhook was deleted; re-copy it from Server Settings β†’ Integrations β†’ Webhooks.
Categoryvideo/output

Inputs (25)

NameTypeDefaultDescription
imagesIMAGEThe image sequence to save as video and/or send to Discord.
filename_prefixSTRINGComfyUI-VideoThe prefix for the saved files.
overwrite_lastBOOLEANfalse⚠️ CAUTION: If enabled, new saves will REPLACE the previous file with the same name. Useful for iterative testing, dangerous for batch production. Note: Disabling 'add_time' to overwrite files will cause single-frame playback issues on Discord.
formatoptCOMBOvideo/h264-mp4The video format to save in. Options include: # Image formats: - image/gif: Standard GIF format (NO AUDIO support) - image/webp: WebP format (better quality than GIF, NO AUDIO support) - video/gif: Video format GIF (higher frame rate support, NO AUDIO support) # Standard video formats: - video/mp4: Standard MP4 format with good compatibility (supports audio) - video/h264-mp4: High-quality MP4 with H264 codec (supports audio) - video/h265-mp4: MP4 with H265/HEVC codec (better compression, supports audio) - video/webm: Standard WebM format (supports audio) - video/vp9-webm: WebM with VP9 codec (higher quality, supports audio) # Professional formats: - video/prores: Apple ProRes (professional quality, supports audio when saving locally but NO AUDIO when sending to Discord, requires QuickTime or specialized player to view on Windows)
frame_rateoptFLOAT8.00.1–120Frames per second for the output video. Values below 1 will make each image stay on screen longer (e.g., 0.5 = 2 seconds per frame).
qualityoptINT851–100Quality setting for video compression (1-100). Higher is better quality but larger file size.
loop_countoptINT00–100Number of times to loop the video (0 = infinite loop, only applies to GIF format).
losslessoptBOOLEANfalseIf enabled, will use lossless compression for supported formats. This option may be ignored for formats that don't support lossless encoding.
pingpongoptBOOLEANfalseIf enabled, video will play forward then backward (ping-pong effect).
save_outputoptBOOLEANtrueWhether to save videos to disk. When disabled, videos will only be previewed in the UI.
audiooptAUDIOOptional audio to embed in the video.
include_video_infooptBOOLEANtrueWhether to include the video information (frame rate, format) in the Discord message. πŸ’‘ TIP: Disable this instead of 'add_time' if you want cleaner filenames but need to avoid the Discord single-frame bug.
add_dateoptBOOLEANtrueAdd date (YYYY-MM-DD) to the filename.
add_timeoptBOOLEANtrueAdd time (HH-MM-SS) to the filename. ⚠️ CRITICAL: Keep enabled for Discord videos to prevent single-frame playback issues!
add_dimensionsoptBOOLEANfalseAdd dimensions (WxH) to the filename.
send_to_discordoptBOOLEANfalseIf enabled, will send the media to Discord via webhook.
webhook_urloptSTRINGDiscord webhook URL. Get this from Discord server settings > Integrations > Webhooks.
discord_messageoptSTRINGMessage to include with the media when sending to Discord.
include_prompts_in_messageoptBOOLEANfalseIf enabled, will include the generation prompts in the Discord message.
send_workflow_jsonoptBOOLEANfalseIf enabled, will send the workflow JSON alongside the media.
save_cdn_urlsoptBOOLEANfalseIf enabled, will extract and save Discord CDN URLs.
github_cdn_updateoptBOOLEANfalseIf enabled, will update a GitHub repository with the CDN URLs.
github_repooptSTRINGGitHub repository in format 'username/repo'.
github_tokenoptSTRINGGitHub Personal Access Token (PAT). Generate at: Settings > Developer settings > Tokens. ⚠️ Requires 'repo' scope (or 'public_repo') to upload files.
github_file_pathoptSTRINGcdn_urls.mdPath to the file in the GitHub repository to update.

Outputs (1)

NameTypeDescription
video_pathSTRINGβ€”