Nodes/DemonAlone-JS_Addon-ComfyUI/Video Maker V2 [BETA]
ComfyUI Node

Video Maker V2 [BETA]

Video Maker V2

By DemonAlone·Created 2 months ago·Updated a day ago· 1
Video Maker V2 [BETA]
  • images
  • audio
  • last_frame
fps24.00
trim_audiotrue
filenamevideo
use_date_maskfalse
custom_date_formatyyyy-mm-dd

You've animated something - AnimateDiff frames, an LTX or WAN output, a multi-image batch - and ComfyUI hands you... a pile of numbered PNGs. There's no native "Save Video" in the base install, and stitching frames is the step everyone quietly dreads. Video Maker V2 is a self-contained answer: you feed it an IMAGE batch, it writes an MP4 straight into your output/ folder on the server, and then plays the result back inside the node so you can see it without leaving the canvas.

It's the BETA successor to the pack's original Video Maker (now labeled DEPRECATED). The name isn't a lie like some addons - it genuinely encodes H.264 with audio, needs no API key, and doesn't phone home.

Why V2 exists (the one thing to know)

The original Video Maker was true to this pack's gimmick: it streamed your frames to the browser and muxed the MP4 client-side with mp4-muxer, so you got instant preview without a page reload. But browser-side encoding meant the whole clip had to live in tab memory and the audio was capped at whatever the web encoder would give you.

V2 flips it: all encoding happens server-side with PyAV (the av Python package), then the node's small JavaScript widget just loads the finished file for preview. That move buys two things the author calls out: higher audio bitrates (the code writes AAC at a meaty 320 kbps) and reliable background processing on long batches. Same visual-preview payoff, none of the browser limits.

How it works

The node takes your batched images tensor and hands each frame to a libx264 encoder at crf 18, preset medium, yuv420p - a solid default that looks near-lossless without ballooning file size. Two quiet details are worth knowing:

  • Odd dimensions get cropped. H.264's yuv420p needs even width/height, so if your batch is 513px wide it silently drops the last pixel column/row rather than erroring. Feed it even sizes (most video models already do) and you'll never notice.
  • Files never silently overwrite. It saves to ComfyUI/output/, auto-appends .mp4, and if video.mp4 already exists it becomes video_01.mp4, video_02.mp4, and so on.

If you wire in audio, it opens an AAC stream alongside the video, uses the incoming sample rate, and picks mono or stereo from the channel count. That's where the 320 kbps bitrate lives - good enough to carry real music or dialogue without artifacts.

The inputs that matter

  • images - your batch of frames. Required. This is the whole job.
  • fps - default 24, range 1–60. Set it to what your motion model generated at, or your "video" is fast-forward or slow-mo.
  • trim_audio (default on) - if your audio is longer than the video, chop it to match. Turn it off if you deliberately want the file to outlast the visuals.
  • audio (optional) - an AUDIO tensor from any node that outputs one (the same type ComfyUI's core audio nodes use), like the original soundtrack of a video you're re-rendering.
  • filename - relative path inside output/, e.g. portraits/run_a. You can embed %date% for the current date, and the use_date_mask + custom_date_format pair swaps in your own format using yyyy/mm/dd tokens.

The single output is last_frame (an IMAGE) - handy if you want to chain a save node after it. The real result is the file plus the in-node <video> preview that pops up when execution finishes.

Installing it

ComfyUI Manager is easiest: search DemonAlone-JS_Addon-ComfyUI and install. Or by hand:

cd ComfyUI/custom_nodes
git clone https://github.com/DemonAlone/DemonAlone-JS_Addon-ComfyUI

then restart ComfyUI. No model files to download. The pack itself ships no requirements.txt, but the code imports PyAV - most current ComfyUI builds already bundle av (it powers core audio support), so you're usually fine. If the node fails to load with an import error about av, install it into your ComfyUI environment:

pip install av

Where people get burned

The classic trap is odd-resolution output: if your VAE or upscaler produced a 961px-wide image, you'll get a video one pixel narrower than your frames with no warning - check before you render. Second, if you only see "Ready to generate" with no file, confirm the node actually executed; it's an output node, so ComfyUI only runs it if it's not muted or bypassed. And remember it writes to output/, not temp/ - if you're hunting for the file, it's the same folder your SaveImage PNGs land in.

One honest caveat: the pack is explicitly BETA and reads like a one-dev project - the README even credits the LLMs that helped write it. For this node that's fine; the code is small and does one job well. When the clip matters, this beats the browser-muxing equivalent.

Categoryvideo

Inputs (7)

NameTypeDefaultDescription
imagesIMAGE
fpsFLOAT24.001–60
trim_audioBOOLEANtrue
filenameoptSTRINGvideoRelative path inside `output`. Use %date% for date.
use_date_maskoptBOOLEANfalse
custom_date_formatoptSTRINGyyyy-mm-ddDate format if custom mask is enabled
audiooptAUDIO

Outputs (1)

NameTypeDescription
last_frameIMAGE