ComfyUI Node

Vidia Video Saver

This Video Saver Talks to Cloudflare and Calls Home — and That's the Point

By Vidia-Tools·Created 2 months ago·Updated 2 months ago· 0
Vidia Video Saver
  • images
  • audio
  • append_watermark
  • watermark_audio
  • corner_watermark
  • corner_watermark_mask
  • Filenames
frame_rate8
filename_prefixVidia
format
save_outputtrue
corner_opacity0.4
append_watermark_source_fps0

Let's be straight about what this node is, because the name undersells it and the packaging oversells it. VidiaVideoSaver is the export tail of Vidia Open Studio, a hosted video-generation platform. It's not a community utility that happens to be on GitHub - it's the node the platform's GPU workers use to turn generated frames into a finished, watermarked, uploaded video. If you're not running the Vidia stack, you can still use it, but you should know what you're picking up first.

Plenty of people will never need it. For the ordinary ComfyUI hobbyist turning out clips, the VideoHelperSuite (VHS) save nodes are the general-purpose workhorse and you can stop reading here. VidiaVideoSaver earns its keep when your "workflow" is really a production pipeline: frames in, watermarked MP4 out, sitting in Cloudflare R2 with a callback telling a backend "video ready."

How it works

The pipeline is well-factored and easy to follow in nodes.py: it validates and preprocesses your input frames, pads anything that isn't dimension-aligned, applies watermarks, pipes raw frames into ffmpeg as a rawvideo stream, muxes audio, then uploads and notifies. Two touches are worth calling out.

First, it saves the first frame as a PNG with your whole workflow embedded (prompt JSON, extra_pnginfo) before encoding - a little insurance copy that carries the generation metadata. Second, the node is marked not_idempotent. That's the ComfyUI output-node trick where side-effecting nodes refuse the execution cache so they always re-run - uploads and callbacks fire every time, even when nothing upstream changed. If you've ever had a "load once" node silently skip, this is the opposite footgun, deliberately.

The inputs that matter

  • images - your frames, straight off a sampler or a VHS/AnimateDiff video output.
  • format - the one you'll actually fiddle with. It's image/gif, image/webp, plus video/* presets read from video_formats/. The shipped h264-mp4 preset is libx264, CRF 23, yuv420p, aac 192k audio - solid defaults. The format string must be <type>/<ext>, or validation rejects it.
  • frame_rate (default 8) - keep it sane; low-res clips at 24fps look choppy rather than cinematic.
  • save_output - leave true. Set it false and the file goes to ComfyUI's temp directory, not your output folder.
  • corner_watermark + corner_watermark_mask - this is the trap: you must feed both an image and a mask, or the corner watermark is silently skipped. corner_opacity (default 0.4) controls the blend.
  • append_watermark - a short clip tacked onto the end as an outro card. append_watermark_source_fps resamples it to your frame_rate when they differ (0 = assume they match).
  • audio / watermark_audio - lazy AUDIO inputs; the node tells ComfyUI to only compute them if you actually connect them.

The single output is a VIDIA_FILENAMES tuple (save_output, [file_paths]) - check the ui response for the R2 upload result.

Installing it

ComfyUI Manager (search Vidia-Open-Studio-Nodes), or the manual way:

cd ComfyUI/custom_nodes
git clone https://github.com/Vidia-Tools/Vidia-Open-Studio-Nodes
cd Vidia-Open-Studio-Nodes
pip install -r requirements.txt   # boto3, python-dotenv, requests

Restart ComfyUI. Two real requirements the README is upfront about: you need ffmpeg on PATH, and - the bigger bar - ComfyUI >= v0.24 with the V3 node API (comfy_api.latest). This is a Nodes-2.0-era extension, so an older ComfyUI install won't load it at all. There are no model files to download, which is refreshing.

Configuration and gotchas

Everything is environment-based. Copy .env.example to .env inside the node folder and fill it in:

VIDIA_BACKEND_URL=...            # backend for the videoReady callback
RUNPOD_CALLBACK_SECRET=...       # shared secret for that callback
S3_PUBLIC_URL_PREFIX=...         # public R2 bucket URL
S3_ENDPOINT_URL=... S3_ACCESS_KEY_ID=... S3_SECRET_ACCESS_KEY=...
S3_BUCKET_NAME=... S3_REGION_NAME=auto

Missing creds don't brick the node - it saves locally and logs an error instead ("Upload failed but video saved locally" shows up in the UI). The genuinely useful failure to know: if python-dotenv isn't installed, the .env is never read and all your credentials silently come from nowhere. And a little aside for platform operators: the Codeberg mirror is what GPU workers clone at boot, so if you patch this, remember the mirror is read-only and separate from your fork.

Verdict: inside Vidia Open Studio, this is exactly the right tool - watermarking, R2, and the backend callback are the whole game. Outside it, it's a competent but opinionated saver that demands a bleeding-edge ComfyUI for features you can get from VHS. It'll do the job; just make sure it's the job you actually have.

CategoryVidia

Inputs (12)

NameTypeDefaultDescription
imagesIMAGE
frame_rateFLOAT8
filename_prefixSTRINGVidia
formatCOMBO3 options: image/gif, image/webp, video/h264-mp4
save_outputBOOLEANtrue
corner_opacityFLOAT0.40–1
append_watermark_source_fpsFLOAT00–120
audiooptAUDIO
append_watermarkoptIMAGE
watermark_audiooptAUDIO
corner_watermarkoptIMAGE
corner_watermark_maskoptMASK

Outputs (1)

NameTypeDescription
FilenamesVIDIA_FILENAMES