Nodes/MiniMax H3 CLIP-Cached/MiniMax H3 CLIP-Cached Ref2VA (Dual Resolution)
ComfyUI Node

MiniMax H3 CLIP-Cached Ref2VA (Dual Resolution)

The Ref2VA Dual Resolution node

By Mu5hr00moO·Created 9 days ago·Updated about 23 hours ago· 8
MiniMax H3 CLIP-Cached Ref2VA (Dual Resolution)
  • vae
  • audio_vae
  • ref_image_0
  • ref_image_1
  • ref_image_2
  • ref_image_3
  • ref_image_4
  • ref_image_5
  • ref_image_6
  • ref_image_7
  • ref_image_8
  • ref_video_0
  • ref_video_1
  • ref_video_2
  • ref_video_audio_0
  • ref_video_audio_1
  • ref_video_audio_2
  • ref_audio_0
  • ref_audio_1
  • ref_audio_2
  • positive
  • latent
  • positive_upscale
clip_name
prompt
width1344
height768
width_upscale1344
height_upscale768
length124
ref_image_sizematch
generate_upscale_condtrue
cache_modeauto

MiniMaxH3CLIPCachedRef2VADualRes is what you get when you combine the two ideas the pack sells separately: the cached Ref2VA reference-to-video path, and the Dual Resolution trick of preparing a base generation and its upscale-target conditioning from one shared set of inputs. If your workflow conditions H3 on reference images or video and continues through a latent-upscale branch, this is the node that keeps the prompt, references, encoder choice, and length in a single place instead of duplicating a whole reference conditioning node for the upscale pass.

Like its FL2VA sibling, this is not an upscaler. It prepares conditioning for two resolutions; a separate latent-upscale node resizes the base latent and hands it to the upscale branch. The node returns three outputs - positive and latent for the base width/height, and positive_upscale (CONDITIONING) for width_upscale/height_upscale. There's deliberately no second latent output: an upscale workflow takes the base latent, resizes it externally, and combines that with positive_upscale, so exposing a second empty latent was pointless and the author removed it.

Inputs that matter

Everything from the single-resolution cached Ref2VA node carries over: clip_name, vae plus audio_vae, prompt, width/height, length (124 ≈ 5 s at 24 fps), and ref_image_size (match scales references to the generation pixel area; max keeps the 2048-px short-edge path for identity fidelity at the cost of slower sampling). The reference slots are the same fixed set - ref_image_0ref_image_8, ref_video_0ref_video_2 with matching soundtracks, and ref_audio_0ref_audio_2 - and the same slot rules apply: unconnected slots are dropped, order is preserved, and MiniMax H3 prompt references like <Picture 1> address the positional order after compaction, not the socket number you wired.

The two new controls are the resolution pair width_upscale/height_upscale and generate_upscale_cond. That boolean defaults to on, and it's the only way to skip the second-resolution encode: turn it off and positive_upscale comes back as None. This is more load-bearing than it looks because the node is one atomic call that returns all three outputs together - bypassing the downstream upscale consumer does not skip the encode on its own. cache_mode (auto/refresh) applies to both resolutions; with auto, if the two resolutions end up presenting the encoder with the same effective reference pixels, they share one cache entry and Qwen3-VL loads at most once per run.

Installing

The pack-wide routine applies: ComfyUI Manager (search "MiniMax H3 CLIP-Cached"), or

cd ComfyUI/custom_nodes
git clone https://github.com/Mu5hr00moO/ComfyUI-MiniMaxH3-CLIPCached

Restart, and the node appears under model/conditioning/minimax/cached. It needs ComfyUI v0.30.0+ with native H3 nodes (validated against v0.34.2), a MiniMax H3 encoder checkpoint in models/text_encoders, and no dependencies beyond the safetensors ComfyUI already bundles.

The honest caveat

Two caveats stack here, so read them both. First, this is a Ref2VA-based node, and the author's own docs flag the Ref2VA path as less battle-tested than FL2VA - it delegates to ComfyUI's stock Reference to Video implementation and shares its cache architecture, but hasn't seen the same depth of real-world workflow testing. Second, this is the least common configuration in the pack: you're combining the newer reference path with the two-resolution bookkeeping, so you're the most likely person to hit something the author hasn't. If a workflow-specific issue shows up, that's a report-upstream moment, not a sign you misconfigured it. And if you don't actually have an upscale branch, skip the Dual Resolution node entirely - the plain cached Ref2VA is simpler and won't tempt you into paying for an encode you don't use.

Categorymodel/conditioning/minimax/cached

Inputs (30)

NameTypeDefaultDescription
clip_nameCOMBOMiniMax H3 text/vision encoder (Qwen3-VL) checkpoint from models/text_encoders. Loaded lazily -- only on a cache miss.
vaeVAE
audio_vaeVAE
promptSTRING
widthINT134432–16384
heightINT76832–16384
width_upscaleINT134432–16384Encoded through the same fully independent cached path as width -- with cache_mode auto a cache HIT when the encoder input ends up identical, otherwise a real encode; cache_mode refresh always re-encodes.
height_upscaleINT76832–16384Encoded through the same fully independent cached path as height -- with cache_mode auto a cache HIT when the encoder input ends up identical, otherwise a real encode; cache_mode refresh always re-encodes.
lengthINT1245–3600Frame count at 24 fps, (124 = ~5s, trained range is ~124-362)
ref_image_sizeCOMBOmatchReference image sizing. 'match' scales each ref (down only, keeping aspect) to the generation's pixel area; 'max' uses the reference pipeline's 2048px short edge for best identity fidelity. Reference tokens ride through every sampling step, so 'max' can be several times slower.
ref_image_0optIMAGEReference image (downscaled to 2048 short edge if larger, never upscaled)
ref_image_1optIMAGEReference image (downscaled to 2048 short edge if larger, never upscaled)
ref_image_2optIMAGEReference image (downscaled to 2048 short edge if larger, never upscaled)
ref_image_3optIMAGEReference image (downscaled to 2048 short edge if larger, never upscaled)
ref_image_4optIMAGEReference image (downscaled to 2048 short edge if larger, never upscaled)
ref_image_5optIMAGEReference image (downscaled to 2048 short edge if larger, never upscaled)
ref_image_6optIMAGEReference image (downscaled to 2048 short edge if larger, never upscaled)
ref_image_7optIMAGEReference image (downscaled to 2048 short edge if larger, never upscaled)
ref_image_8optIMAGEReference image (downscaled to 2048 short edge if larger, never upscaled)
ref_video_0optIMAGEReference video frames at 24 fps (2-15s)
ref_video_1optIMAGEReference video frames at 24 fps (2-15s)
ref_video_2optIMAGEReference video frames at 24 fps (2-15s)
ref_video_audio_0optAUDIOSoundtrack of the same-numbered reference video
ref_video_audio_1optAUDIOSoundtrack of the same-numbered reference video
ref_video_audio_2optAUDIOSoundtrack of the same-numbered reference video
ref_audio_0optAUDIOStandalone reference audio
ref_audio_1optAUDIOStandalone reference audio
ref_audio_2optAUDIOStandalone reference audio
generate_upscale_condoptBOOLEANtrueWhen off, the second (upscale-resolution) encode is skipped entirely - positive_upscale comes back as None. Turn off for a plain generation where nothing downstream uses the upscale conditioning; turn on when you actually need it. Bypassing the upscale consumer downstream does NOT skip this encode by itself - this is the only thing that does, because the node runs as one atomic call.
cache_modeoptCOMBOautoauto: reuse the cached encode for an identical prompt + reference images/videos/audio + clip_name (checkpoint identity = filename+size+mtime+ctime) if one exists, otherwise encode and save it. refresh: ignore any cached encode, always re-encode and overwrite the cache. Applies to both resolutions.

Outputs (3)

NameTypeDescription
positiveCONDITIONING
latentLATENT
positive_upscaleCONDITIONING