Nodes/ComfyUI YouTube Uploader/🎬 YouTube Uploader
ComfyUI Node

🎬 YouTube Uploader

Sending ComfyUI video straight to YouTube β€” kill switch included

By flamacoreΒ·Created about a year agoΒ·Updated about a year agoΒ· 6
🎬 YouTube Uploader
  • video
  • audio
  • thumbnail
  • video_id
  • upload_url
  • success
β—„titleMy Awesome Short #1β–Ί
β—„descriptionCheck out this amazing video! πŸ”₯ #Shorts #YouTube #ComfyUI #AIβ–Ί
β—„tagsshorts,youtube,ai,comfyui,viralβ–Ί
β—„privacyprivateβ–Ί
β—„fps30β–Ί
β—„upload_enabledfalseβ–Ί

This is the node the whole pack exists for. You generate frames in ComfyUI, they end up as an image batch, and 🎬 YouTube Uploader turns that batch into an mp4 and pushes it to YouTube - title, description, tags, privacy level, even a custom thumbnail. It's the very end of the pipeline, the node you hang off whatever produced your frames (a video sampler, an AnimateDiff pass, an image sequence, anything that hands you IMAGE tensors). The one it's clearly aimed at: automated Shorts.

The mechanism is refreshingly mechanical. It takes your IMAGE batch, encodes it to a temp mp4 with OpenCV (mp4v codec), optionally muxes in an audio track with ffmpeg, then uploads via YouTube's resumable upload API with categoryId 22 - that's "People & Blogs," which the author hardcoded in, no way around it. It uses OAuth from the Auth node's token.pickle, not an API key. Tags get split on commas, so type them as shorts,ai,comfyui,viral, not as a list.

The inputs that matter:

  • video - your IMAGE batch. Feed it a single image and the node helpfully loops it into a 3-second clip; feed it frames and fps (1–60, default 30) decides playback speed.
  • title, description (multiline), tags - all plain strings.
  • privacy - private / unlisted / public. It defaults to private, which is the correct default. Keep it there while you test.
  • upload_enabled - the kill switch. It defaults to false, and the node will not upload a single byte until you flip it. This is the pack's one genuinely good safety habit: nothing goes live by accident.
  • Optional audio (AUDIO tensor) and thumbnail (IMAGE) - both covered below.

Outputs are video_id, upload_url (something like https://www.youtube.com/watch?v=XXXX), and a success boolean. Wire the first two into a Show Text node if you want to click through to the result.

The known rough edges

Audio is the pack's weak spot, and it's a real, community-reported one: someone following the author's own example spent hours with videos uploading silent even when the audio was pre-muxed. The code's audio path is the reason - it writes your audio tensor to a WAV via scipy, then shells out to ffmpeg on the command line. If ffmpeg isn't on your PATH, or the AUDIO tensor isn't in the exact shape it expects, the whole step fails silently and your upload just has no sound. The pip package ffmpeg-python in the requirements does not install the ffmpeg binary - you need a real one on your system. Treat the audio input as best-effort and check the upload's sound before trusting it.

The thumbnail input is also a step behind the rest: it sets the thumbnail through the thumbnails API after upload, which needs extra OAuth scope, and it's the sort of thing that quietly errors in the console while the video uploads fine.

Two more things the author flagged himself: unverified YouTube accounts hit upload limits, so "limit reached" errors are often just your account, not the node; and always test with private uploads first. If the pack's dependencies are missing the node won't crash your graph - it returns success: false with a "Dependencies not installed" message instead.

Installing

Install the whole pack once - both nodes come together. In ComfyUI Manager, search "YouTube Uploader"; or:

cd ComfyUI/custom_nodes
git clone https://github.com/flamacore/ComfyUI-YouTubeUploader
cd ComfyUI-YouTubeUploader
pip install -r requirements.txt

Restart ComfyUI. No model files, nothing heavy - just Google's API libraries plus OpenCV, scipy and Pillow. Set up OAuth once via the Auth node, and you're done.

Reasonable expectations: this is a "built for myself, tested with a few people" node, AI-assisted and still under active development. For a private or unlisted auto-upload pipeline it works and it's genuinely handy. For anything you'd stake a channel on, verify the audio and thumbnails on a throwaway upload before you go to production.

CategoryYouTube/Upload

Inputs (9)

NameTypeDefaultDescription
videoIMAGEβ€”
titleSTRINGMy Awesome Short #1β€”
descriptionSTRINGCheck out this amazing video! πŸ”₯ #Shorts #YouTube #ComfyUI #AIβ€”
tagsSTRINGshorts,youtube,ai,comfyui,viralβ€”
privacyCOMBOprivate3 options: private, unlisted, public
fpsINT301–60β€”
upload_enabledBOOLEANfalseβ€”
audiooptAUDIOβ€”
thumbnailoptIMAGEβ€”

Outputs (3)

NameTypeDescription
video_idSTRINGβ€”
upload_urlSTRINGβ€”
successBOOLEANβ€”