Nodes/ComfyUI_JR_MiniMaxH3Node/JR MiniMax H3 Enhanced Video Combine
ComfyUI Node

JR MiniMax H3 Enhanced Video Combine

The video output node that tries every encoder before it gives up

By Goldlionren·Created 21 days ago·Updated about 9 hours ago· 28
JR MiniMax H3 Enhanced Video Combine
  • images
  • audio
  • frames
  • filename
frame_rate24.00
codecAuto
containerAuto
bit_depthAuto
quality20
log_levelStandard
pingpongfalse
save_metadatatrue
filename_prefixvideo/%date:yyyy-MM-dd%/%date:hhmmss%
save_outputtrue
pass_framesfalse
crop_to_audiofalse
audio_codecAuto
audio_bitrate192k
save_first_framefalse
save_last_framefalse

The last mile of any video workflow is getting frames off the GPU and into a file that plays everywhere, and that's where most stock combine nodes show their age. The JR H3 Enhanced Video Combine is this pack's output node: it takes an IMAGE batch, encodes it with FFmpeg, and gives you an in-node video preview with autoplay, download, and save-first/last-frame buttons. The filename STRING output is the real "what did you write" answer, and frames (the IMAGE passthrough) feeds downstream nodes when pass_frames is on.

How it decides what to use

The codec/container/dimension decisions are set by dropdowns: codec (Auto/AV1/VP9/H.265/H.264), container (Auto/WebM/MKV/MP4/Animated WebP/Animated AVIF), bit_depth (Auto/8-bit/10-bit), quality (0–51, lower is better), frame_rate (default 24 - H3's native cadence), plus audio options (audio_codec AAC/Opus/MP3, audio_bitrate 64k–320k) and a crop_to_audio toggle. Behind the scenes it walks an encoder priority list - NVENC → QSV → AMF → VAAPI → software - and picks the first one FFmpeg actually has. That's why "it just works" on most rigs: it's not one encoder, it's a fallback chain.

The fallback story is the interesting part. H.264 NVENC tops out around 4096 pixels wide, and when a horizontal stitch produces something like 4352×2880, the node recognizes Windows' EPIPE/EINVAL (Errno 22) encoder failure and quietly falls back to libx264. The file still saves - it's just noticeably slower. Browser compatibility is handled too: HEVC, 10-bit, and MKV outputs get a temporary H.264 stream for preview, while Download always points at the original saved file. Repeated runs never overwrite - it scans all extensions and appended markers for the same basename. Every execution returns a fresh preview_id, so the browser doesn't keep showing last round's cached video.

The outputs and the pass-through trap

  • frames (IMAGE) - an echo of the input batch, only populated when pass_frames=true.
  • filename (STRING) - the actual saved path, for metadata or a text logger.

save_first_frame / save_last_frame write PNGs for convenience; note they do not create IMAGE outputs on their own. If you want the last frame as an IMAGE in the graph, you wire frames (with pass_frames=true) into the separate Last Frame node.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/Goldlionren/ComfyUI_JR_MiniMaxH3Node
<your-comfyui-python> -m pip install -r ComfyUI_JR_MiniMaxH3Node/requirements.txt

or ComfyUI Manager → search ComfyUI_JR_MiniMaxH3Node. The one required dependency is imageio-ffmpeg, which supplies an FFmpeg binary when none is on your PATH. A hard browser refresh after updating matters here - the preview UI is JavaScript.

Troubleshooting

  • Ultra-wide renders crawl - that's the software fallback doing its job. If delivery allows, switch codec to H.265 or AV1, or keep one side within the hardware encoder's width limit.
  • Preview shows H.264 but the file is different - expected: the preview is a compatibility stream; Download is the real file.
  • No filename coming out - check save_output is on, and that FFmpeg can actually be found (imageio-ffmpeg installed).
CategoryJR MiniMax H3/Video

Inputs (18)

NameTypeDefaultDescription
imagesIMAGE
frame_rateFLOAT24.000.1–240
codecCOMBOAuto5 options: Auto, AV1, VP9, H.265 (HEVC), H.264
containerCOMBOAuto6 options: Auto, WebM, MKV, MP4, Animated WebP, Animated AVIF
bit_depthCOMBOAuto3 options: Auto, 8-bit, 10-bit
qualityINT200–51
log_levelCOMBOStandard2 options: Standard, Verbose
pingpongBOOLEANfalse
save_metadataBOOLEANtrue
filename_prefixSTRINGvideo/%date:yyyy-MM-dd%/%date:hhmmss%
save_outputBOOLEANtrue
pass_framesBOOLEANfalse
crop_to_audioBOOLEANfalse
audio_codecCOMBOAuto4 options: Auto, AAC, Opus, MP3
audio_bitrateCOMBO192k7 options: 64k, 96k, 128k, 160k, 192k, 256k, +1
save_first_frameBOOLEANfalse
save_last_frameBOOLEANfalse
audiooptAUDIO

Outputs (2)

NameTypeDescription
framesIMAGE
filenameSTRING