DaSiWa Enhanced Video Combine
A combine node that picks its own codec
- images
- audio
- frames
- filename
If you've used the standard VHS Video Combine node, this is that node's job with the boring parts automated. Point it at an IMAGE batch, and instead of you guessing whether your GPU actually supports the codec you picked, it tests AV1 → H.265 → VP9 → H.264 in order and uses the first one that actually works on your machine - NVENC first if you've got an NVIDIA card, then other GPU encoders (Intel QSV, AMD AMF, VAAPI), then software as the last resort. Set codec to Auto and forget about it; only override it when you specifically need a container/codec combo for something downstream.
How it works
Codec, container, and bit depth all default to Auto, and the node runs its own compatibility check at encode time rather than trusting a fixed config. It pairs the codec with a compatible container automatically (WebM/MKV/MP4), and if every preferred combination fails on your host, it falls back to plain H.264-in-MP4 - the one combination that plays everywhere. It also detects whether your source frames are 8-bit or 10-bit: H.265 output keeps the requested precision, but it additionally writes an H.264 sidecar file automatically, because a lot of browsers still can't play HEVC. You'll end up with two files in some cases; that's by design, not a bug.
Every run gets a compact log line telling you what it actually picked - codec, container, encoder, resolved audio settings (like audio=libopus/192k) - so when something looks off you don't have to reverse-engineer it from the output file.
The inputs and outputs that matter
images- your frame batch.frame_rate(default 24) sets playback speed, not generation speed.codec/container/bit_depth- leave onAutounless you have a reason not to.quality(0–51, default 20) - this is a CRF-style scale: lower number, higher quality, bigger file. 20 is a solid middle ground; go toward 15–18 if you're archiving, 25+ if you just need a quick preview.pingpong- plays the clip forward then backward, useful for seamless loops without doubling your frame count at generation time.filename_prefix(defaultvideo_%date:hhmmss%) - supports the usual placeholder syntax.save_first_frame/save_last_frame- writes matching PNGs alongside the video and pushes them plus the video to ComfyUI's Assets panel, handy for thumbnail-hunting without opening the video.- Optional
audioinput muxes a connected ComfyUIAUDIOtrack - pair withaudio_codec,audio_bitrate, andcrop_to_audio(trims video length to match the audio track instead of the other way around).
Outputs: frames (the IMAGE batch, so you can chain it into something else without a Reroute) and filename (STRING - the path it actually wrote, useful for downstream logging or a notification node).
How to install it
ComfyUI Manager - search DaSiWa-Nodes, install, restart.
Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/darksidewalker/ComfyUI-DaSiWa-Nodes
pip install -r ComfyUI-DaSiWa-Nodes/requirements.txt
then restart ComfyUI. This node itself doesn't need an NVIDIA GPU - the encoder auto-selection just prefers NVENC when it's available and steps down gracefully when it isn't.
Common issues & troubleshooting
It's using software x264 and it's slow. That means the auto-detect didn't find a working GPU encoder path on your host - usually missing or mismatched NVIDIA/AMD/Intel drivers, or you're on a container/VM without GPU passthrough for encoding. Check the log line the node prints; it tells you exactly what it tried and what it landed on.
Two files got written when I only asked for one. That's the 10-bit-source-with-H.265 case: the node writes the requested HEVC file plus an H.264 sidecar automatically, because HEVC playback in-browser is still inconsistent. Not a bug - use the sidecar for sharing, the primary for archiving.
Audio track is missing, or the video is longer than the audio. Confirm you actually wired an AUDIO input - it's optional and silently skipped if empty. If lengths don't match, turn on crop_to_audio.
Inputs (18)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| frame_rate | FLOAT | 24.000.1–240 | — |
| codec | COMBO | Auto | 5 options: Auto, AV1, VP9, H.265 (HEVC), H.264 |
| container | COMBO | Auto | 4 options: Auto, WebM, MKV, MP4 |
| bit_depth | COMBO | Auto | 3 options: Auto, 8-bit, 10-bit |
| quality | INT | 200–51 | — |
| log_level | COMBO | Standard | 2 options: Standard, Verbose |
| pingpong | BOOLEAN | false | — |
| save_metadata | BOOLEAN | true | — |
| filename_prefix | STRING | video_%date:hhmmss% | — |
| save_output | BOOLEAN | true | — |
| pass_frames | BOOLEAN | false | — |
| crop_to_audio | BOOLEAN | false | — |
| audio_codec | COMBO | Auto | 4 options: Auto, AAC, Opus, MP3 |
| audio_bitrate | COMBO | 192k | 7 options: 64k, 96k, 128k, 160k, 192k, 256k, +1 |
| save_first_frame | BOOLEAN | false | — |
| save_last_frame | BOOLEAN | false | — |
| audioopt | AUDIO | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| frames | IMAGE | — |
| filename | STRING | — |