Nodes/ComfyUI-Apt_Preset/sum_load_MiniMaxH3
ComfyUI Node

sum_load_MiniMaxH3

The one-node loader that stands up a full MiniMax H3 stack

By cardenluo·Created 2 years ago·Updated 7 days ago· 331
sum_load_MiniMaxH3
    • context
    • model
    • clip
    • vae
    • audio_vae
    unet_name
    unet_Weight_Dtype
    clip_type
    clip1
    vae
    audio_vae
    steps20
    cfg8.0
    sampler
    scheduler

    MiniMax H3 is a multimodal video model, which in ComfyUI terms means it doesn't behave like a checkpoint you can just drop on the canvas. You need a UNet, a text encoder, a video VAE and an audio VAE, plus a sampler config - that's normally four or five separate loader nodes and a pile of wires. sum_load_MiniMaxH3 collapses all of it into one node. In the pack's "Loader → Controller → Sampler" framework, this is the Loader for the H3 stack: it loads everything, hands you a ready-made RUN_CONTEXT pipe, and lets the controller nodes (AD_MiniMax_guide, AD_MiniMax_Ref2V) do the conditioning.

    It's part of the pack's sum_load_adv loader family (the code sets NAME = "sum_load_adv"), but this variant is specialized for H3 and shows up in the node list under its own class name, sum_load_MiniMaxH3. The universal loaders in the same family handle SD/SDXL/Flux-style checkpoints; this one handles the H3 UNet + dual-VAE stack.

    How it works

    Internally it reuses ComfyUI's standard UNETLoader, CLIPLoader, and VAELoader - no custom inference code. The interesting parts are the conveniences:

    • GGUF support. If your UNet or CLIP file ends in .gguf, it loads through the pack's GGUF wrapper. The README is explicit: to load GGUF you need ComfyUI-GGUF installed, and the pack also wants gguf and protobuf (both are in its requirements). Without it you'll get a clear "GGUF not installed" error, not a silent fail.
    • Model caching. Loaded (unet, clip) pairs are cached by a hash of the filenames and weight dtype, and the cache is cleared on the next different model load. Re-running the same workflow doesn't re-read the weights from disk - a real timesaver for H3, which is heavy.
    • Sampler defaults ride along. steps, cfg, sampler (44 choices, full KSampler list), and scheduler are set here and packed into the context so downstream sampler nodes pick them up. Defaults are 20 steps, cfg 8, euler/simple - tune them.

    Inputs and outputs

    All inputs are optional, which is the loaders' deliberate design:

    • unet_name - from models/unet and models/unet_gguf. None skips model loading (useful with clip1 only, or when something upstream overrides).
    • unet_Weight_Dtype - None, default, or the fp8 variants (fp8_e4m3fn, fp8_e4m3fn_fast, fp8_e5m2). fp8 is how you fit H3 on a smaller card.
    • clip_type - 29 options (wan, hidream, sd3, ltxv…); pick the one matching your H3 text encoder.
    • clip1, vae, audio_vae - model files for each.
    • steps / cfg / sampler / scheduler - sampling defaults packed into the context.

    Outputs: context (RUN_CONTEXT), model, clip, vae, audio_vae. The context is the pack's pipe - a single wire that carries all of it down to the controller and sampler.

    Installing it

    Part of ComfyUI-Apt_Preset:

    cd ComfyUI/custom_nodes
    git clone https://github.com/cardenluo/ComfyUI-Apt_Preset
    # install.bat or pip install -r requirements.txt, restart
    

    Or Manager → search "ComfyUI-Apt_Preset". For GGUF loading, also install ComfyUI-GGUF.

    Where people get burned

    Missing GGUF support is the top one - you load an .gguf UNet and it errors until ComfyUI-GGUF is present. Wrong clip_type is second: H3 needs its own text-encoder type, and picking the wrong one either errors or produces garbage conditioning, so double-check against the model you downloaded.

    And the cache has one gotcha worth knowing: because the loader caches aggressively and clears on the next different model, hot-swapping between two H3 configs in one session means a reload each switch. That's by design, not a bug - but don't be surprised by the pause when you change files mid-session. Finally, None everywhere produces a context full of Nones; that's valid for building a partial pipeline, but if you wire a sampler into an empty model you'll get a runtime error that reads like the sky is falling.

    CategoryApt_Preset/chx_load

    Inputs (10)

    NameTypeDefaultDescription
    unet_nameoptCOMBO0 options:
    unet_Weight_DtypeoptCOMBO4 options: default, fp8_e4m3fn, fp8_e4m3fn_fast, fp8_e5m2
    clip_typeoptCOMBO28 options: stable_diffusion, stable_cascade, sd3, stable_audio, mochi, ltxv, +22
    clip1optCOMBO0 options:
    vaeoptCOMBO0 options:
    audio_vaeoptCOMBO0 options:
    stepsoptINT201–999999
    cfgoptFLOAT8.00–100
    sampleroptCOMBO44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38
    scheduleroptCOMBO9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3

    Outputs (5)

    NameTypeDescription
    contextRUN_CONTEXT
    modelMODEL
    clipCLIP
    vaeVAE
    audio_vaeVAE